Model accuracy

Every prediction this model publishes is written to a log before kick-off and never touched again. This page scores all of them against what actually happened. So far 2477 predictions have been made before kick-off and have a final result.

The model called the correct result — home win, draw or away win — in 1168 of them, 47.2%, and named the exact scoreline 234 times, 9.4%.

Its Brier score over the three outcomes is 0.635 (lower is better). For scale, a model that learned nothing and gave every match an even 33.3% across the three results would score 0.667. The model is ahead of that baseline.

Predictions logged between 19 July 2026 and 17 September 2026.

Two honest limits. This is a young sample, so every figure here will move; and the hit rate on its own flatters any model that simply backs the favourite, which is why the calibration table below matters more than the headline.

Is the model well calibrated?

Accuracy on its own is a weak test: back the favourite every time and any football model lands near the same hit rate. The harder question is whether the numbers mean what they say — when the model gives an outcome a 60% chance, does it happen about 60 times in 100? Each match contributes three forecasts (home, draw, away), so the 2477 settled matches give 7431 probability-and-outcome pairs.

0 100 100 0
Each dot is one band: what the model said across the horizontal, what happened up the vertical, the dot sized by how many forecasts it rests on. The straight line is a model that means exactly what it says. Dots below it are overconfidence — the outcome came up less often than the number claimed.
Model saidForecastsAverage probabilityActually happened
0–10%1386.5%17.4%
10–20%67315.7%22.7%
20–30%283025.5%25.4%
30–40%176433.7%33.4%
40–50%111643.8%44.4%
50–65%63455.7%52.4%
65–100%27674.5%60.1%

Read it row by row: the closer the last two columns are, the more literally the percentages on this site can be taken.

Where the model does best

Across the 41 competitions with at least 25 settled predictions, the model has called the right result most often in HNL (Croatia) 73.5%, Bundesliga (Austria) 63.9%, Serie A (Italy) 62.5%. One row is one competition in one country, so two leagues sharing a name are counted apart — pooled on the name alone, "Super League" mixed China with Switzerland and printed a figure for a competition that does not exist.

A hit rate is not comparable between competitions on its own. A league of one-sided fixtures is easier to call than a level one, so a high figure there is partly a fact about the league. The full table carries a second column that is about us instead — how much of the available ground the model gained on a forecast that knew nothing and gave every match an even split.

The model during the match

From kick-off, every match page re-prices the three outcomes as the game goes on — the same model, asked how many goals are left rather than how many there will be. This is that version scored, over 1346 finished matches sampled every 5 minutes: 25574 in-play forecasts, 76722 probability/outcome pairs.

These were not logged as they happened — they are replayed, and that is worth explaining. The in-play figure is computed in your browser while you watch, so there is no honest way to record it at the time. It does not need to be recorded, because it is a function of four things that all survive the match: the expected goals frozen before kick-off (already in the log above), the minute, the score at that minute, and the sendings-off by then. Replaying a match feeds the model exactly what it would have known at each point and nothing else — a goal in the 60th minute is invisible to the forecast made at the 60th. Anyone with the two published files can reproduce every number in this table.

The comparison that matters is not against a coin flip — knowing the score beats a coin flip on its own. It is against simply holding the pre-match number for the whole match, which is what this site published before. In-play scores 0.458 on Brier against 0.621 for holding the pre-match figure.

MinuteForecastsBrierWhen it says 65%+
0–15 min40380.60771.5% → 81.2%
15–30 min40380.56774.4% → 82.8%
30–45 min40380.52277.1% → 84.8%
45–60 min40380.46680.1% → 84.1%
60–75 min40380.38883.8% → 85.8%
75–90 min53840.26290.3% → 85.7%

The last column is the one to read sceptically, and it is not flattering at both ends: early in a match the model carries the same overconfidence the pre-match table shows, and in the closing stretch it is confident more often than it is right. Brier falls through the table because a model that knows the score in the 80th minute should be better than one that does not — that column measures the clock as much as the model.

The last 15 settled predictions

DateMatchPredictedResultVerdict
17 September 2026FC Orenburg v FC Krasnodar1-00-0✗ Wrong
16 September 2026AIK Stockholm v Mjallby AIF3-01-1✗ Wrong
16 September 2026Puebla v Toluca1-00-1✗ Wrong
16 September 2026Lokomotiv Sofia v CSKA Sofia1-20-2✓ Correct result
16 September 2026FC Lugano v FC St. Gallen2-14-1✓ Correct result
16 September 2026FC Thun v Servette FC1-02-4✗ Wrong
16 September 2026Baltika v Zenit2-12-3✗ Wrong
16 September 2026Lokomotiv v Krylia Sovetov2-11-1✗ Wrong
16 September 2026Rodina Moskva v Rubin0-11-1✗ Wrong
16 September 2026Spartak Moscow v Fakel1-01-0★ Exact scoreline
16 September 2026Atletico Madrid v Osasuna2-14-0✓ Correct result
16 September 2026Barcelona v Racing Santander2-17-2✓ Correct result
16 September 2026Deportivo La Coruna v Sevilla2-10-1✗ Wrong
16 September 2026El Gouna FC v Petrojet2-11-2✗ Wrong
16 September 2026Ghazl El Mehalla v Zamalek SC1-20-1✓ Correct result

How the predictions are made

A Poisson / Dixon-Coles model built on each team's rolling attack and defence strength, estimated from recent expected-goals data and adjusted for the strength of the opposition and of the league. There are no bookmaker odds anywhere in it. The full method is on the About & Methodology page.