Backtest
How the model performed.
Every completed match is replayed point-in-time — the model sees only the games that had been played before kick-off, then its prediction is scored against what actually happened. No hindsight, no cherry-picking, no re-fitting on the answer.
9,880 matches scored across 8 leagues and 37 seasons.
Are the probabilities honest?
A calibrated model means the numbers mean what they say — over all the games where it said “60% Over”, roughly 60% actually went Over. Here every Over/Under 2.5 prediction across all leagues, grouped by confidence and checked against reality.
Each dot is a probability band; dot size is how many predictions fell in it. On the dashed line = perfectly calibrated. Above it, results beat the forecast; below it, the model was over-confident.
Serie A
1,701 matches · 5 seasons · 2021–2026| Market | Predictions | Accuracy | Brier | Log-loss |
|---|---|---|---|---|
| Match result (1X2)(coin-flip ≈ 33%) | 1,701 | 52.0% | 0.599 | 1.001 |
| Over / Under 1.5 goals | 1,701 | 74.4% | 0.190 | 0.568 |
| Over / Under 2.5 goals | 1,701 | 53.9% | 0.248 | 0.690 |
| Over / Under 3.5 goals | 1,701 | 74.1% | 0.190 | 0.568 |
| Both teams to score(coin-flip ≈ 50%) | 1,701 | 52.4% | 0.250 | 0.693 |
Count markets — prediction error
| Market | Matches | Avg pred | Avg actual | Model err | O/U acc |
|---|---|---|---|---|---|
| Corners | 1,006 | 9.3 | 9.3 | 2.70 | 56.9%@9.5 |
| Cards (yellow) | 983 | 4.2 | 4.1 | 1.48 | 58.5%@3.5 |
| Total shots | 1,006 | 24.9 | 24.7 | 4.39 | 57.4%@24.5 |
| Shots on target | 1,006 | 8.1 | 8.1 | 2.32 | 56.0%@8.5 |
1X2 accuracy by season: 2021-22 51% · 2022-23 52% · 2023-24 51% · 2024-25 53% · 2025-26 52%
La Liga
1,700 matches · 5 seasons · 2021–2026| Market | Predictions | Accuracy | Brier | Log-loss |
|---|---|---|---|---|
| Match result (1X2)(coin-flip ≈ 33%) | 1,700 | 51.4% | 0.596 | 0.999 |
| Over / Under 1.5 goals | 1,700 | 72.6% | 0.197 | 0.582 |
| Over / Under 2.5 goals | 1,700 | 56.8% | 0.245 | 0.683 |
| Over / Under 3.5 goals | 1,700 | 74.5% | 0.186 | 0.558 |
| Both teams to score(coin-flip ≈ 50%) | 1,700 | 54.9% | 0.248 | 0.689 |
Count markets — prediction error
| Market | Matches | Avg pred | Avg actual | Model err | O/U acc |
|---|---|---|---|---|---|
| Corners | 1,004 | 9.5 | 9.5 | 2.60 | 55.8%@9.5 |
| Cards (yellow) | 985 | 4.8 | 4.7 | 1.83 | 66.0%@3.5 |
| Total shots | 1,004 | 24.4 | 24.4 | 4.48 | 60.8%@24.5 |
| Shots on target | 1,004 | 8.4 | 8.5 | 2.42 | 55.4%@8.5 |
1X2 accuracy by season: 2021-22 48% · 2022-23 52% · 2023-24 53% · 2024-25 52% · 2025-26 53%
Premier League
1,700 matches · 5 seasons · 2021–2026| Market | Predictions | Accuracy | Brier | Log-loss |
|---|---|---|---|---|
| Match result (1X2)(coin-flip ≈ 33%) | 1,700 | 52.5% | 0.592 | 0.992 |
| Over / Under 1.5 goals | 1,700 | 80.1% | 0.158 | 0.496 |
| Over / Under 2.5 goals | 1,700 | 57.2% | 0.243 | 0.679 |
| Over / Under 3.5 goals | 1,700 | 65.4% | 0.224 | 0.639 |
| Both teams to score(coin-flip ≈ 50%) | 1,700 | 55.9% | 0.246 | 0.685 |
Count markets — prediction error
| Market | Matches | Avg pred | Avg actual | Model err | O/U acc |
|---|---|---|---|---|---|
| Corners | 1,011 | 10.4 | 10.3 | 2.72 | 57.8%@9.5 |
| Cards (yellow) | 979 | 4.5 | 4.2 | 1.63 | 61.3%@3.5 |
| Total shots | 1,011 | 25.9 | 26.3 | 4.63 | 61.0%@24.5 |
| Shots on target | 1,011 | 9.0 | 9.2 | 2.43 | 55.8%@8.5 |
1X2 accuracy by season: 2021-22 51% · 2022-23 54% · 2023-24 57% · 2024-25 53% · 2025-26 48%
Ligue 1
1,478 matches · 5 seasons · 2021–2026| Market | Predictions | Accuracy | Brier | Log-loss |
|---|---|---|---|---|
| Match result (1X2)(coin-flip ≈ 33%) | 1,478 | 50.7% | 0.603 | 1.008 |
| Over / Under 1.5 goals | 1,478 | 76.5% | 0.179 | 0.544 |
| Over / Under 2.5 goals | 1,478 | 54.0% | 0.248 | 0.689 |
| Over / Under 3.5 goals | 1,478 | 69.4% | 0.210 | 0.611 |
| Both teams to score(coin-flip ≈ 50%) | 1,478 | 53.7% | 0.250 | 0.694 |
Count markets — prediction error
| Market | Matches | Avg pred | Avg actual | Model err | O/U acc |
|---|---|---|---|---|---|
| Corners | 801 | 9.4 | 9.4 | 2.69 | 53.1%@9.5 |
| Cards (yellow) | 777 | 4.0 | 4.0 | 1.42 | 58.4%@3.5 |
| Total shots | 801 | 25.0 | 25.1 | 4.46 | 58.7%@24.5 |
| Shots on target | 801 | 9.0 | 9.0 | 2.55 | 54.4%@8.5 |
1X2 accuracy by season: 2021-22 50% · 2022-23 54% · 2023-24 45% · 2024-25 55% · 2025-26 48%
Bundesliga
1,327 matches · 5 seasons · 2021–2026| Market | Predictions | Accuracy | Brier | Log-loss |
|---|---|---|---|---|
| Match result (1X2)(coin-flip ≈ 33%) | 1,327 | 51.7% | 0.603 | 1.010 |
| Over / Under 1.5 goals | 1,327 | 83.7% | 0.136 | 0.443 |
| Over / Under 2.5 goals | 1,327 | 60.3% | 0.236 | 0.665 |
| Over / Under 3.5 goals | 1,327 | 60.4% | 0.237 | 0.667 |
| Both teams to score(coin-flip ≈ 50%) | 1,327 | 60.1% | 0.238 | 0.669 |
Count markets — prediction error
| Market | Matches | Avg pred | Avg actual | Model err | O/U acc |
|---|---|---|---|---|---|
| Corners | 806 | 9.8 | 9.7 | 2.70 | 53.7%@9.5 |
| Cards (yellow) | 783 | 4.2 | 4.0 | 1.61 | 57.7%@3.5 |
| Total shots | 806 | 26.7 | 26.6 | 4.62 | 63.4%@24.5 |
| Shots on target | 806 | 9.5 | 9.4 | 2.55 | 56.9%@8.5 |
1X2 accuracy by season: 2021-22 52% · 2022-23 51% · 2023-24 54% · 2024-25 46% · 2025-26 55%
Allsvenskan
682 matches · 4 seasons · 2023–2026| Market | Predictions | Accuracy | Brier | Log-loss |
|---|---|---|---|---|
| Match result (1X2)(coin-flip ≈ 33%) | 682 | 50.1% | 0.615 | 1.027 |
| Over / Under 1.5 goals | 682 | 79.2% | 0.165 | 0.511 |
| Over / Under 2.5 goals | 682 | 55.0% | 0.246 | 0.684 |
| Over / Under 3.5 goals | 682 | 69.4% | 0.212 | 0.615 |
| Both teams to score(coin-flip ≈ 50%) | 682 | 53.5% | 0.251 | 0.696 |
Count markets — prediction error
| Market | Matches | Avg pred | Avg actual | Model err | O/U acc |
|---|---|---|---|---|---|
| Corners | 499 | 10.7 | 10.8 | 2.89 | 60.5%@9.5 |
| Cards (yellow) | 489 | 3.8 | 3.6 | 1.50 | 52.6%@3.5 |
| Total shots | 499 | 26.8 | 27.3 | 4.81 | 64.7%@24.5 |
| Shots on target | 499 | 8.8 | 9.1 | 2.60 | 54.1%@8.5 |
1X2 accuracy by season: 2023 53% · 2024 48% · 2025 50% · 2026 51%
Eliteserien
680 matches · 4 seasons · 2023–2026| Market | Predictions | Accuracy | Brier | Log-loss |
|---|---|---|---|---|
| Match result (1X2)(coin-flip ≈ 33%) | 680 | 55.3% | 0.572 | 0.965 |
| Over / Under 1.5 goals | 680 | 80.4% | 0.157 | 0.492 |
| Over / Under 2.5 goals | 680 | 60.6% | 0.235 | 0.662 |
| Over / Under 3.5 goals | 680 | 60.7% | 0.236 | 0.665 |
| Both teams to score(coin-flip ≈ 50%) | 680 | 53.5% | 0.247 | 0.686 |
Count markets — prediction error
| Market | Matches | Avg pred | Avg actual | Model err | O/U acc |
|---|---|---|---|---|---|
| Corners | 495 | 10.7 | 10.4 | 3.06 | 57.8%@9.5 |
| Cards (yellow) | 472 | 3.5 | 3.4 | 1.41 | 53.2%@3.5 |
| Total shots | 496 | 25.5 | 25.7 | 4.84 | 64.3%@24.5 |
| Shots on target | 496 | 8.8 | 8.9 | 2.57 | 57.9%@8.5 |
1X2 accuracy by season: 2023 56% · 2024 47% · 2025 61% · 2026 61%
Superliga
612 matches · 4 seasons · 2022–2026| Market | Predictions | Accuracy | Brier | Log-loss |
|---|---|---|---|---|
| Match result (1X2)(coin-flip ≈ 33%) | 612 | 46.1% | 0.643 | 1.066 |
| Over / Under 1.5 goals | 612 | 80.1% | 0.160 | 0.500 |
| Over / Under 2.5 goals | 612 | 58.0% | 0.245 | 0.683 |
| Over / Under 3.5 goals | 612 | 66.2% | 0.225 | 0.642 |
| Both teams to score(coin-flip ≈ 50%) | 612 | 56.9% | 0.243 | 0.679 |
Count markets — prediction error
| Market | Matches | Avg pred | Avg actual | Model err | O/U acc |
|---|---|---|---|---|---|
| Corners | 166 | 9.3 | 10.0 | 2.70 | 48.8%@9.5 |
| Cards (yellow) | 160 | 3.4 | 3.5 | 1.40 | 54.4%@3.5 |
| Total shots | 166 | 26.2 | 26.9 | 4.45 | 63.3%@24.5 |
| Shots on target | 166 | 9.5 | 9.9 | 2.69 | 60.2%@8.5 |
1X2 accuracy by season: 2022-23 42% · 2023-24 48% · 2024-25 44% · 2025-26 50%
How to read this
- Accuracy — how often the outcome the model rated most likely actually happened. Compare it to the naive baseline in brackets.
- Brier and Log-loss measure how well-calibrated the probabilities are (not just the pick) — lower is better. They reward confidence only when it's justified.
- Each league pools multiple seasons; the numbers are the true per-match averages. Predictions come from the opponent-adjusted ratings model, re-fit before every match on prior results only. The first few weeks of each season are held out as warm-up.
- Count markets (corners / cards / shots) predict an expected total. Model err is the average miss vs the actual count (lower is better), and O/U acc is how often it calls the over/under at a standard line. Corner/card/shot data is only available for recent seasons, so those samples are smaller.
- These score the model against the outcome. Value versus the betting market (closing-line ROI) is measured separately, as odds history accumulates.