리스크 엔진¶
개요¶
규칙 기반 결정론적 엔진 (v1.0.0)으로 반입 작업의 cut-off 충족 리스크를 계산합니다.
graph LR
A[출발 지역] --> B[도로 이동 시간]
B --> C[터미널 대기]
C --> D[게이트 보정]
D --> E[안전 버퍼]
E --> F[총 소요시간]
F --> G{여유시간 계산}
G --> H[리스크 점수]
G --> I[정시 확률]
G --> J[최늦 출발]
계산 흐름¶
총 소요시간 = 도로_이동 + 터미널_대기 + 게이트_보정 + 안전_버퍼
여유시간 = cut_off_시간 - 현재시간 - 총_소요시간
여유시간 → 리스크 점수 (매핑 테이블)
여유시간 → 정시 도착 확률 (매핑 테이블)
리스크 점수 → 리스크 등급 (낮음 / 보통 / 높음)
최늦 안전 출발 시각 = cut_off_시간 - 총_소요시간
구성 요소¶
1. 도로 이동 시간¶
출발 지역별 기본 소요시간 + 교통 데이터 기반 보정:
| 지역 | 기본 (분) |
|---|---|
| 송도 (SONGDO) | 25 |
| 남동 (NAMDONG) | 35 |
| 서구 (SEOGU) | 20 |
| 연수 (YEONSU) | 30 |
| 부평 (BUPYEONG) | 40 |
| 시흥 (SIHEUNG) | 45 |
| 안산 (ANSAN) | 55 |
교통 데이터가 있으면 속도 기반 배율 적용:
속도 ≥ 50 kph→ ×1.0속도 30-49 kph→ ×1.5속도 < 30 kph→ ×2.5
2. 터미널 대기 시간¶
터미널 혼잡도 기반:
| 상태 | 대기 시간 (분) |
|---|---|
| 원활 (smooth) | 10 |
| 보통 (normal) | 15 |
| 혼잡 (congested) | 30 |
| 심각 (severe) | 45 |
congestion_time_minutes가 있으면 직접 사용.
3. 게이트 보정¶
게이트 대기 차량 수 기반:
| 차량 수 | 추가 시간 (분) |
|---|---|
| 0-9대 | 0 |
| 10-29대 | 5 |
| 30-49대 | 15 |
| 50대 이상 | 25 |
4. 안전 버퍼¶
보수적 모드
보수적 모드를 켜면 기본 버퍼보다 더 큰 안전 여유를 적용해 cut-off 미스 가능성을 낮춥니다. 실시간 데이터 변동성이 크거나 선적 우선순위가 높은 작업에서 유용합니다.
데이터 신선도
교통·터미널 데이터가 오래되면 현재 상황을 과소평가할 수 있어 추가 페널티를 반영합니다. 오래된 관측값은 낮은 리스크를 보여도 실제 운행에서는 더 보수적으로 해석해야 합니다.
| 조건 | 버퍼 (분) |
|---|---|
| 기본 | 15 |
| 보수적 모드 | 35 |
| 오래된 데이터 페널티 | +10 |
| 수동 설정 | 사용자 입력값 |
여유시간 → 리스크 매핑¶
| 여유시간 (분) | 리스크 점수 | 정시 확률 |
|---|---|---|
| ≥ 90 | 5 (낮음) | 0.97 |
| 60-89 | 20 (낮음) | 0.90 |
| 30-59 | 45 (보통) | 0.72 |
| 15-29 | 65 (보통) | 0.50 |
| 0-14 | 82 (높음) | 0.28 |
| < 0 | 98 (높음) | 0.05 |
리스크 등급¶
| 점수 범위 | 등급 |
|---|---|
| 0-34 | 낮음 (LOW) |
| 35-69 | 보통 (MEDIUM) |
| 70-100 | 높음 (HIGH) |
원인 기여도 분석¶
4가지 요소(교통, 터미널 대기, 게이트, 버퍼)의 분 단위 기여도를 퍼센트로 환산하여 reason_items로 반환합니다. 기여도가 높은 순으로 정렬됩니다.