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>
250 lines
5.5 KiB
Markdown
250 lines
5.5 KiB
Markdown
# 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 <data_file> --metric oos
|
||
```
|
||
|
||
---
|
||
|
||
**Report Status:** [DRAFT] / [FINAL]
|
||
**Version:** 1.0
|
||
**Last Updated:** [날짜]
|