# Experiment and Evaluation Plan

## 1. 목적

Phase 4의 실험 체계는 “좋은 결과 그림 만들기”가 아니라,
**전략이 어떤 조건에서 실제로 살아 있는지**를 검증하는 프레임입니다.

실험은 모두 manifest 기반으로 정의하고,
입력 snapshot / 코드 버전 / config hash / output artifact를 함께 기록해야 합니다.

## 2. 실험 종류

### 2.1 Baseline run

문서 점수 + 가격 확인만 사용한 기본 전략.
이 실험이 기준선입니다.

### 2.2 Ablation runs

최소 아래 5개를 지원합니다.

1. event only
2. event + price
3. event + price + regime
4. event + price + regime + attention
5. event + price + regime + attention + portfolio guardrails tuned

### 2.3 Split runs

다음 split을 지원합니다.

- year-by-year
- bull / bear / mixed regime
- sector group
- market cap bucket
- liquidity bucket
- score bucket
- event type bucket

### 2.4 Walk-forward runs

권장 기본값:
- train 24 months
- validate 6 months
- test next 6 months
- rolling or expanding window 선택 가능

주의: Phase 4에서는 모델 학습보다 **threshold calibration / parameter sweep** 수준이면 충분합니다.

### 2.5 Sensitivity runs

- slippage sensitivity
- stop priority sensitivity
- holding days sensitivity
- max positions sensitivity
- risk budget sensitivity

## 3. 필수 평가 지표

### 3.1 Trade-level metrics

- trade count
- hit rate
- average winner / average loser
- payoff ratio
- expectancy
- median holding days
- median MFE / MAE

### 3.2 Portfolio-level metrics

- cumulative return
- annualized return
- max drawdown
- Calmar-like ratio
- Sharpe-like ratio (daily)
- Sortino-like ratio
- profit factor
- turnover
- average exposure

### 3.3 Stability metrics

- monthly hit rate dispersion
- rolling 3-month expectancy
- drawdown duration
- performance by score decile
- performance by regime bucket

### 3.4 Practicality metrics

- skipped trades due to constraints
- average gap from signal close to entry open
- average slippage cost
- portfolio slot utilization
- sector concentration usage

## 4. 리포트 산출물

각 실험은 최소 아래 artifact를 생성해야 합니다.

- `metrics_summary.json`
- `trade_blotter.parquet`
- `daily_equity_curve.parquet`
- `position_timeline.parquet`
- `attribution_by_event_type.csv`
- `attribution_by_sector.csv`
- `score_bucket_report.csv`
- `run_notes.md`
- `plots/` 디렉터리

플롯 최소 요구사항:

- equity curve
- drawdown curve
- monthly returns heatmap
- return by score bucket
- return by holding period
- performance by regime

## 5. 실험 naming 규칙

권장 run_id 포맷:

```text
bt_{strategy_name}_{dataset_snapshot}_{yyyymmddhhmmss}_{short_hash}
```

예:
`bt_fgce_v1_snapshot_20260315_20260320_153000_a81c92`

## 6. 해석 기준

좋은 전략으로 보기 위한 최소 기준 예시:

- out-of-sample expectancy > 0
- max drawdown이 감내 가능한 수준
- score 상위 버킷일수록 성과가 우상향
- regime split에서 완전히 무너지지 않음
- 특정 한 이벤트 타입/한 해/한 섹터에만 의존하지 않음

## 7. 금지사항

- 테스트 구간을 보고 threshold를 수동으로 계속 바꾸기
- 동일 기간을 train/validate/test로 동시에 사용하기
- delisted symbols 제거하기
- 나중에 보정된 문서 timestamp를 과거 실험에 반영하기
- 결과가 좋지 않은 실험을 silently discard 하기

## 8. 결과 리뷰 템플릿

각 실험 후 아래 질문에 답할 수 있어야 합니다.

1. 가장 큰 수익은 어떤 event type에서 나왔는가?
2. 손실은 특정 regime에 집중되었는가?
3. attention overlay가 실제로 도움이 되었는가?
4. 포트폴리오 제약 때문에 놓친 좋은 거래는 얼마나 되는가?
5. slippage와 stop 우선순위 가정이 결과를 얼마나 바꾸는가?
6. score가 높을수록 실제 성과가 증가하는가?
7. 1D/3D/5D horizon 중 어디가 가장 안정적인가?
