완벽해 보였던 모델 (그렇지 않게 될 때까지)
첫 번째 백테스트 재앙을 아직도 기억합니다. 우리 모델은 2년간의 과거 데이터에서 12% ROI를 보여주었습니다. 축하하고 있었죠.
그런 다음 배포했습니다. 첫 달: -8%. 둘째 달: -6%. 무슨 일이 일어난 걸까요?
누수. 오프닝에서 예측해야 하는 모델을 훈련하기 위해 실수로 클로징 배당률을 사용했습니다. 물론 백테스트에서는 놀라워 보였습니다—미래를 보고 있었으니까요.
누수: 침묵의 모델 킬러
데이터 누수는 모델이 예측 시점에 가지지 말아야 할 정보를 실수로 볼 때 발생합니다. 놀랍도록 쉽게 발생합니다.
발견한 일반적인 누수 소스:
- 1오프닝에서 예측할 때 훈련 데이터의 클로징 배당률
- 2예측 타임스탬프가 발표 전일 때 최종 라인업 데이터
- 3피처 계산에 스며드는 경기 후 통계
- 4시즌 중 예측에 누출되는 시즌 말 정보
수정은 간단하지만 규율이 필요합니다: 모든 것을 타임스탬프 잠금.
체리피킹: 자신에게 거짓말하는 방법
이것은 종종 무의식적으로 발생하기 때문에 미묘합니다.
"상위 5개 리그에서만 테스트하자—거기가 데이터가 가장 깨끗해."
"COVID 시즌은 제외하자—어차피 이상했으니까."
각각은 합리적으로 들립니다. 하지만 함께하면 현실을 대표하지 않는 데이터셋을 만듭니다.
현재 우리의 규칙: 어떤 실험이든 실행하기 *전에* 포함 기준을 정의하고, 무슨 일이 있어도 지킨다.
시간 기반 분할 문제
표준 머신러닝 관행은 데이터를 훈련/테스트 세트로 무작위로 분할하는 것입니다. 스포츠 예측에서는 이것이 틀렸습니다.
왜? 같은 시즌의 경기들은 맥락을 공유하기 때문입니다. 올바른 접근법: 이전 기간에서 훈련하고, 이후 기간에서 테스트합니다.
핵심 포인트
- 1누수는 어떤 모델도 놀라워 보이게 할 수 있음 (배포까지)
- 2체리피킹은 미묘하게 발생—기준을 미리 정의
- 3시간 기반 분할은 스포츠 데이터에 필수
- 4축구는 변화; 여러 시간 창에서 평가
- 5항상 베이스라인과 비교, 무작위만이 아닌
*OddsFlow는 교육 및 정보 제공 목적으로 AI 기반 스포츠 분석을 제공합니다.*

