물류/배송 데이터 분석¶
산업 특성¶
물류는 시간과 공간의 제약을 극복하는 산업이다. 데이터 분석의 핵심은 수요를 예측하고 자원을 최적 배치하는 것.
주요 특성: - 실시간성이 생명 (배송 지연 = 고객 이탈) - 네트워크 효과 (허브 효율이 전체 비용 결정) - 라스트마일이 전체 비용의 50% 이상 - 계절성과 요일 효과가 강함 - 규모의 경제와 밀도의 경제 공존
데이터 환경:
+------------------+ +------------------+ +------------------+
| 주문 데이터 | | 운영 데이터 | | 외부 데이터 |
+------------------+ +------------------+ +------------------+
| - 주문 정보 | | - 차량 GPS | | - 날씨 |
| - 배송지 | | - 허브 처리량 | | - 교통 상황 |
| - 시간 요구 | | - 인력 배치 | | - 이벤트 정보 |
| - 상품 특성 | | - 재고 현황 | | - 유가 |
+------------------+ +------------------+ +------------------+
핵심 문제¶
1. 수요 예측¶
예측 대상과 활용:
| 예측 대상 | 시간 범위 | 활용 |
|---|---|---|
| 일별 물동량 | 7-30일 | 인력/차량 배치 |
| 권역별 물량 | 1-7일 | 허브간 배분 |
| 시간대별 물량 | 당일-익일 | 실시간 조정 |
| 지역별 배송 건수 | 당일 | 라우팅 최적화 |
예측 모델 구조:
+------------------------------------------------------------------+
| 수요 예측 파이프라인 |
+------------------------------------------------------------------+
| |
| [과거 데이터] [외부 변수] [이벤트 변수] |
| | | | |
| v v v |
| +----------+ +----------+ +----------+ |
| | 시계열 | | 날씨 | | 프로모션 | |
| | 패턴 | | 공휴일 | | 세일 | |
| +----------+ +----------+ +----------+ |
| | | | |
| +-------+--------+--------+-------+ |
| | |
| v |
| +----------------+ |
| | 예측 모델 | |
| | (LightGBM, | |
| | Prophet, | |
| | LSTM) | |
| +----------------+ |
| | |
| v |
| [일별/권역별 물동량 예측] |
+------------------------------------------------------------------+
계절성 분해:
물류 수요 패턴:
연간:
1월 ████████ (설 직전 급증)
2월 ██ (설 연휴 감소)
...
11월 ██████████████ (블프/11.11)
12월 ████████████████ (연말)
주간:
월 ██████████████ (주말 주문 처리)
화 ████████████
수 ████████████
목 ████████████
금 ██████████████ (주말 전 주문)
토 ████████
일 ██████
시간대별:
09-12시 ████████████████ (오전 집중)
12-15시 ████████████
15-18시 ██████████
18-21시 ████████████████ (저녁 배송)
예측 정확도 관리:
-- 예측 vs 실제 비교 (권역별)
SELECT
region,
forecast_date,
predicted_volume,
actual_volume,
ABS(predicted_volume - actual_volume) / actual_volume as mape,
CASE
WHEN actual_volume > predicted_volume * 1.2 THEN 'Under-forecast'
WHEN actual_volume < predicted_volume * 0.8 THEN 'Over-forecast'
ELSE 'Accurate'
END as forecast_quality
FROM daily_forecast f
JOIN daily_actual a ON f.region = a.region AND f.forecast_date = a.actual_date
WHERE forecast_date >= DATE_SUB(CURRENT_DATE, INTERVAL 30 DAY);
-- 목표: MAPE < 10%, 과소예측 비율 < 5%
2. 경로 최적화¶
문제 유형:
TSP (Traveling Salesman Problem):
- 모든 지점을 한 번씩 방문하는 최단 경로
- 배송기사 1명의 최적 경로
VRP (Vehicle Routing Problem):
- 여러 차량으로 모든 지점 커버
- 차량 용량, 시간 제약 고려
VRPTW (VRP with Time Windows):
- 배송 시간대 제약 추가
- "오후 2-6시 배송 희망" 반영
최적화 목표:
휴리스틱 접근:
1. Nearest Neighbor (최근접 이웃)
현재 위치에서 가장 가까운 미방문 지점 선택
간단하지만 최적과 거리 있음
2. Savings Algorithm (절약법)
두 경로를 합쳤을 때 절약되는 거리 계산
절약이 큰 것부터 병합
3. Local Search (지역 탐색)
2-opt: 두 경로를 교차 교환
3-opt: 세 경로 교환
기존 해 개선에 효과적
4. Metaheuristics
Genetic Algorithm
Simulated Annealing
Ant Colony Optimization
실무 적용:
# Google OR-Tools 활용 예시
from ortools.constraint_solver import routing_enums_pb2
from ortools.constraint_solver import pywrapcp
def create_routing_model(distance_matrix, demands, vehicle_capacities):
manager = pywrapcp.RoutingIndexManager(
len(distance_matrix),
len(vehicle_capacities),
0 # depot index
)
routing = pywrapcp.RoutingModel(manager)
# 거리 콜백 등록
def distance_callback(from_index, to_index):
from_node = manager.IndexToNode(from_index)
to_node = manager.IndexToNode(to_index)
return distance_matrix[from_node][to_node]
transit_callback_index = routing.RegisterTransitCallback(distance_callback)
routing.SetArcCostEvaluatorOfAllVehicles(transit_callback_index)
# 용량 제약 추가
# ...
return routing, manager
3. 라스트마일 분석¶
라스트마일의 중요성:
전체 물류 비용 구조:
First Mile (수거) : ████ 15%
Line Haul (간선) : ████████ 30%
Hub Operation (허브) : ██ 5%
Last Mile (배송) : ██████████████████████ 50%
라스트마일이 비싼 이유:
- 낮은 밀도 (건당 이동거리 큼)
- 높은 변동성 (재배송, 부재)
- 인력 의존도 높음
라스트마일 KPI:
| 지표 | 정의 | 목표 |
|---|---|---|
| 배송 완료율 | 첫 시도 완료/전체 | 95% 이상 |
| 건당 비용 | 총비용/배송건수 | 지역별 상이 |
| 건당 시간 | 총시간/배송건수 | 5분 이내 |
| 기사당 생산성 | 완료건수/기사수 | 80건/일 |
배송 실패 분석:
-- 배송 실패 원인 분석
SELECT
failure_reason,
COUNT(*) as count,
COUNT(*) * 100.0 / SUM(COUNT(*)) OVER() as pct,
AVG(retry_count) as avg_retry,
AVG(extra_cost) as avg_extra_cost
FROM delivery_failures
WHERE delivery_date >= DATE_SUB(CURRENT_DATE, INTERVAL 30 DAY)
GROUP BY failure_reason
ORDER BY count DESC;
-- 결과 예시:
-- 부재중 : 45% (재배송 비용 발생)
-- 주소 오류 : 25% (확인 시간 소요)
-- 연락 불가 : 15% (재시도 필요)
-- 접근 불가 : 10% (건물 출입 제한)
-- 기타 : 5%
밀도 효과 분석:
배송 밀도 vs 건당 비용:
건당
비용
|
|*
| *
| *
| *
| **
| ***
| *****
| ********
+--------------------------------->
권역 내 배송 밀도 (건/km²)
핵심 인사이트:
- 밀도 2배 → 비용 30% 감소
- 임계 밀도 이하에서는 수익 불가
- 밀도 높이기: 배송일 조정, 픽업 유도, 권역 재설계
4. 실시간 데이터 활용¶
실시간 모니터링 대상:
+------------------------------------------------------------------+
| 실시간 대시보드 |
+------------------------------------------------------------------+
| 차량 현황 | 허브 현황 | 배송 현황 |
| - 위치 (GPS) | - 처리량/용량 | - 완료/미완료 |
| - 상태 (이동/정차) | - 병목 구간 | - 예상 완료 시각 |
| - 적재량 | - 인력 배치 | - 지연 건수 |
+------------------------------------------------------------------+
| 이상 징후 알람 |
| - 차량 30분 이상 정차 |
| - 허브 처리량 급감 |
| - 특정 권역 지연율 급증 |
+------------------------------------------------------------------+
동적 라우팅:
정적 라우팅:
아침에 경로 확정 → 하루 종일 동일 경로
동적 라우팅:
실시간으로 경로 재계산
[초기 경로] → [교통 정체 발생] → [경로 재계산] → [신규 주문] → [경로 재계산]
| | | | |
09:00 10:30 10:31 11:00 11:01
동적 라우팅 트리거:
- 교통 상황 변화 (네비게이션 API)
- 신규 주문 추가 (즉시 배송)
- 배송 실패 (재배송 삽입)
- 기사 요청 (휴식, 긴급)
예측적 자원 배치:
수요 예측 → 선제적 자원 배치
예시: 폭염 예보
- 음료/아이스크림 수요 급증 예측
- 냉장 차량 사전 배치
- 해당 권역 인력 증원
예시: 대규모 프로모션
- D-7: 물량 예측 공유
- D-3: 임시 인력 확보
- D-1: 허브 사전 분류
- D-day: 실시간 모니터링 강화
분석 접근¶
물류 분석의 특수성¶
1. 공간-시간 동시 고려:
2. 네트워크 관점:
개별 최적화의 함정:
- A권역 최적화 → B권역에 영향
- 오전 최적화 → 오후에 병목
전체 최적화 필요:
+--------+ +--------+ +--------+
| 수거 | --> | 허브 | --> | 배송 |
+--------+ +--------+ +--------+
^ ^ ^
| | |
제약 용량 시간
각 단계가 연결된 시스템으로 분석
3. 변동성 관리:
예측 오차는 불가피 → 버퍼 설계가 핵심
버퍼 유형:
- 시간 버퍼: 여유 시간 확보
- 용량 버퍼: 예비 차량/인력
- 재고 버퍼: 안전 재고
버퍼 비용 vs 서비스 수준 트레이드오프
비즈니스 액션¶
분석-운영 연결¶
| 분석 결과 | 의사결정 | 담당 | 타이밍 |
|---|---|---|---|
| 물량 예측 상향 | 인력/차량 추가 | 운영팀 | D-3 |
| 특정 권역 지연 증가 | 권역 재설계 | 기획팀 | 월간 |
| 라우팅 효율 저하 | 알고리즘 개선 | 개발팀 | 분기 |
| 배송 실패 원인 | 프로세스 개선 | 운영팀 | 주간 |
비용-서비스 트레이드오프¶
서비스 수준
|
100%| *
| *
95%| *
| *
90%| *
| *
85%|*
+-------------------------> 비용
핵심 의사결정:
- 당일 배송 vs 익일 배송 비용 차이
- 시간대 지정 서비스의 추가 비용
- 무료 배송 기준 금액
실무 사례¶
사례 1: 권역 재설계¶
상황: 수도권 배송 권역 10개, 권역간 효율 편차 큼
분석:
권역별 현황:
+--------+----------+----------+----------+
| 권역 | 일 물량 | 건당비용 | 완료시간 |
+--------+----------+----------+----------+
| A (강남)| 500건 | 2,500원 | 17:30 |
| B (강북)| 300건 | 3,200원 | 18:30 |
| C (경기)| 200건 | 4,500원 | 19:30 |
| ... | | | |
+--------+----------+----------+----------+
문제 발견:
- 권역 경계가 행정구역 기준 (배송 효율 무시)
- 경계 부근 물량이 비효율적으로 배분
- 밀도 편차가 3배 이상
해결:
클러스터링 기반 권역 재설계:
1. 배송지 좌표 + 물량 데이터 수집
2. K-means 클러스터링 (거리 + 물량 가중치)
3. 운영 제약 반영 (기사 담당 범위)
4. 시뮬레이션으로 효과 검증
결과:
- 권역 10개 → 12개 (세분화)
- 평균 건당비용: 3,100원 → 2,700원 (-13%)
- 평균 완료시간: 18:30 → 17:45 (-45분)
사례 2: 수요 예측 고도화¶
상황: 예측 오차로 인력 과부족 반복
기존 문제:
예측 방식: 전년 동기 대비 +10% 일괄 적용
실제 결과:
- MAPE: 25%
- 과소예측 빈도: 30% (인력 부족 → 지연)
- 과대예측 빈도: 25% (인력 과잉 → 비용 증가)
개선:
ML 기반 예측 모델:
Features:
- 과거 물량 (lag 1, 7, 14, 28일)
- 요일/공휴일
- 날씨 (기온, 강수)
- 프로모션 캘린더
- 쇼핑몰 이벤트 (크롤링)
모델: LightGBM + 권역별 보정
결과:
개선 후:
- MAPE: 25% → 12%
- 과소예측: 30% → 8%
- 과대예측: 25% → 15%
비용 효과:
- 긴급 인력 호출 비용: -40%
- 배송 지연 패널티: -50%
- 전체 인건비: -8%
핵심 지표 정리¶
| 영역 | 지표 | 계산/설명 | 목표 |
|---|---|---|---|
| 예측 | MAPE | 예측오차율 | 10% 이하 |
| 예측 | Bias | 과소/과대 경향 | 0에 가깝게 |
| 효율 | 건당 비용 | 총비용/배송건 | 권역별 관리 |
| 효율 | 차량 적재율 | 적재량/용량 | 80% 이상 |
| 서비스 | 정시 배송률 | 시간내 완료/전체 | 95% 이상 |
| 서비스 | 첫 배송 완료율 | 1회 완료/전체 | 90% 이상 |
| 운영 | 기사 생산성 | 완료건/기사 | 80건/일 |
| 운영 | 허브 처리량 | 시간당 처리건 | 용량 대비 관리 |