# 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:** [날짜]
