고객에게 보이는 배달 시간은 배차·pickup·전달 세 단계로 나뉘고, 그 안에는 날씨·교통 같은 data 내재 변동과 신규 가게처럼 model이 학습하지 못한 지식 불확실성이 섞여 있다. 이 두 불확실성을 나눠 modeling하고 대규모 실시간 system으로 운영한 과정을 설명한다.
핵심 포인트- 전체 시간을 end-to-end로 예측하지 않고 불확실성이 다른 배차·pickup·전달 model로 분리해 원인을 추적하며, 장·중·단기 window와 H3 embedding·target encoding으로 공간 특수성을 수치화하고 각 단계의 1분 단위 확률 분포를 convolution해 UX용 구간과 지연 확률을 산출
- rider 수·promotion·정책 변화를 짧은 window에 반영하려 모든 service를 매일 학습하고, Spark·Flink·Redis·MLflow·Iceberg에 ONNX Runtime·FastAPI·Airflow를 조합, model을 image에 넣지 않고 runtime에 load해 training과 build/deploy pipeline을 분리
- 초기 계수 전달 방식의 한계를 넘어 탐색·주문을 같은 model set으로 serving하되, 음식은 준실시간 batch와 주문별 online API 병행, 마트는 online, data가 적은 스토어는 batch lookup으로 serving 방식을 다르게 설계
- Great Expectations 기반 data quality 검사, drift·metric·latency 관측, 실시간 feature의 Redis 반영, 침수·재난 대비 자동 시간 buffer, shadow test·simulation으로 사용자 영향 전 위험 확인
왜 읽나불확실성이 큰 예측을 대규모 실시간으로 서비스해야 하는 ML 엔지니어에게, 단계 분리 modeling부터 daily training·service별 serving·운영 안전장치까지의 end-to-end 설계 사례.