The calibration study
Every probability the model publishes is logged before kickoff — the probability, the market odds at that moment, immutably — and settled after full time at flat 1-unit stakes. Wins and losses alike. The market is usually right; this ledger is the check that the model, and the results data underneath it, are sound. It is a research output, not a service.
Every probability we publish is logged — 1X2, BTTS and the goals markets alike. What enters the staked record, one rule since 5 August 2026: the model's probability exceeds the market's implied probability (1 / odds, bookmaker margin included, not de-vigged) by ≥ +2 percentage points on any published market — 1X2 home/draw/away, FT Over/Under 2.5, HT Over/Under 1.5, BTTS yes/no — against a real, multi-book average price frozen about 30 minutes before kickoff, in a league whose model has at least 20 effective matches and whose results are not behind the source. Every side that clears the cut is one staked prediction, flat 1u, so a match can carry more than one. Before 5 August only the two O/U markets could be staked; those rows keep their original classification and the change is marked in the ledger. Identical rule to the backtest below. Everything logged that does not clear the cut is scored on the calibration board instead — was our 64% really a 64%?
Cumulative P/L
┊ 2026-08-05 — All markets eligible for leans
| Market | Staked decided | Staked hit rate | Staked P/L | Below cut | Below-cut P/L |
|---|---|---|---|---|---|
| Half-time Over/Under 1.5 | 746 | 55.0% | −62.57u | 4066 | −351.40u |
| Full-time Over/Under 2.5 | 985 | 45.2% | −89.97u | 3833 | −230.41u |
| Full-time Over/Under 3.5 | 818 | 56.9% | −94.17u | 3980 | −288.21u |
| Match result (1X2) | 1112 | 23.6% | −288.98u | 6091 | −383.37u |
| Both teams to score | 687 | 40.3% | −115.44u | 4111 | −261.14u |
"Below cut" = published probabilities whose divergence never reached the ≥2 pt divergence threshold — staked flat 1u anyway. That contrast is the point: same model, same matches, and the cut separates the two columns. All markets enter the staked record on the same rule since 2026-08-05 (before that only the two O/U markets did; earlier rows keep their classification). We report only the staked columns as the record. Prices are multi-book averages, re-checked as kickoff approaches and frozen ~30 minutes before the match — the frozen price is what every prediction settles against.
| Date | Match | Market | Model % | Odds | Result | P/L |
|---|---|---|---|---|---|---|
| 2026-10-05 | Cordoba – Tenerife3-2 (2:1) | FT U2.5 | 54% | 2.02 | LOST | −1.00u |
| 2026-10-05 | Cordoba – Tenerife3-2 (2:1) | FT U3.5 | 76% | 1.37 | LOST | −1.00u |
| 2026-10-05 | Cordoba – Tenerife3-2 (2:1) | Away win | 28% | 3.93 | LOST | −1.00u |
| 2026-10-05 | Cordoba – Tenerife3-2 (2:1) | BTTS: No | 50% | 2.11 | LOST | −1.00u |
| 2026-10-05 | PAOK B – Ellas Syrou0-0 (0:0) | FT O2.5 | 49% | 2.21 | LOST | −1.00u |
| 2026-10-05 | PAOK B – Ellas Syrou0-0 (0:0) | Away win | 45% | 2.82 | LOST | −1.00u |
| 2026-10-04 | Alcione Milano – Trento2-2 (1:1) | HT U1.5 | 82% | 1.37 | LOST | −1.00u |
| 2026-10-04 | Alcione Milano – Trento2-2 (1:1) | FT U2.5 | 68% | 1.78 | LOST | −1.00u |
| 2026-10-04 | Alcione Milano – Trento2-2 (1:1) | FT U3.5 | 86% | 1.27 | LOST | −1.00u |
| 2026-10-04 | Alcione Milano – Trento2-2 (1:1) | BTTS: No | 60% | 1.91 | LOST | −1.00u |
| 2026-10-04 | Castellon – Ceuta1-1 (1:0) | Away win | 13% | 9.66 | LOST | −1.00u |
| 2026-10-04 | Las Palmas – Valladolid2-2 (1:2) | FT U2.5 | 60% | 1.78 | LOST | −1.00u |
| 2026-10-04 | Las Palmas – Valladolid2-2 (1:2) | Home win | 54% | 2.27 | LOST | −1.00u |
| 2026-10-04 | Las Palmas – Valladolid2-2 (1:2) | BTTS: No | 58% | 1.97 | LOST | −1.00u |
| 2026-10-04 | Castellon – Ceuta1-1 (1:0) | FT U3.5 | 55% | 1.89 | WON | +0.89u |
| 2026-10-04 | Venlo – Roda2-0 (0:0) | HT U1.5 | 69% | 1.62 | WON | +0.62u |
| 2026-10-04 | Venlo – Roda2-0 (0:0) | FT U2.5 | 52% | 2.40 | WON | +1.40u |
| 2026-10-04 | Venlo – Roda2-0 (0:0) | FT U3.5 | 74% | 1.58 | WON | +0.58u |
| 2026-10-04 | Venlo – Roda2-0 (0:0) | BTTS: No | 47% | 2.56 | WON | +1.56u |
| 2026-10-04 | Guidonia – Pineto1-0 (0:0) | FT U2.5 | 67% | 1.59 | WON | +0.59u |
| 2026-10-04 | Guidonia – Pineto1-0 (0:0) | BTTS: No | 59% | 1.76 | WON | +0.76u |
| 2026-10-04 | Campobasso – Torres1-1 (1:0) | HT U1.5 | 74% | 1.45 | WON | +0.45u |
| 2026-10-04 | Campobasso – Torres1-1 (1:0) | FT U2.5 | 58% | 1.95 | WON | +0.95u |
| 2026-10-04 | Campobasso – Torres1-1 (1:0) | FT U3.5 | 79% | 1.36 | WON | +0.36u |
| 2026-10-04 | Campobasso – Torres1-1 (1:0) | BTTS: No | 52% | 2.13 | LOST | −1.00u |
| 2026-10-04 | Pianese – Ravenna2-1 (1:1) | HT U1.5 | 80% | 1.42 | LOST | −1.00u |
| 2026-10-04 | Pianese – Ravenna2-1 (1:1) | FT U2.5 | 70% | 1.91 | LOST | −1.00u |
| 2026-10-04 | Pianese – Ravenna2-1 (1:1) | FT U3.5 | 87% | 1.33 | WON | +0.33u |
| 2026-10-04 | Pianese – Ravenna2-1 (1:1) | Draw | 33% | 3.59 | LOST | −1.00u |
| 2026-10-04 | Pianese – Ravenna2-1 (1:1) | BTTS: No | 64% | 1.93 | LOST | −1.00u |
| 2026-10-04 | Malmo FF W – Rosengard W1-0 (0:0) | Away win | 19% | 6.07 | LOST | −1.00u |
| 2026-10-04 | Fleury 91 W – PSG W1-3 (0:2) | Home win | 21% | 7.62 | LOST | −1.00u |
| 2026-10-04 | Fleury 91 W – PSG W1-3 (0:2) | Draw | 26% | 4.44 | LOST | −1.00u |
| 2026-10-04 | Malmo FF W – Rosengard W1-0 (0:0) | FT U2.5 | 52% | 2.10 | WON | +1.10u |
| 2026-10-04 | Malmo FF W – Rosengard W1-0 (0:0) | FT U3.5 | 73% | 1.44 | WON | +0.44u |
| 2026-10-04 | Hammarby W – IF Brommapojkarna W2-0 (2:0) | HT O1.5 | 59% | 1.94 | WON | +0.94u |
| 2026-10-04 | Varnsdorf – Liberec B1-1 (1:1) | HT O1.5 | 62% | 1.84 | WON | +0.84u |
| 2026-10-04 | Varnsdorf – Liberec B1-1 (1:1) | FT O2.5 | 79% | 1.30 | LOST | −1.00u |
| 2026-10-04 | Varnsdorf – Liberec B1-1 (1:1) | FT O3.5 | 61% | 1.78 | LOST | −1.00u |
| 2026-10-04 | Varnsdorf – Liberec B1-1 (1:1) | Away win | 37% | 5.77 | LOST | −1.00u |
| 2026-10-04 | Varnsdorf – Liberec B1-1 (1:1) | BTTS: Yes | 77% | 1.43 | WON | +0.43u |
| 2026-10-04 | Real Sociedad B – Granada CF2-3 (2:0) | HT O1.5 | 39% | 2.76 | WON | +1.76u |
| 2026-10-04 | Lecco – Brescia2-2 (1:0) | HT U1.5 | 79% | 1.31 | WON | +0.31u |
| 2026-10-04 | Lecco – Brescia2-2 (1:0) | FT U2.5 | 74% | 1.63 | LOST | −1.00u |
| 2026-10-04 | Lecco – Brescia2-2 (1:0) | FT U3.5 | 89% | 1.21 | LOST | −1.00u |
| 2026-10-04 | Lecco – Brescia2-2 (1:0) | Draw | 34% | 3.26 | WON | +2.26u |
| 2026-10-04 | Lecco – Brescia2-2 (1:0) | BTTS: No | 66% | 1.74 | LOST | −1.00u |
| 2026-10-04 | Djurgarden W – AIK W2-1 (0:1) | Home win | 42% | 3.14 | WON | +2.14u |
| 2026-10-04 | Asteras Tripolis B – Karditsa2-0 (0:0) | FT U2.5 | 72% | 1.50 | WON | +0.50u |
| 2026-10-04 | Asteras Tripolis B – Karditsa2-0 (0:0) | BTTS: No | 65% | 1.72 | WON | +0.72u |
Accuracy — every published probability
all markets, staked or not · 26,429 settled · Brier 0.2287P/L is only reported for staked predictions; everything we publish is judged on calibration — within each probability band, did outcomes land as often as we said they would?
| We said | Avg stated | It happened | n |
|---|---|---|---|
| 0–20% | 15.9% | 20.1% | 1198 |
| 20–40% | 30.0% | 32.4% | 9345 |
| 40–60% | 49.7% | 49.3% | 10239 |
| 60–80% | 68.4% | 64.7% | 5186 |
| 80–100% | 83.5% | 73.1% | 461 |
DC v2 backtest — 2025 / 2025-2026
backtest, not the live recordWhat backing every ≥ 2-pt divergence of our score-distribution model blind (vs average market odds, flat 1-unit stakes) would have returned over the 2025 and 2025-2026 seasons across 10 leagues — average odds are the conservative basis: real execution prices can only be better. Spoiler: they lose — -551.2u over 9,038 predictions — which is precisely why we publish probabilities, not tips. The probabilities are well calibrated through the middle of the range (table below) and the goals markets lose roughly the bookmaker margin; 1X2 divergences lose more — where the model disagrees hardest with the market, the market is usually right. We show it anyway. The live ledger above only ever contains predictions logged before kickoff.
| Predicted | Actual | Samples |
|---|---|---|
| 0%–10% | 8.1% | 234 |
| 10%–20% | 17.7% | 1789 |
| 20%–30% | 27.4% | 6614 |
| 30%–40% | 36.7% | 6212 |
| 40%–50% | 44.3% | 7341 |
| 50%–60% | 55.1% | 6882 |
| 60%–70% | 62.3% | 4857 |
| 70%–80% | 71.8% | 2668 |
| 80%–90% | 77.5% | 657 |
| 90%–100% | 71.4% | 28 |
How this works
- Every published probability is snapshotted before kickoff together with the market odds at that moment. Records are never edited afterwards.
- Settlement is mechanical: flat 1-unit stakes, won = odds − 1, lost = −1, postponed or unresolvable = void (0).
- The probabilities are a statistical baseline built from historical first-goal-time and scoring data — they know nothing the market doesn't. This page exists so you can see exactly what that is and isn't worth.
- Statistics, not betting advice. 18+ · never stake more than you can afford to lose.
