군집배차(cluster) 리포트 — 개편 안정화판

2026-08-02 · 엔진 현행 기본값(개편 4커밋 반영) · 글리스확정 6일(7/9~15) 신선 재실측 + 개편 전후 27건 비교

① 이 모드가 하는 일 (사람 말로)

기사마다 동네(행정구) 단위로 오더를 뭉쳐서 준다. 목표는 딱 하나 — "한 기사는 한 동네, 많아야 붙어있는 두 동네". 사람이 배차할 때 하는 그 방식이다.

순서는 이렇다: 오더를 동네별로 묶고 → 너무 넓은 동네는 반경 5km(도심)/8km(외곽)로 쪼개고 → 동네 묶음을 기사 수에 맞춰 정리한 뒤 → 자택이 가까운 기사에게 하나씩 준다. 설치비·시간은 그 다음 문제다(군집이 최우선).

99%
동네 2개 이하 기사 비율 (수기=사람 88~90%)
7.4km
기사 담당폭 평균 (힐베르트 12.6)
4.3
미배/일 (개편 전 6.7 → 힐베르트 4.8보다 낮아짐)
60
설치비 편차 CV (약점 — 군집 우선의 대가)
6일 평균, 현행 기본값. 지각 0(TW 준수 100) — 못 맞추는 오더는 지각 대신 미배로 정직하게 남기는 구조.

② 판정지표 5개 — 이 리포트를 읽는 자

지표뭘 재나좋은 방향합격선(수기 실측)
구2개↓담당 동네 2개 이하인 기사 비율 = "인접 2개까지" 원칙 준수율높을수록88~90%
평균구수기사당 평균 동네 수 (1.0 = 전원 한 동네)낮을수록~1.5
담당폭기사 배송지 중 가장 먼 두 곳 거리(직선)낮을수록도심 중앙 6km대
최대폭그날 최악 기사의 담당폭 = 원정 감지기낮을수록도심 11km(수기 90%)
미배배정 못 한 오더 수 = 부담낮을수록낮을수록

앞 4개 = "군집 세게" · 마지막 1개 = "미배 적게". 4개가 오르고 미배가 안 늘면 성공, 미배가 늘면 그 수가 응집의 가격표다.

③ 뭐가 문제였고, 어떻게 고쳤나 — 개편 4가지

1. 동네 수 > 기사 수 → 사전병합

문제: 어떤 날은 동네가 35개인데 기사는 23명. 옛 엔진은 큰 동네 23개만 기사에게 주고 남은 12개 동네를 "가장 가까운 기사"에게 조건 없이 얹었다. 그래서 한 기사가 동네 6개를 22km 돌아다니는 배차(정승모 사례)가 나왔다.

처리: 배정하기 전에 작은 동네들을 이웃 동네와 합쳐 묶음 수를 기사 수에 맞춘다. 합칠 때 3가지를 다 만족해야 한다 — ①합쳐서 동네 2개 이하 ②경계가 실제로 붙은 동네만(행정경계 지도 기반, 동네 건너뛰기 금지) ③합친 폭이 도로 기준 한도 안.

효과: Y3027 묶음 35→23=기사 수. 정승모 22.4km 6동네 → 4.5km 한 동네권.

2. 동네 이름 도시 충돌 → 주소 정규화

문제: "대구 중구" 주소가 서울 중구와 같은 동네로 취급되고 있었다(중구·서구·강서구는 전국에 여럿). 실측으로 '중구' 좌표 범위가 348km — 군집·도심 판정이 통째로 오염.

처리: 동네 이름에 항상 시/도를 붙인다("서울 중구"/"대구 중구", 군은 "경기 가평군"). 행정경계 폴리곤 마스터(265구)도 이 이름 체계로 통일.

효과: 100km 넘게 퍼진 동네 0개. 재발 금지 항목.

3. 직선 거리의 함정 → 도로거리 판정

문제: 서초와 과천은 직선으론 1km인데 실제론 우면산을 돌아 27km. 직선으로 재면 이런 조합을 "가깝다"고 착각해 묶을 수 있다.

처리: 묶음의 폭을 잴 때 OSRM(트럭) 도로거리로 잰다. 한도는 수기 배차 실측 퍼센타일(도심 15km/외곽 33km). OSRM이 죽으면 자동으로 직선으로 돌아간다.

