
경마 AI 개발 기록 #27 배당마 필터의 황금비: 상호작용의 동시 분석을 통한 기대치의 극치
요약
경마 예측 AI 모델의 배당마 필터링 로직을 최적화하고, 모델 간 비선형적 상호작용을 분석하는 개발 기록입니다. Optuna를 활용한 파라미터 탐색 효율화와 시뮬레이션 과정에서 발견된 버그 및 비결정성 문제를 해결하는 과정을 다룹니다.
핵심 포인트
- 배당마 모델을 단순 스코어 가산 방식에서 컷오프 필터로 재정의
- Optuna를 이용한 탐색 변수 통합으로 최적화 효율 및 수렴 안정성 향상
- 시뮬레이션 엔진의 Silent Bug 및 LightGBM의 비결정성 문제 해결
- 실력 모델 가중치와 배당마 필터 간의 강력한 상호 의존성 확인
1. 개요
지난 회차에서는 인기마의 부진을 감지하는 **「범주 모델 (underperformance model)」**을 신설하여, 기대치가 낮은 '위험한 인기마'를 배제하는 방어적 필터링 전략을 확립했습니다.
이번 개발 목적은 지금까지 스코어 가산 방식으로 운용해 온 **「배당마 검지 모델 (anauma)」**을 순수한 **「필터 (컷오프)」**로 재정의하고, 그 진정한 효과를 측정하는 데 있습니다. 단순히 모델 단독의 최적화에 그치지 않고, 전 회차에서 도입한 범주 필터나 랭킹 모델의 가중치 사이에 존재하는 **「비선형적 상호작용 (non-linear interaction)」**을 동시에 분석함으로써, 특정 조건 하에서 최대의 투자 수익률 (ROI)을 창출하는 '황금비'를 특정하는 것에 도전합니다.
2. 구현 내용
이번 구현에서는 우선 구조적 결함의 해소와 변수 정리를 단행했습니다.
2-1. 필터링 로직의 적정화
배당마 모델의 출력을 기대치 계산 전 단계에서 후보마를 좁히는 '컷오프'로서 기능하게 합니다. 구체적으로는 배당마 예측 스코어(
2-2. 탐색 공간의 차원 축소
지금까지 「필터의 ON/OFF (범주형)」와 「제외율 (조건부 연속형)」의 2단계 구성이었던 탐색 변수를, anauma_filter_pct (
(0.0~0.5)라는 단일 연속 변수로 통합했습니다. 이를 통해 Optuna를 이용한 탐색 효율과 수렴의 안정성을 높였습니다.
2-3. 전략 파라미터의 설정 파일화
최적화된 여러 고정값을 일원 관리하기 위해 core/strategy_config.py를 신설했습니다. StrategyParam 데이터 클래스를 도입하여 다음과 같은 메타데이터를 보유하는 선언적 아키텍처로 쇄신했습니다.
is_fixed : 고정값인지 탐색 대상인지의 플래그
fixed_since : 고정된 실험 버전
note : 고정된 통계적 근거
3. 직면한 문제
구현 직후의 시뮬레이션에서 여러 심각한 '정확도의 거짓말'과 '구조적 모순'에 직면했습니다.
3-1. 테스트 예측에서의 사이런트 버그 (Silent Bug)
전 회차의 범주 필터와 마찬가지로, simulation_engine.py의 테스트 예측 생성 블록에서 best_strategy 값이 참조되지 않는 버그를 특정했습니다. 이로 인해 학습 단계에서는 필터가 작동하는 것처럼 보여도, 최종적인 테스트 예측 (ROI 산출)에는 전혀 반영되지 않는 '작동하는 것처럼 보이기만 하는 상태'가 발생하고 있었습니다.
3-2. 평가 지형의 극단적인 비결정성
동일 코드, 동일 시드(seed)로 실행해도 tune_strategy()의 수렴 결과가 매번 달라지는 현상을 확인했습니다. 이는 2단계 구조의 변수 정의가 LightGBM 학습에 포함된 미세한 비결정성을 Optuna의 평탄한 지형에서 증폭시켜, 최적해의 선택을 불안정하게 만들었기 때문이었습니다.
3-3. 기대치 전략의 패러독스
고정 조건에서의 분석에서는 유효해 보였던 anauma_filter_pct가 Optuna를 통한 동시 최적화에 포함하면 오히려 ROI를 악화시키는 모순이 발생했습니다. 이는 필터의 효과가 다른 파라미터와 밀접하게 관계되어 있음을 시사했습니다.
4. 해결 접근 방식
이러한 과제들에 대해 변수의 상호 의존성을 해명하기 위한 다차원적인 민감도 분석을 단행했습니다.
4-1. ranking_weight 의존성 해명
분석 결과, 배당마 필터의 효과는 실력 모델의 가중치 (ranking_weight)에 강하게 의존한다는 사실이 판명되었습니다.
rw=0.7 지형 (실력 중시): 배당마 필터를 적용할수록 ROI가 저하되는 역효과를 확인.
rw=0.3 지형 (복승권 내 진입 중시): 배당마 필터의 pct를 높일수록 ROI가 단조 증가하는 강력한 양의 상관관계를 확인.
4-2. 2차원 그리드에 의한 상호 간섭 분석
underperform_pct와 anauma_filter_pct의 2차원 그리드 분석을 실시한 결과, 중대한 사실을 발견했습니다. 전 회차에서 단독 최적화를 통해 확정했던 underperform_pct=0.15가 배당마 필터와 공존하는 환경에서는 0.08 부근으로 최적점이 이동한 것입니다. 이는 필터를 독립적으로 최적화하는 것의 위험성을 증명하는 결과가 되었습니다.
5. 최종적인 해결책
수차례의 그리드 서치 (Grid Search)와 재현성 검증을 거쳐, 다음과 같은 「황금비」를 최종 구성으로 확정했습니다.
5-1. 확정된 전략 파라미터 (Strategy Parameters)
다음 값들을 strategy_config.py에 고정값으로 등록하여 시스템의 기반 전략으로 삼았습니다.
- ranking_weight: 0.3
- anauma_filter_pct: 0.40
- underperform_filter_pct: 0.08
- ev_threshold: (수동 고정) 2.0
- top_n: (수동 고정) 3
5-2. 개선된 구체적인 수치 (2023~2026년 평균)
| 지표 | 도입 전 (Baseline) | 최종 해결책 | 판정 |
|---|---|---|---|
| 전체 ROI | 74.13% | 80.78 ~ 81.32% | ✅ 80% 초과 달성 |
| Cell37 ranking ROI | 75.28% | 81.56% | ✅ +6.28pt 향상 |
| underperform AUC | - | 0.7190 | ✅ 목표 0.65 달성 |
| 재현성 오차 | 3.0pt 이상 | 0.32pt | ✅ 1pt 이내 클리어 |
6. 배운 점
필터는 독립적으로 존재하지 않는다
본 실험의 가장 큰 교훈은 **「여러 필터를 단독으로 최적화해서는 안 된다」**는 것입니다. 범주마 (Underperform) 필터 단독의 최적값이 아나우마 (穴馬, 배당마) 필터 도입으로 인해 극적으로 변화했다는 사실은, 여러 개의 「컷오프 (Cut-off)」가 서로의 탐색 공간을 침식하는, 경마 예측 특유의 비선형적 상호 간섭을 상징합니다.
차원의 「군더더기」가 비결정성을 낳는다
「ON/OFF 플래그」라는 인간에게 이해하기 쉬운 형식이, 머신러닝 (Machine Learning)의 최적화 지형에서는 「평탄한 방황」이 되어 재현성을 현저히 해친다는 것을 통감했습니다. 변수를 1차원의 연속값으로 날카롭게 다듬는 「차원 축소 (Dimension Reduction)」야말로 견고한 시스템 구축의 철칙입니다.
2026년 데이터의 소표본 변동
2026년에만 ROI가 돌출(140151%)하는 현상은 모델의 과적합 (Overfitting)이 아니라, 연초부터의 제한된 데이터 수(1월3월의 3개월분)에 기인한 소표본 특유의 변동임을 확인했습니다. 시장 환경의 변화를 포착하면서도, 일부 연도의 수치에 일희일비하지 않고 장기적인 통계적 기대치를 믿는 자세의 중요성을 재인식했습니다.
7. 차기 예고
아나우마·범주마의 더블 필터를 통합하고 실력 모델과의 황금비를 특정함으로써, 시스템의 「예측 기반」은 전례 없는 안정기에 접어들었습니다.
다음 회차에서는 이 견고한 토대를 무기로, 드디어 연승복식권 (Wide) 종목의 본격적인 공략에 나섭니다.
제28화 「와이드(Wide) 종목의 통합과 포트폴리오 확장: 배당 변동성을 제어하라」
4,000만 행을 넘는 배당 데이터의 효율적인 로드 (Load) 설계와 새로운 수익원 개척이 시작됩니다.
Discussion

AI 자동 생성 콘텐츠
본 콘텐츠는 Zenn AI의 원문을 AI가 자동으로 요약·번역·분석한 것입니다. 원 저작권은 원저작자에게 있으며, 정확한 내용은 반드시 원문을 확인해 주세요.
원문 바로가기