← 돌아가기

Case Study · ⑩ 배달 흐름 지도

지도에 없던 상점들

배달앱 주문은 우리가 직접 등록한 상점이 아니라 배달앱에서 연동(API)으로 넘어옵니다. 그래서 주문의 40% 넘게를 내는 상점들이 어디에 있는지 지도로 본 사람이 없었습니다. 주문 기록에서 상점 위치와 배송 경로를 다시 그려, 라이더를 어디에 두고 어느 지역에 할증을 요청할지 근거로 쓰기 시작한 기록입니다.

역할 단독 기획·구축 대상 3개 권역 · 매일 아침 자동 갱신 제약 조회 권한만 · 개발 리소스 없음

상황

주문의 절반 가까이를 내는 상점이 등록부에 없었습니다

직접 영업한 상점은 주소와 담당자가 등록돼 있습니다. 그런데 배달앱 상점은 주문이 들어올 때 상점 이름과 좌표가 함께 넘어올 뿐, 우리 쪽 목록에는 없습니다.

두 권역에서 배달앱 주문은 전체 주문의 42~45%였습니다. 그런데도 “이 상점들이 어디 몰려 있나”, “어디로 배달 나가는 주문이 힘든가”를 볼 화면이 없었습니다. 라이더 대기 위치나 할증 지역은 경험과 감으로 정해 왔습니다.

상점이 어디 있는지 모르면, 라이더를 어디에 둘지도 할증을 어디에 붙일지도 감으로 정할 수밖에 없습니다.

한 일 1

주문 기록으로 지도를 다시 그렸습니다

상점 목록은 없어도 주문 기록에는 모든 게 남아 있었습니다. 주문 한 건마다 픽업 위치, 도착 위치, 접수·배차·픽업·완료 시각을 꺼내 행정동 경계 위에 올렸습니다. 상점 점 크기는 주문 수, 선은 실제 배송 방향입니다. 고객 주소는 약 45m 격자로 뭉개 개인을 특정할 수 없게 했습니다.

지점 단위로 일주일 부하를 보던 ⑧과 달리, 이 지도는 주문 한 건 한 건의 경로를 하루 단위로 봅니다. 매일 아침 전날 기록이 자동으로 더해집니다.

데모 화면 — 배달앱 상점만 걸러 본 3주 흐름
가상 도시·가상 데이터. 화면 구성과 계산 방식은 실제 도구와 같습니다.
가상 도시 지도 위에 배달앱 상점이 세 상권에 몰려 있고, 서쪽 두 동이 배송 난이도 높음으로 붉게 칠해진 화면
왼쪽 출발→도착 동 비중과 지역별 수행 성과, 가운데 상점 분포와 배송 난이도 색, 오른쪽 라이더 수·지연 원인. 붉은 동일수록 지연·거절·배차 대기가 권역 평균보다 높습니다.

발견

배달앱 상점은 몇 개 동에 몰려 있었습니다

상위 3개 동에 있는 상점74%한 권역 기준 · 배달앱 상점
상점이 있는 동7 / 16나머지 9개 동은 배송만 받는 곳
상위 20% 상점의 주문 몫60%두 권역 모두 비슷
배달앱 주문 비중42~45%두 권역

한 권역에서는 배달앱 상점의 74%가 3개 동에 있었고, 16개 동 중 상점이 있는 곳은 7개뿐이었습니다. 라이더가 기다려야 할 곳은 권역 전체가 아니라 이 몇 개 동이었고, 나머지 동은 “배달만 나가는 곳”이었습니다. 배달이 나가는 쪽 중 멀고 돌아오기 힘든 동이 바로 지연과 거절이 몰리는 곳이었습니다.

한 일 2

어디가 잘 되고 어디가 안 되는지, 동 단위로 나눴습니다

지역 수행 성과도착 동 난이도 도착 동마다 지연율·거절률·배차 대기를 권역 평균과 비교해 어려움 · 보통 · 수월로 나눴습니다. 지도에 색으로 칠해져, 할증을 검토할 동이 바로 보입니다.
출발 → 도착 동“A동 → B동 몇 건, 몇 %” 어느 상권에서 어느 동으로 주문이 흐르는지, 그 구간의 지연이 얼마인지 표로 봅니다. 줄을 누르면 지도와 숫자가 그 구간만으로 걸러집니다.
라이더가 피하는 구간 · 공차AI 배차 제안 기록 AI 배차가 라이더에게 보낸 제안이 거절·만료된 기록으로 라이더가 꺼리는 구간을 찾고, 배송 뒤 다음 픽업까지 빈 차로 돌아오는 거리(공차)를 동별로 셉니다. 라이더 이름은 익명 코드로만 보입니다.