효과: 사용자 확정 정답 4/4 재현 — 강남+서초 묶임(도로 14.0km) · 서초+과천 거부(27.1) · 처인+수지 거부(40.3) · 성북+강북 묶임(8.1).

4. 후처리가 군집을 도로 깨뜨림 → 통일 게이트

문제: 배차가 끝난 뒤 미배를 줄이는 후처리(회수·재배치 등)가 미배 1건 살리자고 기사에게 먼 동네를 얹었다. 최악 사례: 미배 1건에 동네 2개 이하 기사 비율 100→60%.

처리: 모든 후처리가 같은 자를 넘지 못하게 게이트를 달았다 — 동네 ≤ 2+1개, 담당폭 ≤ 기준선+3km. 허용폭은 스위치로 조절 가능(더 조이거나 풀 수 있음).

효과: 그 최악 사례 100% 유지. 부수효과 — 기준선 밖 "헛회수"(어차피 시간검증에서 다시 탈락하던 것)가 차단되며 어떤 날은 미배 11→2.

④ 개편 전후 — 27건 비교 (권역별)

권역일수구2개↓평균구수담당폭최대폭미배
Y1 (강남권)1593→97%1.38→1.328.1→7.6k22.6→20.0k11.9→12.7
Y2 (수원권)974→91%1.84→1.527.5→7.1k21.2→20.0k18.2→21.0
Y3 (서북부)287→89%1.67→1.746.1→5.7k16.1→11.2k10.0→10.0
Y5 (송파·분당)175→87%2.00→1.629.5→8.0k17.0→16.6k20.0→19.0

미배를 시기로 갈라 보면: 7월(현행 수급) Y1 10일 합계 49→46건 (개선). 5월(물량 폭주기)에만 +7~14건 증가한 날이 있는데, 그 날들은 옛 엔진이 기사당 동네 2.1~2.6개를 우겨넣어 미배를 눌렀던 날이다 — 새 엔진은 그 배정을 거부하고 정직하게 미배로 남긴다. 그 미배가 아까우면 그날만 게이트 스위치를 풀면 된다.

한계: Y2는 5월 데이터뿐(수급 딴판 시기), Y3 2일·Y5 1일 — 표본 부족. 확정엔 7월 로그 보강 필요.

⑤ 신선 실측 (현행 기본값, 6일) — 기사 레벨까지

날짜미배유휴설치비CV구2개↓담당폭 평균최대폭
07/093168100%10.6k29.4k
07/106067100%5.0k11.3k
07/11504692%9.3k23.8k
07/132051100%7.4k22.2k
07/144058100%5.6k21.7k
07/156172100%6.5k21.1k

07-11 기사별 (설치비 많은 순 · 빨간 줄 = 폭 13km 초과 또는 3동네)

기사건수설치비담당폭담당 동네(건수)
김창희8345k21.7km용인시 처인구8
임재환12311k19.8km평택시12
이동한13277k9.2km강남구6+동작구4+서초구3
이윤구7236k5.1km강남구7
권선일5235k6.3km강남구5
전영균13217k6.3km오산시13
최선근5211k3.2km의왕시5
오병근5203k5.6km광주시5
전남섭6167k8.6km용인시 수지구5+용인시 기흥구1
서정우7145k12.2km용인시 기흥구5+용인시 수지구2
함형만4125k4.1km안양시 만안구4
최경훈4109k23.8km이천시4
박과진450k2.1km안양시 동안구4
박진목338k2.4km군포시3

⑥ 스위치(노브) — 조절·복귀 방법

스위치기본뭘 하나
cluster_premergeON사전병합 (동네수=기사수 맞추기)
cluster_road_metricON폭 판정을 도로거리로 (끄면 직선)
cluster_cohesion_gateON후처리 통일 게이트
cluster_cohesion_gus_slack1게이트 동네 허용폭 (0=2개 엄수)
cluster_cohesion_slack_km3.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 실측 유래
신설구 미반영인천 검단·화성 동탄/병점/만세/효행 — 모구 폴리곤으로 흡수 처리 중
데이터: 신선 실측 = scratchpad report_data.json (12런) · 개편 전후 = E2E 54런 · 진단 56런 · 스윕 48런. 상세 문서: docs/HGLIS_군집개편_검증보고_20260731.md · docs/HGLIS_군집배차_레이어_거리기준.md