AI 預測的回測陷阱:為什麼線上命中率比 paper test 低 12%
Look-ahead bias、survivorship bias、賠率時間錯位 — 你的回測為什麼不準。
Paper backtest vs 線上實跑:12% 差距的原因
OkayAI 內部 paper backtest 顯示模型應該命中 73%。實際線上跑 96 場顯示只有 68%。 12% 看似不大但對 ROI 影響巨大:73% × 1.90 = +38% ROI / 68% × 1.90 = +29% ROI。
差距來自三個典型 backtest 陷阱。任何用歷史資料驗證自己模型的玩家都會踩到。
陷阱 1:Look-ahead bias(未來資訊偷看)
什麼是 look-ahead bias
Backtest 用比賽當天的最終資料跑模型 — 包括開賽前才公佈的傷兵新聞、教練最終陣容、天氣即時資訊。 但實際線上玩家在開賽前 N 小時就要決定下注 — 部分資訊還沒揭露。
OkayAI 案例
我們的 backtest 用「比賽當天 18:00」的 starter list 跑。實際線上預測在「開賽前 4 小時」rolling deadline, 對某些晚開賽的場(如澳超 19:00 開賽),預測在 15:00 完成 — 比 backtest cutoff 早 3 小時。 這 3 小時內可能 starter 變動或傷兵新聞。
對策
Backtest 嚴格用「預測時刻 t」之前的資料、不偷看 t+1 之後資訊。OkayAI 後續調整 backtest 為 rolling cutoff。
陷阱 2:Odds timing mismatch(賠率時間錯位)
什麼是 odds timing mismatch
Backtest 通常用close odds(比賽前最後賠率)算 EV。但實際玩家在open / mid odds時下注 — 賠率可能不同。
數字示例
某場 open 主勝賠率 2.10。Sharp money 進場後 close 賠率 1.90。
- Backtest 用 close 賠率算:玩家「應該」拿到 1.90 → EV 偏低估
- 實際玩家在 open 拿到 2.10 → EV 偏高
但 close 賠率代表「最終市場 consensus」,更接近真實機率。所以:
- Backtest 用 open 賠率:EV 估高、但 close 賠率代表真實機率所以勝率 estimate 偏低
- Backtest 用 close 賠率:EV 估低、但勝率 estimate 準確
OkayAI 校正
統一用 open odds 估 EV,但勝率 estimate 用 close odds 校正。把這個錯位明確標出來,避免 backtest 自欺。
陷阱 3:Survivorship bias(倖存者偏差)
什麼是 survivorship bias
Backtest 用「資料完整的場次」測試。但實際線上玩家會遇到資料缺失場 — 例如:傷兵名單沒揭露、教練臨陣換陣型、API 拉資料失敗。 這些場次 backtest 從 dataset 篩掉,但線上跑必須做決定(用 fallback 邏輯)。
OkayAI 案例
我們的 backtest 自動篩掉 starter 資訊不完整的場次(佔總數 12%)。但線上跑遇到這些場次必須用 fallback(用 previous starter)。 Fallback 場次命中率比正常場次低 8-10%。
對策
Backtest 不篩掉任何場次。資料缺失場用 fallback 邏輯,記錄 fallback 場次的命中率。 如果 fallback 命中率 <55%,避免線上跑這類場。
更多次要陷阱
- Data snooping bias:用同一資料反覆 tune 模型參數,overfitting 自己樣本
- 賠率 staleness:歷史賠率資料庫可能延遲幾分鐘,跟玩家實際拿的不一樣
- 排除特殊場(如延期 / 取消):但這些場線上會遇到,要設清楚規則
- Self-fulfilling backtest:模型基於 close odds 訓練,backtest 也用 close odds → 看起來超準但其實只是 reproducing input
如何做誠實的 backtest
- 嚴格 time-aware:cutoff 在每場合理時間點,不用未來資料
- Out-of-sample testing:訓練 / 驗證 / 測試集嚴格分開,最好用 walk-forward 滾動測試
- 記錄所有場次(含 fallback / 異常),不要 cherry-pick
- 用線上實際拿的賠率(open / mid)算 EV,不用 close
- 計算 paper vs live 的 gap,定期 review
陷阱 4:Selection bias 在數據蒐集
Backtest 用「歷史可拿到的賠率資料」回測。 但歷史資料來源(Football-Data、The Odds API archive)通常只記主流莊家賠率 —— recreational books / 軟莊家賠率可能根本沒記錄。
實戰問題:line shopping 是 sharp 玩家的核心技巧 —— 在 5+ 家莊家中找最佳賠率。 Backtest 沒這 5+ 家完整資料、必然低估「line shopping edge」。
對策:OkayAI backtest 用 The Odds API 24 家 archive(涵蓋 sharp + soft), 但仍承認小型莊家 line shopping edge 無法回測。 實戰中玩家可能比 backtest 多賺 0.5-1.5% per bet。
陷阱 5:Regime change(市場結構改變)
Backtest 用 2020-2024 資料訓練,但 2025-2026 市場結構可能變了:
- Pinnacle 演算法升級:2024 Q4 Pinnacle 升級了內部模型,sharp accuracy 提升 → 你的 edge 來源變少
- 新國家市場成熟:2025 美國運彩合法化、Bet365 退出某市場 → 賠率 dynamics 改變
- FIFA 賽制改:2026 世界盃 48 隊(vs 2022 的 32 隊),歷史 sample 不適用
對策:OkayAI 對 regime change 做:
- 每季 quarterly retraining 包含最新 3 個月資料
- 對主要事件(賽制改、市場開放)暫停預測 / 標 low confidence
- 追蹤 Brier Score 趨勢 — 上升表示模型過時、需要 retraining
更多次要陷阱
- Data snooping bias:用同一資料反覆 tune 模型參數、overfitting 自己樣本(解:嚴格 train/val/test split)
- 賠率 staleness:歷史賠率資料庫可能延遲幾分鐘、跟玩家實際拿的不一樣(解:用 The Odds API live snapshots)
- 排除特殊場(如延期 / 取消):但這些場線上會遇到、要設清楚規則(OkayAI 對延期場標 *)
- Self-fulfilling backtest:模型基於 close odds 訓練、backtest 也用 close odds → 看起來超準但其實只是 reproducing input(解:用不同資料源 cross-validate)
- Skipping period bias:某些賽季(如 COVID 期)資料異常、backtest 不能無腦平均(解:分賽季拆解、weight 調整)
如何做誠實的 backtest(業界 best practice)
- 嚴格 time-aware cutoff:每場 cutoff 在「實際預測時刻」、不用未來資料
- Out-of-sample testing:train / val / test 嚴格分開,最好用 walk-forward 滾動測試
- 記錄所有場次(含 fallback / 異常)、不要 cherry-pick
- 用線上實際拿的賠率(open / mid)算 EV、不用 close
- 計算 paper vs live 的 gap、定期 review
- Multiple data sources cross-validation
- 對 regime change 暫停預測 / 重 retraining
- 追蹤模型 calibration(Brier Score、Log Loss)長期趨勢
實戰案例:OkayAI 的 paper-to-live drift 拆解
OkayAI Q1 2026 內部 paper backtest 顯示 73% 命中率。 Live 實跑 96 場 68%。 差距 5% 拆解:
| 陷阱 | 影響 | 校正後改善 |
|---|---|---|
| Look-ahead bias(starter info) | -1.8% | 實作 rolling cutoff → 預期 -0.5% |
| Odds timing mismatch | -1.2% | 用 open odds → 預期 -0.2% |
| Survivorship bias(fallback 場) | -1.5% | 納入 fallback 場 → 預期 -1.0% |
| Selection bias(line shopping) | -0.3% | 多家莊家 archive → 預期 -0.1% |
| Regime change(賽制 / 演算法) | -0.2% | quarterly retraining → 預期 0% |
| 總計 | -5% | -1.8% 預期 |
OkayAI 校正 5 個陷阱後預期 paper-to-live drift 從 5% 降到 1.8%。 實際下一季 Q2 retroactive validation 將確認。
給玩家:怎麼判斷一個運彩 AI 站的 backtest 可不可信
多數運彩 AI 站 marketing 「backtest 75% accuracy」吸引玩家。 但 75% 通常是糖衣 backtest。 問這幾個問題:
- 是否 out-of-sample testing?(不是、就是 in-sample overfitting)
- 是否用 open odds 算 EV?(用 close odds 就是 self-fulfilling)
- 是否公開 walk-forward 結果?(沒 walk-forward 就 cherry-pick 風險高)
- live 公開戰績是否跟 backtest 落差 ≤ 10%?(> 10% 就是 backtest 有問題)
- live sample size 足夠嗎?(< 100 場無統計顯著性)
- 每月 Brier Score / Log Loss 追蹤嗎?(沒追蹤 = 沒在維護)
任何一個答 no = 對 backtest 數字打 30% 折扣。
結語:相信 live 表現 > backtest
OkayAI 內部規則:backtest 結果不直接公開、live 表現公開在 /performance。 玩家應該信 live 數字、對 backtest 數字保持懷疑。
12% drift(paper 80% → live 68%)是業界常態 —— 而不是 OkayAI 特有問題。理解 5 個陷阱後, 你能對任何聲稱「85% 命中率」的運彩 AI 站合理懷疑。
更多 AI 預測方法論相關文章、可以從 AI 預測方法論 開始看起。
延伸閱讀:
相關深度文章
想看 AI 怎麼算今晚的場?
/daily-picks 每天 5 場 AI 精選,免費看不用註冊。下方任選一個導口開始跟單。