기사마다 동네(행정구) 단위로 오더를 뭉쳐서 준다. 목표는 딱 하나 — "한 기사는 한 동네, 많아야 붙어있는 두 동네". 사람이 배차할 때 하는 그 방식이다.
순서는 이렇다: 오더를 동네별로 묶고 → 너무 넓은 동네는 반경 5km(도심)/8km(외곽)로 쪼개고 → 동네 묶음을 기사 수에 맞춰 정리한 뒤 → 자택이 가까운 기사에게 하나씩 준다. 설치비·시간은 그 다음 문제다(군집이 최우선).
| 지표 | 뭘 재나 | 좋은 방향 | 합격선(수기 실측) |
|---|---|---|---|
| 구2개↓ | 담당 동네 2개 이하인 기사 비율 = "인접 2개까지" 원칙 준수율 | 높을수록 | 88~90% |
| 평균구수 | 기사당 평균 동네 수 (1.0 = 전원 한 동네) | 낮을수록 | ~1.5 |
| 담당폭 | 기사 배송지 중 가장 먼 두 곳 거리(직선) | 낮을수록 | 도심 중앙 6km대 |
| 최대폭 | 그날 최악 기사의 담당폭 = 원정 감지기 | 낮을수록 | 도심 11km(수기 90%) |
| 미배 | 배정 못 한 오더 수 = 부담 | 낮을수록 | 낮을수록 |
앞 4개 = "군집 세게" · 마지막 1개 = "미배 적게". 4개가 오르고 미배가 안 늘면 성공, 미배가 늘면 그 수가 응집의 가격표다.
문제: 어떤 날은 동네가 35개인데 기사는 23명. 옛 엔진은 큰 동네 23개만 기사에게 주고 남은 12개 동네를 "가장 가까운 기사"에게 조건 없이 얹었다. 그래서 한 기사가 동네 6개를 22km 돌아다니는 배차(정승모 사례)가 나왔다.
처리: 배정하기 전에 작은 동네들을 이웃 동네와 합쳐 묶음 수를 기사 수에 맞춘다. 합칠 때 3가지를 다 만족해야 한다 — ①합쳐서 동네 2개 이하 ②경계가 실제로 붙은 동네만(행정경계 지도 기반, 동네 건너뛰기 금지) ③합친 폭이 도로 기준 한도 안.
효과: Y3027 묶음 35→23=기사 수. 정승모 22.4km 6동네 → 4.5km 한 동네권.
문제: "대구 중구" 주소가 서울 중구와 같은 동네로 취급되고 있었다(중구·서구·강서구는 전국에 여럿). 실측으로 '중구' 좌표 범위가 348km — 군집·도심 판정이 통째로 오염.
처리: 동네 이름에 항상 시/도를 붙인다("서울 중구"/"대구 중구", 군은 "경기 가평군"). 행정경계 폴리곤 마스터(265구)도 이 이름 체계로 통일.
효과: 100km 넘게 퍼진 동네 0개. 재발 금지 항목.
문제: 서초와 과천은 직선으론 1km인데 실제론 우면산을 돌아 27km. 직선으로 재면 이런 조합을 "가깝다"고 착각해 묶을 수 있다.
처리: 묶음의 폭을 잴 때 OSRM(트럭) 도로거리로 잰다. 한도는 수기 배차 실측 퍼센타일(도심 15km/외곽 33km). OSRM이 죽으면 자동으로 직선으로 돌아간다.
효과: 사용자 확정 정답 4/4 재현 — 강남+서초 묶임(도로 14.0km) · 서초+과천 거부(27.1) · 처인+수지 거부(40.3) · 성북+강북 묶임(8.1).
문제: 배차가 끝난 뒤 미배를 줄이는 후처리(회수·재배치 등)가 미배 1건 살리자고 기사에게 먼 동네를 얹었다. 최악 사례: 미배 1건에 동네 2개 이하 기사 비율 100→60%.
처리: 모든 후처리가 같은 자를 넘지 못하게 게이트를 달았다 — 동네 ≤ 2+1개, 담당폭 ≤ 기준선+3km. 허용폭은 스위치로 조절 가능(더 조이거나 풀 수 있음).
효과: 그 최악 사례 100% 유지. 부수효과 — 기준선 밖 "헛회수"(어차피 시간검증에서 다시 탈락하던 것)가 차단되며 어떤 날은 미배 11→2.
| 권역 | 일수 | 구2개↓ | 평균구수 | 담당폭 | 최대폭 | 미배 |
|---|---|---|---|---|---|---|
| Y1 (강남권) | 15 | 93→97% | 1.38→1.32 | 8.1→7.6k | 22.6→20.0k | 11.9→12.7 |
| Y2 (수원권) | 9 | 74→91% | 1.84→1.52 | 7.5→7.1k | 21.2→20.0k | 18.2→21.0 |
| Y3 (서북부) | 2 | 87→89% | 1.67→1.74 | 6.1→5.7k | 16.1→11.2k | 10.0→10.0 |
| Y5 (송파·분당) | 1 | 75→87% | 2.00→1.62 | 9.5→8.0k | 17.0→16.6k | 20.0→19.0 |
미배를 시기로 갈라 보면: 7월(현행 수급) Y1 10일 합계 49→46건 (개선). 5월(물량 폭주기)에만 +7~14건 증가한 날이 있는데, 그 날들은 옛 엔진이 기사당 동네 2.1~2.6개를 우겨넣어 미배를 눌렀던 날이다 — 새 엔진은 그 배정을 거부하고 정직하게 미배로 남긴다. 그 미배가 아까우면 그날만 게이트 스위치를 풀면 된다.
| 날짜 | 미배 | 유휴 | 설치비CV | 구2개↓ | 담당폭 평균 | 최대폭 |
|---|---|---|---|---|---|---|
| 07/09 | 3 | 1 | 68 | 100% | 10.6k | 29.4k |
| 07/10 | 6 | 0 | 67 | 100% | 5.0k | 11.3k |
| 07/11 | 5 | 0 | 46 | 92% | 9.3k | 23.8k |
| 07/13 | 2 | 0 | 51 | 100% | 7.4k | 22.2k |
| 07/14 | 4 | 0 | 58 | 100% | 5.6k | 21.7k |
| 07/15 | 6 | 1 | 72 | 100% | 6.5k | 21.1k |
| 기사 | 건수 | 설치비 | 담당폭 | 담당 동네(건수) |
|---|---|---|---|---|
| 김창희 | 8 | 345k | 21.7km | 용인시 처인구8 |
| 임재환 | 12 | 311k | 19.8km | 평택시12 |
| 이동한 | 13 | 277k | 9.2km | 강남구6+동작구4+서초구3 |
| 이윤구 | 7 | 236k | 5.1km | 강남구7 |
| 권선일 | 5 | 235k | 6.3km | 강남구5 |
| 전영균 | 13 | 217k | 6.3km | 오산시13 |
| 최선근 | 5 | 211k | 3.2km | 의왕시5 |
| 오병근 | 5 | 203k | 5.6km | 광주시5 |
| 전남섭 | 6 | 167k | 8.6km | 용인시 수지구5+용인시 기흥구1 |
| 서정우 | 7 | 145k | 12.2km | 용인시 기흥구5+용인시 수지구2 |
| 함형만 | 4 | 125k | 4.1km | 안양시 만안구4 |
| 최경훈 | 4 | 109k | 23.8km | 이천시4 |
| 박과진 | 4 | 50k | 2.1km | 안양시 동안구4 |
| 박진목 | 3 | 38k | 2.4km | 군포시3 |
| 스위치 | 기본 | 뭘 하나 |
|---|---|---|
cluster_premerge | ON | 사전병합 (동네수=기사수 맞추기) |
cluster_road_metric | ON | 폭 판정을 도로거리로 (끄면 직선) |
cluster_cohesion_gate | ON | 후처리 통일 게이트 |
cluster_cohesion_gus_slack | 1 | 게이트 동네 허용폭 (0=2개 엄수) |
cluster_cohesion_slack_km | 3.0 | 게이트 폭 허용폭 km (0=기준선 엄수) |
options.engine에
{"cluster_merge_legacy":true, "cluster_premerge":false, "cluster_road_metric":false, "cluster_cohesion_gate":false}| 항목 | 내용 |
|---|---|
| 설치비 편차 큼 | CV 60 — 군집 최우선의 태생적 대가. 돈 공평이 목표면 힐베르트(25)가 맞음. 월 단위 보정은 fee_rotation(로테이션)이 담당 |
| 4동네 기사 잔존 | 동네수를 못 맞춘 날 마지막 폴백("미배로 버리느니 동네수 양보")의 산물 — Y3027에 2명. 거리 한도는 지킴 |
| 게이트 인접 미검사 | 후처리 게이트가 동네 수·폭만 보고 붙어있는지는 안 봄 — 비인접 1건 유입 사례. 마스터 인접 추가로 막을 수 있음(수정 후보) |
| 합배차 미지원 | 군집·힐베르트 공통 — 페어 머지가 배정 뒤에 있어 안 탐. 2인 오더는 2인팀 실차량 있을 때만 |
| 표본 부족 | Y2(7월 없음)·Y3(2일)·Y5(1일). 기준값도 전부 Y1 실측 유래 |
| 신설구 미반영 | 인천 검단·화성 동탄/병점/만세/효행 — 모구 폴리곤으로 흡수 처리 중 |