← FootballSense · 全部盤口 · Model Lab

# RobHKJC 嚴格 Walk-Forward 回測(中文摘要)

生成日期:2026-11-16  
數據截止:2026-11-09(各聯賽 11-03 至 11-09)  
樣本:**2,007 場、18 個聯賽**,**1,311 場**有足夠歷史可預測  
來源:baseline run;機器可讀數字見 `reports/backtest_summary.json`

## 模型

- 60% 近 4 場 xG/xGA + 40% 賽季 Ridge 錨點
- 主場 1.15 / 客場 0.85
- Dixon-Coles rho = 0(另外做了 -0.05 敏感度測試)
- **嚴格 prior-only**:每場只用該日期之前的比賽;同一天所有比賽先預測,之後才一起揭示賽果
- 今次已擴展到 18 個 football-data 聯賽(五大聯賽 + 英冠/英甲/英乙/蘇超/德乙/意乙/西乙/法乙/荷甲/比甲/葡超/土超/希超)

## 核心結果:模型 vs 去水市場

| 市場 | n | 模型 Brier | 市場 Brier | 模型 − 市場 | 模型 LogLoss | 市場 LogLoss |
|---|---:|---:|---:|---:|---:|---:|
| O25 | 1,311 | 0.2439 | **0.2422** | +0.0018 | 0.6809 | **0.6771** |
| 1X2 | 1,311 | 0.6104 | **0.5837** | +0.0268 | 1.0181 | **0.9806** |

> 正數 = 模型較差。大樣本下,O25 仍然輸市場;1X2 輸更多。

## O25 校準

| 模型概率區間 | n | 模型均值 | 實際大 2.5 命中 | 差距 |
|---|---:|---:|---:|---:|
| 0–35% | 22 | 0.312 | 0.318 | +0.006 |
| 35–45% | 209 | 0.412 | 0.474 | +0.061 |
| 45–50% | 209 | 0.477 | 0.507 | +0.031 |
| 50–55% | 271 | 0.525 | 0.568 | +0.043 |
| 55–60% | 248 | 0.575 | 0.516 | −0.058 |
| 60–65% | 181 | 0.622 | 0.646 | +0.024 |
| 65–70% | 104 | 0.670 | 0.615 | −0.055 |
| 70–80% | 65 | 0.732 | 0.692 | −0.040 |
| 80%+ | 2 | 0.830 | 1.000 | +0.170 |

大樣本下,55–60%、65–80% 都係高估;「黃金區」並不是穩定的 calibration。

## 投注模擬(pre-closing `B365>2.5`,edge ≥ 2%)

| 指標 | O25 | 1X2 |
|---|---:|---:|
| 注數 | 1,021 | 1,193 |
| 命中率 | 49.9% | 30.3% |
| ROI | **+0.1%** | **−10.0%** |
| ROI 95% CI(按比賽日 bootstrap) | **[−6.7%, +7.0%]** | **[−18.9%, −0.9%]** |
| 平均賠率 | 2.10 | — |
| 平均 edge | +7.0% | — |
| 平均 CLV | +0.6% | +1.0% |
| Beat-close rate | 43.9% | 45.2% |

O25 的 +0.1% 基本上係零;CI 包括 0。1X2 的 negative ROI CI 全負,應該繼續禁用。

## 最後 30% 預測日期(2026-10-23 起)

| 市場 | n | 模型 Brier | 市場 Brier | 注數 | ROI | ROI 95% CI |
|---|---:|---:|---:|---:|---:|---|
| O25 | 533 | 0.2454 | 0.2444 | 416 | **+4.2%** | **[−8.5%, +14.2%]** |

之前 500/640 場樣本見到的 +26.1% / +13.4% signal,在 2,007 場樣本下變成 +4.2%,CI 包括 0。呢個係最清楚的結論:**細樣本的「edge」在大樣本下消失。**

## 按聯賽(O25,節錄)

| 聯賽 | n | 模型 Brier | 市場 Brier | 模型 − 市場 |
|---|---:|---:|---:|---:|
| EPL | 60 | 0.2580 | 0.2621 | −0.0040 |
| F2(法乙) | 72 | 0.2370 | 0.2463 | −0.0093 |
| N1(荷甲) | 70 | 0.2288 | 0.2334 | −0.0046 |
| SerieA | 70 | 0.2360 | 0.2490 | −0.0129 |
| LaLiga | 78 | 0.2296 | 0.2113 | +0.0183 |
| G1(希超) | 41 | 0.2682 | 0.2305 | +0.0377 |
| SP2(西乙) | 96 | 0.2617 | 0.2527 | +0.0090 |
| T1(土超) | 63 | 0.2350 | 0.2285 | +0.0065 |

有幾個聯賽模型略好,但 LaLiga / 希超 / 西乙 / 土超 明顯較差;整體 mixed,未有一致 edge。完整 18 聯賽表見 `reports/backtest_report.md`。

## 敏感度 / ablation

| 變體 | O25 模型 Brier | O25 市場 Brier | O25 注數 | O25 ROI | O25 ROI 95% CI |
|---|---:|---:|---:|---:|---|
| baseline (blend 0.40, rho 0) | 0.2439 | 0.2422 | 1,021 | +0.1% | [−6.7%, +7.0%] |
| blend 0.00(純近 4 場) | 0.2449 | 0.2422 | 1,073 | −1.7% | [−8.4%, +5.1%] |
| blend 1.00(純賽季錨點) | 0.2443 | 0.2422 | 970 | −1.3% | [−8.0%, +5.5%] |
| rho −0.05 | 0.2439 | 0.2422 | 1,021 | +0.1% | [−6.7%, +7.0%] |
| 聯賽係數(look-ahead) | 0.2434 | 0.2422 | 1,047 | +0.4% | [−6.6%, +7.3%] |

即使使用**全季聯賽係數**(有 look-ahead),O25 仍然輸 Brier,ROI 只有 +0.4%,CI 包括 0。呢個確認咗:問題唔係「差一個聯賽係數」,而係模型本身未有穩定、可證實的 edge。

## 結論

**大樣本(1,311 場預測)下,O25 沒有 edge;1X2 明顯 negative。**

- O25 ROI +0.1%,95% CI [−6.7%, +7.0%];Brier 亦輸市場。
- 最後 30% 的 +4.2%(CI [−8.5%, +14.2%])包括 0;之前 +26.1% / +13.4% 的 signal 已經消失。
- 1X2 ROI −10.0%(CI [−18.9%, −0.9%])應該繼續禁用。
- 「A/B/C 級 = 主注」目前應該降級為「觀察 / paper trade」;唔好加大注碼。

## 下一步

1. 每次用 `data_update.py --season 2627` 更新 football-data(18 聯賽),再重跑 backtest。
2. 用 `paper.py log --stake-mode shadow` 每日記錄 A/B/C 預測,累積 3–6 個月 forward record。
3. 每次下注記錄 bet price 和 closing price,report CLV;CLV 比短期 ROI 更早反映有冇 edge。
4. 加多季數據(2024/25、2025/26)再做 walk-forward;不要在同一季調參再同一季測試。
5. 先換 `betting.py` 的結算/EV/Kelly,再考慮 Dixon-Coles、lineups、xG 模型等新 feature。