AI 預測方法論

AI 預測的回測陷阱:為什麼線上命中率通常比回測低

Look-ahead bias、survivorship bias、賠率時間錯位 — 你的回測為什麼不準。

OddsForge 編輯部 2026-05-28

為什麼回測通常比上線表現好看

回測的命中率幾乎總是比上線後漂亮。差幾個百分點看似不大,對 ROI 影響卻很大。 舉個假設的例子:回測命中 60%、上線只有 55%,在賠率 1.90 下, ROI 從 +14%(0.60 × 1.90 − 1)掉到 +4.5%(0.55 × 1.90 − 1)。

差距通常來自幾個典型的 backtest 陷阱。任何用歷史資料驗證自己模型的玩家都會踩到。

陷阱 1:Look-ahead bias(未來資訊偷看)

什麼是 look-ahead bias

Backtest 用比賽當天的最終資料跑模型,包括開賽前才公佈的傷兵新聞、教練最終陣容、天氣即時資訊。 但實際線上玩家在開賽前 N 小時就要決定下注,部分資訊還沒揭露。

例子

假設回測用「比賽當天 18:00」的先發名單跑,但上線預測必須在開賽前 4 小時完成。 對晚上 19:00 開賽的場,上線預測在 15:00 就定案,比回測用的資料早了 3 小時, 這 3 小時內的先發變動或傷兵新聞,回測看得到、上線看不到。

對策

Backtest 嚴格用「預測時刻 t」之前的資料、不偷看 t+1 之後資訊,也就是 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 準確

做法

統一用 open odds 估 EV,但勝率 estimate 用 close odds 校正。把這個錯位明確標出來,避免 backtest 自欺。

陷阱 3:Survivorship bias(倖存者偏差)

什麼是 survivorship bias

Backtest 用「資料完整的場次」測試。但實際線上玩家會遇到資料缺失場,例如:傷兵名單沒揭露、教練臨陣換陣型、API 拉資料失敗。 這些場次 backtest 從 dataset 篩掉,但線上跑必須做決定(用 fallback 邏輯)。

例子

回測如果自動篩掉先發資訊不完整的場次,上線時這些場次還是得用 fallback(例如沿用上一場先發)預測, 而 fallback 場次的表現通常比資料完整的場次差 —— 回測等於只考了自己會的題目。

對策

Backtest 不篩掉任何場次。資料缺失場用 fallback 邏輯,記錄 fallback 場次的命中率。 如果 fallback 命中率 <55%,避免線上跑這類場。

更多次要陷阱

  • Data snooping bias:用同一資料反覆 tune 模型參數,overfitting 自己樣本
  • 賠率 staleness:歷史賠率資料庫可能延遲幾分鐘,跟玩家實際拿的不一樣
  • 排除特殊場(如延期 / 取消):但這些場線上會遇到,要設清楚規則
  • Self-fulfilling backtest:模型基於 close odds 訓練,backtest 也用 close odds → 看起來超準但其實只是 reproducing input

如何做誠實的 backtest

  1. 嚴格 time-aware:cutoff 在每場合理時間點,不用未來資料
  2. Out-of-sample testing:訓練 / 驗證 / 測試集嚴格分開,最好用 walk-forward 滾動測試
  3. 記錄所有場次(含 fallback / 異常),不要 cherry-pick
  4. 用線上實際拿的賠率(open / mid)算 EV,不用 close
  5. 計算 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」。

對策:回測盡量用同時涵蓋 sharp 與 soft 莊家的賠率資料, 並承認小型莊家的 line shopping 優勢無法回測。

想看 AI 怎麼算今晚的場?

每天 5 場 AI 精選,第一場免費看、不用註冊。

陷阱 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 不適用

對策:

  1. 每季 quarterly retraining 包含最新 3 個月資料
  2. 對主要事件(賽制改、市場開放)暫停預測 / 標 low confidence
  3. 追蹤 Brier Score 趨勢,上升表示模型過時、需要 retraining

更多次要陷阱

  • Data snooping bias:用同一資料反覆 tune 模型參數、overfitting 自己樣本(解:嚴格 train/val/test split)
  • 賠率 staleness:歷史賠率資料庫可能延遲幾分鐘、跟玩家實際拿的不一樣(解:用 The Odds API live snapshots)
  • 排除特殊場(如延期 / 取消):但這些場線上會遇到、要設清楚規則
  • Self-fulfilling backtest:模型基於 close odds 訓練、backtest 也用 close odds → 看起來超準但其實只是 reproducing input(解:用不同資料源 cross-validate)
  • Skipping period bias:某些賽季(如 COVID 期)資料異常、backtest 不能無腦平均(解:分賽季拆解、weight 調整)

如何做誠實的 backtest(業界 best practice)

  1. 嚴格 time-aware cutoff:每場 cutoff 在「實際預測時刻」、不用未來資料
  2. Out-of-sample testing:train / val / test 嚴格分開,最好用 walk-forward 滾動測試
  3. 記錄所有場次(含 fallback / 異常)、不要 cherry-pick
  4. 用線上實際拿的賠率(open / mid)算 EV、不用 close
  5. 計算 paper vs live 的 gap、定期 review
  6. Multiple data sources cross-validation
  7. 對 regime change 暫停預測 / 重 retraining
  8. 追蹤模型 calibration(Brier Score、Log Loss)長期趨勢

OddsForge 自己的情況

坦白說:我們沒有可公開驗證的命中率回測,所以這裡沒有自家的 paper-to-live 數字可以拆。 公開過的只有注碼策略回測,原始資料與結果都在 注碼策略回測; 上線後的每一筆結算則公開在 /performance。

給玩家:怎麼判斷一個運彩 AI 站的 backtest 可不可信

多數運彩 AI 站 marketing 「backtest 75% accuracy」吸引玩家。 但 75% 通常是糖衣 backtest。 問這幾個問題:

  1. 是否 out-of-sample testing?(不是、就是 in-sample overfitting)
  2. 是否用 open odds 算 EV?(用 close odds 就是 self-fulfilling)
  3. 是否公開 walk-forward 結果?(沒 walk-forward 就 cherry-pick 風險高)
  4. live 公開戰績是否跟 backtest 落差 ≤ 10%?(> 10% 就是 backtest 有問題)
  5. live sample size 足夠嗎?(< 100 場無統計顯著性)
  6. 每月 Brier Score / Log Loss 追蹤嗎?(沒追蹤 = 沒在維護)

任何一個答 no = 對 backtest 數字打 30% 折扣。

結語:相信 live 表現 > backtest

我們的做法:live 結算公開在 /performance,做過的注碼回測也連同原始資料公開。 玩家應該信 live 數字、對 backtest 數字保持懷疑 —— 包括我們的。

理解這 5 個陷阱後,你能對任何聲稱「85% 命中率」的運彩 AI 站合理懷疑。

更多 AI 預測方法論相關文章、可以從 AI 預測方法論 開始看起。

延伸閱讀:

資料來源與延伸查證

以下為本文定義、公式與數據的公開出處。查證日期:2026-08-26。

相關深度文章

想看 AI 怎麼算今晚的場?

/daily-picks 每天 5 場 AI 精選,免費看不用註冊。下方任選一個導口開始跟單。

每天 5 場 AI 精選,第一場免費看、不用註冊。

加 LINE 開通