Files
kis_bot/.cursor/rules/optuna-mode-top10.mdc

59 lines
3.0 KiB
Plaintext
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
---
description: Optuna mode Top10 · mode_combo · 하단 표 해석 — band proximity vs 익절 consensus
alwaysApply: false
---
# Optuna mode Top10 · mode_combo · 하단 표 해석 (kis_bot)
## 역할 분리 (혼동 금지)
| 표 | 목적 | trial? | 익절 하나로 수렴? |
|----|------|--------|-------------------|
| 학습 Top10 | Optuna 목적함수(score) 상위 | O | X — score 최대가 익절 대표값 아님 |
| 사후합격 Top10 | WR/PF 등 사후 게이트 통과 | O | X |
| mode_combo | PnL 양수 pool 축별 **최빈(mode)** 조립 + 1회 백테 실측 | X (조립) | **축마다 최빈** — tp 예: pool 최빈 5.0% |
| mode Top10 | PnL 양수 pool **p25~p75 밴드 근접도** 상위 trial | O | **X** — 27축 평균 근접도; tp만 보면 2~7.5% 퍼져도 정상 |
| 안정 Top10 | 일평균PnL λ×일표준편차 | O | X |
## mode Top10 점수 (band_proximity_p25_p75)
1. pool = `OPTUNA_MODE_POOL` (기본 `positive` = total_pnl>0 전 trial)
2. pool 각 축 numeric → p25, p50, p75, IQR
3. trial 각 축: 밴드 안=1.0, 밖= `1 - dist/(IQR×OPTUNA_MODE_BAND_DECAY_IQR)` (기본 decay 1.5)
4. **근접% = 축 점수 평균** (`consensus_match_n/total`는 밴드 **안** 축 개수 — 근접%와 다름)
5. 정렬: 근접% ↓ → mean_band_err ↑ → PnL ↓
## 흔한 오해
- "mode Top10 1위 = 익절 대표" → **아님**. #1이 tp 밴드 밖(예 2.5% vs p25 4.5%)이어도 다른 25축이 밴드 안이면 98% 가능.
- "익절 균형이 깨졌다" → 버그 아님. **다축 중심성** 랭킹이지 tp 단일 consensus 아님.
- 익절 하나로 쓰려면 → **mode_combo** 또는 **사후합격 1위**, DB 적용은 사용자 confirm.
## 하단 표 데이터 소스
- 완료 잡: `logs/optuna_web_jobs/<job_id>.json` → `result_json` 경로의 **Optuna 결과 JSON**
- 동일 payload: MariaDB `optuna_study_result.payload_json`
- 웹 요약: `optuna_web_jobs._summarize_result_data()` → `job.result_summary`
- 구 JSON: `results_mode` 없으면 웹이 `build_results_mode_consensus_tier()` **즉시 재계산**
## 최종 선택 후보 (브리핑·적용)
| 우선순위 | 후보 | apply source | 비고 |
|---------|------|--------------|------|
| 1 | 사후합격 1위 | `gated` | WR/PF·min_trades 통과 — **DB 적용 1순위** |
| 2 | 안정 1위 | `stable` | 손실일·최악일 게이트 — 변동성 낮춤 |
| 3 | mode_combo | `mode` | 축별 최빈 조립 · trial 없음 · 2차 narrow 참고 |
| 4 | mode Top10 1위 | `consensus` | 밴드 전형 trial · **익절 대표 아님** |
## 수정 시 금지
- mode Top10을 "익절 최빈순"으로 바꾸지 말 것 (목적 다름) — 바꾸려면 별도 표/env/사용자 승인
- HTS SCAN 밴드로 mode 그리드 강제 금지
- mode Top10 ≠ mode_combo DB apply 경로 혼동 금지
## 코드 앵커
- `kis_trader/backtest/optuna_mode_combo.py` — pool, band, mode Top10, mode_combo
- `kis_trader/backtest/optuna_briefing.py` — `build_final_selection_briefing_lines`
- `kis_trader/backtest/optuna_web_jobs.py` — `_summarize_result_data`, 웹 표