Files
kjh2064 8f1ff34cc9 Phase 2 준비 완료: 검증 스크립트 재작성 & 자동화 도구
- 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>
2026-08-11 20:23:05 +09:00

5.5 KiB
Raw Permalink Blame History

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]

조건 (해당 시):

  • 모델 재검증 (추가 기간)
  • 파라미터 조정
  • 월별 모니터링 강화

추가 조치사항

  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 쿼리

-- 누적 성과 비교
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: [날짜]