You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
161 lines
3.9 KiB
Markdown
161 lines
3.9 KiB
Markdown
# 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 중 어디가 가장 안정적인가?
|