# OOS 검증 리포트: Out-of-Sample Performance Drift **Team:** Model Generalization Analysis **Date:** [실행 날짜] **Period:** Phase 1 Shadow Run Data (252+ trading days) --- ## 📊 Executive Summary ### Metric: Out-of-Sample Performance Drift - **공식:** Drift = |OOS_Return - IS_Return| / IS_Return × 100 - **목표 범위:** < 2.5% - **해석:** OOS가 IS와 얼마나 다른지 (낮을수록 모델 안정성 우수) ### Result Status ``` OOS Drift: _____% (normalized) Expected: < 2.5% Status: [✅ PASS] / [❌ FAIL] Confidence: _____% (95%+) ``` --- ## 📈 Methodology ### 데이터 소스 - **In-Sample (IS):** 모델 개발/검증 데이터 - **Out-of-Sample (OOS):** 미래/독립 거래 데이터 - **기간:** Phase 1 전체 (252+ trading days) ### 계산 과정 **1단계: 누적 성과 계산** ```sql -- IS 누적 성과 IS_Cumulative = ∏(1 + IS_return) - 1 -- OOS 누적 성과 OOS_Cumulative = ∏(1 + OOS_return) - 1 ``` **2단계: 드리프트 산출** ``` Drift = |OOS_Cumulative - IS_Cumulative| / IS_Cumulative × 100 ``` **3단계: 일일 드리프트** ``` Daily_Drift[i] = (OOS_Perf[i] - IS_Perf[i]) / IS_Perf[i] × 100 ``` ### 검증 방법 - [x] 누적 수익 비교 - [x] 일일 드리프트 추이 - [x] 최악 드리프트 지점 - [x] 변동성 분석 --- ## 📊 Results ### 핵심 지표 | 메트릭 | IS | OOS | 드리프트 | 평가 | |--------|-----|-----|---------|------| | 누적 수익률 | _____% | _____% | _____% | [✅]/[❌] | | 평균 일일 | _____% | _____% | _____% | [✅]/[❌] | | 최악 일일 | _____% | _____% | _____% | [✅]/[❌] | | 최고 일일 | _____% | _____% | _____% | [✅]/[❌] | ### 드리프트 분석 ``` 기간별 드리프트 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 초기 30일 : _____ % 중간 30일 : _____ % 최근 30일 : _____ % 추세: [안정/악화/개선] ``` ### 일일 드리프트 통계 | 통계량 | 값 | 평가 | |--------|-----|------| | 평균 드리프트 | _____% | 목표 < 2.5% | | 최대 드리프트 | _____% | 극단값 확인 | | 최소 드리프트 | _____% | 음수 방향 | | 표준편차 | _____% | 안정성 | --- ## 🎯 Validation & Decision ### Go/No-Go 기준 ``` Drift < 2.5% ? YES ✅ → PASS (모델 일반화 능력 확인) NO ❌ → FAIL (과적합 또는 데이터 문제) ``` ### 추가 기준 (선택) - [ ] 최대 드리프트 < 5% - [ ] 연속 음수 드리프트 < 10일 - [ ] 월별 일관성 > 80% ### VERDICT **OOS Drift Status:** [✅ PASS] / [❌ FAIL] **근거:** - 드리프트 값: _____% (< 2.5% 임계) - 월별 추이: [안정/악화/개선] - 신뢰도: _____% (높음/중간/낮음) --- ## 🔍 Performance Degradation Analysis ### 드리프트 원인 분석 **양수 드리프트 (OOS < IS):** - [ ] 모델이 과적합됨 - [ ] IS 데이터의 이상 패턴 - [ ] 시장 체제 변화 **음수 드리프트 (OOS > IS):** - [ ] 모델의 보수적 추정 - [ ] IS 기간 시장 약세 - [ ] OOS 기간 시장 강세 ### 시장 영향 평가 | 요인 | 영향도 | 설명 | |------|--------|------| | 변동성 | 낮음/중간/높음 | VIX 등 시장 변동성 | | 추세 | 낮음/중간/높음 | 상승/하락 추세 | | 심각성 | 낮음/중간/높음 | 이상 현상 유무 | --- ## 🔍 Risk Factors & Mitigation ### 식별된 위험 | 위험 | 확률 | 영향 | 대응 | |------|------|------|-----| | 과적합 | 중간 | 높음 | 모델 재검토 | | 시장 변화 | 중간 | 중간 | 재학습 필요 | | 데이터 품질 | 낮음 | 높음 | 검증 강화 | ### 신뢰도 제약 - 표본 크기: _____ 일 (최소 252) - 신뢰 구간: _____ ~ _____% - 평가 기간 충분성: [✅]/[⚠️] --- ## 📋 Recommendation ### Phase 3 진행 가능 여부 **Status:** [GO] / [NO-GO] / [CONDITIONAL] **조건** (해당 시): - [ ] 모델 재검증 (추가 기간) - [ ] 파라미터 조정 - [ ] 월별 모니터링 강화 ### 추가 조치사항 1. **모니터링:** - 일일 드리프트 추이 - 누적 성과 비교 - 시장 상황 연동 분석 2. **재검증:** - 월말 드리프트 재산출 - 분기별 모델 평가 - 연간 일반화 능력 검증 3. **개선:** - 파라미터 미세조정 - 앙상블 모델 검토 - 데이터 전처리 개선 --- ## ✅ Approval **Team Lead:** _________________ **Date:** ___________ **Signature:** _________________ **CTO Review:** [ ] Approved [ ] Conditional [ ] Rejected **CFO Review:** [ ] Approved [ ] Conditional [ ] Rejected --- ## 📎 Appendix ### A. 상세 계산식 ``` 누적 수익 = ∏(1 + daily_return) - 1 (로그 반환 사용: exp(Σ ln(1 + return)) - 1) 일일 드리프트 = (OOS[i] - IS[i]) / IS[i] × 100 정규화 드리프트 = mean(daily_drift) / std(IS_return) × 100 ``` ### B. SQL 쿼리 ```sql -- 누적 성과 비교 SELECT SUM(LOG(1 + is_return)) as is_cumulative_log, SUM(LOG(1 + oos_return)) as oos_cumulative_log, EXP(SUM(LOG(1 + oos_return))) - EXP(SUM(LOG(1 + is_return))) / EXP(SUM(LOG(1 + is_return))) * 100 as drift_pct FROM phase_1_metrics WHERE published_at <= @cutoff; -- 일일 드리프트 SELECT trading_date, (oos_cumulative - is_cumulative) / is_cumulative * 100 as daily_drift FROM phase_1_metrics WHERE published_at <= @cutoff ORDER BY trading_date; ``` ### C. Python 검증 ```python python phase2_verification_scripts.py --metric oos ``` --- **Report Status:** [DRAFT] / [FINAL] **Version:** 1.0 **Last Updated:** [날짜]