RT-O4: EDD 약속 엔진

🎯 EDD 약속 엔진이란?Estimated Date of Delivery + confidence

단순 평균 lead time이 아니라 ML 모델 기반 예측 + confidence를 함께 반환하여 고객에게 실현 가능한 약속을 제공한다. EDD는 처리시간(processing)운송시간(transit) 두 모델로 분리(앙상블)하고, 외부 시그널(날씨·교통·운송사 OTIF 실적)을 통합한다.

confidence가 임계값(0.85) 미만이면 자동으로 buffer +k시간을 더해 약속을 보수적으로 산출하거나, 신규 운송사처럼 실적이 부족한 경우 약속 자체를 보류한다. 3월 운영 결과 EDD 정확도 96.2%, confidence ≥ 0.85 비율 91%, 약속 위반 시 24시간 전 사전 알림 도달률 98%로 RT-O3 단순 lead-time 평균 대비 큰 폭으로 개선되었다.

🧭 EDD 산출 5단계 파이프라인5 stages · feature → promise
STEP 1
feature_collect

거점 큐 깊이, 주문 item_count, 시간/요일, 운송사 service_type, weather_score, traffic_score 수집.

STEP 2
processing_model

Gradient Boosted Tree · 입력 4개(queue, items, hour, dow) → 출력 processing_hr (hours).

STEP 3
eta_model

Transformer + 도로 그래프 임베딩 · 출발/도착 좌표 + 운송사 + 날씨/교통 → transit_hr (hours).

STEP 4
confidence_calc

두 모델의 분산(σ) + carrier OTIF 실적을 베이지안 결합 → 0~1 범위 confidence 출력.

STEP 5
edd_promise

confidence < 0.85 시 buffer +k시간 추가, 알림 정책 적용 후 고객에게 EDD + 신뢰도 반환.

🐍 EDD 계산 모델 (Python)
def calculate_edd(order, node, carrier):
    # 처리 시간 예측 (ML 모델)
    processing_hr = processing_model.predict([
        node.queue_depth, order.item_count,
        hour_of_day, day_of_week
    ])
    # 운송 시간 예측 (ETA 모델)
    transit_hr = eta_model.predict([
        node.lat, node.lng, order.dest_lat, order.dest_lng,
        carrier.service_type, weather_score, traffic_score
    ])
    total_hr   = processing_hr + transit_hr
    edd        = datetime.now() + timedelta(hours=total_hr)
    confidence = calc_confidence(processing_hr, transit_hr)
    return edd, confidence   # EDD + 신뢰도 반환

처리/운송 모델을 분리한 이유는 두 영역의 입력 분포·노이즈 특성이 전혀 다르기 때문이다. 처리 시간은 거점 내부 큐 다이내믹스가 지배하고, 운송 시간은 외부 도로/날씨가 지배한다. 단일 모델 로 합치면 한 쪽 노이즈가 다른 쪽 정확도를 갉아먹는다.

➗ EDD 정의 & confidence 분해앙상블 분산 + carrier OTIF 베이지안 결합
EDD = now + processing_hr + transit_hr
confidence = sigmoid( −α·σ_processing − β·σ_transit + γ·carrier_otif )
# σ가 작을수록(예측 분산 ↓) confidence ↑, carrier OTIF 실적이 높을수록 ↑
proc 0.4processing_hr · 거점 내부 큐 + item count + 시간대로 결정. 평균 가중 영향도 0.4
transit 0.4transit_hr · 거리 + 운송사 service_type + 도로 그래프 기반 ETA. 평균 가중 영향도 0.4
wx/traffic 0.15weather_score, traffic_score · 외부 시그널이 transit 분산을 키워 confidence를 흔드는 비중 0.15
carrier 0.05carrier_otif · 최근 운송사 OTIF 실적이 베이지안 prior로 들어감. 신규 운송사일수록 confidence ↓

예) 평일 낮 표준 운송사 + 맑은 날씨 + 도로 원활: σ_proc=0.3h, σ_transit=0.5h, OTIF=0.96 → confidence 0.93. 우천 + 출퇴근 시간대로 바뀌면 σ_transit이 1.4h로 커져 confidence 0.74까지 떨어지고 buffer +1h를 자동 추가한다.

📐 EDD 모델 비교Baseline → GBT → Transformer + 그래프
모델입력출력MAE인퍼런스
processing GBTqueue + items + hour + dowhours0.42h4ms
eta_model_v1 (LR)lat/lng + servicehours1.18h1ms
eta_model_v2 (Transformer + 그래프)lat/lng + service + wx + traffichours0.61h22ms
confidence Bayesσ + OTIF0~1<1ms

eta_model_v1(선형 회귀)은 빠르지만 MAE 1.18h로 도시 내·외곽 · 기상 영향을 분리하지 못했다. v2 Transformer + 도로 그래프 임베딩으로 MAE를 0.61h까지 줄였고, 인퍼런스가 22ms로 늘었지만 전체 EDD 응답 SLA(200ms) 안에서 충분히 흡수된다.

참고문헌
[1] 김지훈, "EDD 약속 엔진 ML 모델 통합 보고서", IntraLogis 사내 보고서, 2026.03
[2] Han, S. et al. "Demand-Aware Logistics ETA Prediction", KDD, 2023
[3] Hochreiter, S., Schmidhuber, J. "Long Short-Term Memory", Neural Computation, 1997
[4] Battaglia, P. et al. "Relational inductive biases, deep learning, and graph networks", arXiv:1806.01261, 2018
[5] Naver / 카카오, 모빌리티 ETA 기술 블로그, 2024
[6] 한국교통연구원, 도로 상태 및 정체 데이터셋, 2024
[7] 기상청(KMA), 기상 예보 OpenAPI Specification, 2024