거절이 많은 이유가 배달이 멀어서인지, 동선이 안 맞아서인지도 나눠 봤습니다. 제안을 받은 시각에 라이더가 있던 곳(직전 배송지)에서 픽업 상점까지의 거리와, 상점에서 고객까지의 배달 거리를 따로 놓고 거절률을 비교했습니다.

한 권역 · 하루 기준가까울 때멀 때차이
라이더 위치 → 픽업 상점 거리 (1km 미만 → 2~3km)52%92%+40%p
상점 → 고객 배달 거리 (1km 미만 → 3km 이상)71%84%+13%p

거절은 배달 거리보다 “지금 있는 곳에서 픽업지가 먼가”에 훨씬 크게 반응했습니다. 그렇다면 먼 배달에 할증을 붙이는 것보다 라이더 대기 위치를 상점이 몰린 동으로 옮기거나 같은 방향 주문을 묶는 것이 먼저일 수 있습니다. 실제 GPS가 아니라 직전 배송지로 추정한 값이라, 결론이 아니라 확인해 볼 가설로 둡니다.

쓰임

감으로 정하던 것을 근거로 말할 수 있게 됐습니다

라이더 배치상점 밀집 동 기준 상점이 몰린 동과 시간대를 보고 대기 위치를 정합니다. 날마다 라이더 수와 전날 대비 증감, 1인당 완료 건수를 같이 봅니다.
할증 · 비용 요청 근거어려운 동만 골라서 권역 전체가 아니라 지연·거절·공차가 함께 높은 동만 골라 할증이나 추가 비용을 요청할 근거로 씁니다. 거절은 낮은데 지연만 높은 동은 할증이 아니라 라이더 수나 픽업 문제로 따로 봅니다.
AI 배차 운영 개선거절 이유 분해 라이더가 어떤 주문을 피하고 어떤 주문을 잘 받는지가 쌓이면서, 배차 반경·묶음 배차·복귀 보상처럼 AI 배차를 운영 쪽에서 어떻게 손볼지 판단할 데이터가 됩니다.

직접 눌러볼 수 있는 데모

도시·행정동·상점·주문·라이더는 모두 가상이고, 화면 구성과 계산 방식은 실제 도구와 같습니다.

  • 위쪽 채널에서 [배달앱(API 연동)]을 누르면 연동 상점만 남아, 상점이 어느 상권에 몰려 있는지 보입니다
  • [난이도 색]을 켜면 배송이 힘든 동이 붉게 칠해지고, 왼쪽 「할증·비용 검토 후보」에 이유와 함께 나옵니다
  • 오른쪽 라이더 목록에서 한 명을 누르면 그날 동선이 순서대로 그려지고, 그 라이더가 피한 구간과 거절 이유가 나옵니다
  • 왼쪽 아래 「거절 이유 추정」에서 거리 때문인지 동선 때문인지 비교합니다
데모 열기 →

지금 상태

지도는 3개 권역 기록을 매일 아침 자동으로 더하고, 같은 파트 팀원들이 사내 계정으로 열어 봅니다. 무엇을 어떤 기준으로 셀지는 제가 정했고, 데이터 추출과 화면 구현은 AI(Claude)와 함께 했습니다.

이 지도를 근거로 한 할증·배치 요청은 아직 정식으로 내지 않았습니다. 거절 이유도 추정이라 몇 주 더 쌓아 같은 경향이 반복되는지 봐야 합니다. 그래서 이 기록도 “문제를 해결했다”가 아니라 “감으로 정하던 것을 근거로 따져볼 수 있게 됐다”로 씁니다.

이 작업에서 남긴 것

등록부에 없는 상점도 주문 기록에는 빠짐없이 남아 있었습니다. 새 데이터를 만든 것이 아니라, 이미 쌓이고 있던 기록을 지도로 다시 읽은 것이었습니다.