
경마 AI 개발 기록 #24: 단승 특화의 한계를 「복승 전용 모델」로 돌파하기: 특징량 공간의 물리적 격리
요약
경마 예측 ROI 개선을 위해 단일 랭킹 모델에서 단승과 복승을 분리한 멀티 모델 아키텍처로 전환하는 과정을 다룹니다. 모델별 특징량 공간을 물리적으로 격리하여 NaN 데이터 오염 문제를 해결하고 예측 정밀도를 높이는 엔지니어링 접근법을 설명합니다.
핵심 포인트
- 단일 모델의 한계를 극복하기 위해 단승과 복승 전용 모델을 분리한 멀티 모델 아키텍처 도입
- 모델별로 최적화된 특징량(Feature) 세트를 구성하여 예측 전문성 강화
- 특징량 공간의 물리적 격리를 통해 NaN 데이터로 인한 확률 교정 왜곡 문제 해결
- 데이터 파이프라인 재설계를 통한 시스템 안정성 및 ROI 확보
📄 개요와 과제 제기
지난번, 우리는 단승 ROI가 85.17%라는 한계에 직면했습니다. 이 근본 원인은 본명대(Favorite)의 확률 추정에 있어서의 **「물리적인 상한」**에 있음이 판명되었습니다.
단일 랭킹 모델(Ranking Model)을 통한 전방위적인 예측에는 한계가 있으며, 특히 2착이나 3착과 같은 「복승권 내(複勝圏内)」에 버티는 말의 평가에 있어 시장이 가진 배당(Odds) 정보를 충분히 활용하지 못하고 있었습니다.
본고(제24화)에서는 이 과제를 해결하기 위해, 단승 모델에 더해 "「복승 전용 모델 (Top3 Model)」"을 도입하고, 단승과 복승의 예측 결과를 조합함으로써 ROI의 천장을 돌파하는 전략을 전개합니다.
⚙️ 구현 접근 방식: 다층적 포트폴리오로의 이행
기존의 「랭킹 모델 하나」라는 단일 구성을 폐지하고, 목적 변수가 다른 여러 전문 모델을 연계시키는 **멀티 모델 아키텍처 (Multi-model Architecture)**로 이행했습니다.
1. 모델의 역할 분담과 특징량 세트의 전문화
각 모델에 최적화된 「관점(눈)」을 갖게 하기 위해, 입력되는 특징량(Feature) 세트를 논리적 및 물리적으로 분리하는 것이 필수적이 되었습니다.
🥇 Ranking Model (단승 특화):
-
목적 함수:
rank_xendcg를 계속 사용하며, 1착 예측에 특화. -
중시하는 특징량:
prev_performance_score,ewma_rank등, 1착과의 상관관계가 높은 지표군.
🥈 Top3 Model (복승권 내 특화):
- 목적 함수: 3착 이내에 들어올 확률을 최대화하기 위한 이진 분류(Binary Classification) 모델.
- 중시하는 특징량:
jockey_place_rate(기수 복승률),avg_placed_5races(과거 5주 복승권 내 진입률) 등, 복승권 내 진입에 특화된 지표군.
2. 수학적 처리의 계속
랭크 학습 모델로부터 얻어지는 스코어
(참: 이 식은 스코어를 확률로 변환할 때의 기본적인 구조를 나타냅니다.)
3. 시스템 아키텍처의 변천
시스템이 안고 있는 과제와 해결책을 시각적으로 이해하기 위해, 데이터 플로우(Data Flow) 도표를 사용하여 비교합니다.
❌ 구 아키텍처: 글로벌 특징량 공간의 일원 관리
문제점: 모든 모델이 동일한 특징량 세트를 공유하고 있기 때문에, Top3 전용 열이 NaN이 되어 Ranking Model의 교정(Calibration) 데이터를 오염시켰습니다.
✅ 신 아키텍처: 모델별 특징량 공간을 물리적으로 격리
개선점: 각 모델이 전문화된 특징량 세트를 받음으로써, NaN 오염을 완전히 배제하고, 추론층(Inference Layer)에서 모든 열 데이터를 통합합니다.
🚨 직면한 문제: 특징량 공간의 「NaN 오염」과 ROI의 붕괴
Top3 모델 단체의 정밀도(AUC 0.7292)는 순조롭게 향상되었으나, 통합 테스트에서 치명적인 문제가 발생했습니다.
【원인】
지금까지 모든 모델이 단일 글로벌 변수인 feature_fingerprint (특징량의 지문)를 공유하고 있었습니다. 이 구조로 인해 Top3 전용 열(예: jockey_place_rate)이 Ranking Model에서는 필요하지 않기 때문에, 대응하는 행에 NaN이 유입되었습니다.
【결과】
이 NaN 오염의 영향을 받아, 가장 중요한 지표인 calibrated_prob_win (교정된 승률)의 계산이 왜곡되었고, 단승 ROI는 당초 85.17%에서 67.38%로 약 20포인트 급락하고 말았습니다.
✅ 해결 접근 방식: 물리적·논리적 분리에 의한 재설계
이 위기를 극복하기 위해, 단일 데이터 파이프라인으로 여러 모델을 다룬다는 근본적인 한계를 인정하고, 다음과 같은 3단계에 걸쳐 특징량 공간을 철저히 분리했습니다.
논리적 분리 (Fingerprint의 순화):
model_trainer.py의 prepare_training_data 함수 내에서, feature_fingerprint의 정의를 「랭킹·복병마용」으로 엄격히 한정하고, Top3 전용 열을 데이터 로드 단계에서 제외했습니다.
물리적 분리 (Calibration History의 다층화):
모델별 교정용 데이터를 유지하는 calib_history의 구조를 확장하여, 랭킹용 데이터셋 'X'와 복승 모델 전용 데이터셋 'X_top3'를 독립적으로 관리하도록 했습니다.
- 모델별 교정용 데이터를 유지한다
추론 패스(Inference Path)의 확장 (전체 열 데이터의 전달):
score_integrator.py에서 prediction.py로 데이터를 전달하는 인터페이스를 신설했습니다. 이 새로운 파이프라인은 특정 지문(Fingerprint)에 얽매이지 않고, 각 모델이 필요로 하는 열(Column)만을 참조하는 구성으로 설계했습니다.
✨ 최종적인 성과와 결론
아키텍처의 기반을 쇄신한 결과, 다음과 같은 수치적·구조적 안정성을 확립할 수 있었습니다.
- Top3 모델의 식별 능력:
prob_top3AUC는 목표치인 0.72를 초과하는 0.7213을 달성했습니다. - 단승 식별 능력의 회복: 특징량 오염(Feature Contamination)이 해소된 결과, In-Race Spearman 상관계수는 0.2527(exp023 대비 개선)을 기록하며 신뢰성을 대폭 향상시켰습니다.
- ROI의 안정화: 오염으로 인해 붕괴되었던 단승 ROI를 v2 수준(85.17% 이상)으로 복구시킬 수 있는 견고한 토대가 완성되었습니다.
💡 배움과 향후 전망
🧠 랭킹 모델의 섬세함과 「지문(Fingerprint)」의 이면성
이번 경험을 통해 랭킹 모델의 교정기(Calibrator)는 매우 섬세하며, '항상 NaN을 포함하는 열'이라는 단순한 데이터 구조 문제가 시스템의 수익성을 즉각적으로 저하시킬 수 있음을 확인했습니다.
기존의 feature_fingerprint는 '물리적인 데이터 로드용'과 '논리적인 교정 입력의 구조 규정용'이라는 두 가지 역할을 겸하고 있었으나, 이 역할의 혼동이 근본적인 취약성을 야기하고 있었습니다.
🚀 차기 예고: 아키텍처의 영구적인 해결을 향해
특징량 공간(Feature Space)의 분리를 통해, 여러 모델이 서로를 오염시키지 않고 공존할 수 있는 기반은 마련되었습니다. 하지만 현재의 구현은 아직 '임시방편적인 패치워크(Patchwork)'에 불과하며, 향후 모델을 추가할 때 다시 동일한 실수를 반복할 위험이 있습니다.
다음 회차에서는 이번에 얻은 지견을 코어 기반으로 승격시킵니다. ModelConfig와 feature_spaces 딕셔너리를 도입함으로써, 시스템의 확장성을 영구적으로 해결하는 "Declarative Multi-Model Architecture" 구현으로 나아갑니다.
Discussion

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