8f1ff34cc9
- Task 3: phase2_verification_scripts.py 테스트 (샘플 데이터) ✅ - Task 4: 5개 리포트 템플릿 작성 ✅ - Task 5: SQL 쿼리 검증 (실제 데이터) - 메트릭 데이터 미채움 확인 ✅ - Task 6: 자동화 도구 & Go/No-Go 기준 통합 ✅ 발견 사항: • Phase 1: 304개 행 생성 (9일 누적) • 문제: metrics_json 필드 모두 비어있음 (0%) • 영향: Phase 2 검증 불가능 (데이터 필요) • 상태: 2026-11-01 재검증 예정 AGENTS.md v16.0 준수: ✅ 정공법: 근본 원인 분석 (메트릭 미저장) ✅ 현장감: 실제 데이터 검증 ✅ 과유불급: 필요한 준비만 완료 ✅ 재현성: 모든 스크립트 버전 관리 Co-Authored-By: Claude Haiku 4.5 <noreply@anthropic.com>
5.5 KiB
5.5 KiB
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단계: 누적 성과 계산
-- 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
검증 방법
- 누적 수익 비교
- 일일 드리프트 추이
- 최악 드리프트 지점
- 변동성 분석
📊 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]
조건 (해당 시):
- 모델 재검증 (추가 기간)
- 파라미터 조정
- 월별 모니터링 강화
추가 조치사항
-
모니터링:
- 일일 드리프트 추이
- 누적 성과 비교
- 시장 상황 연동 분석
-
재검증:
- 월말 드리프트 재산출
- 분기별 모델 평가
- 연간 일반화 능력 검증
-
개선:
- 파라미터 미세조정
- 앙상블 모델 검토
- 데이터 전처리 개선
✅ 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 쿼리
-- 누적 성과 비교
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 phase2_verification_scripts.py <data_file> --metric oos
Report Status: [DRAFT] / [FINAL]
Version: 1.0
Last Updated: [날짜]