We use privacy-friendly analytics to understand traffic. With your consent we also load Google Analytics. No analytics cookies are set until you accept. See our privacy policy.
What the rolling-strength model forecast before each kickoff — win/draw/loss probability and expected score — graded against what actually happened. Out-of-sample (the model never saw the result). What do these mean?
The model's forecast for the upcoming fixtures — make your own picks before kickoff and see how you stack up.
Model probabilities are this site's own forecast. Picks lock at kickoff and are graded from the final result — no stakes, just bragging rights.
Every call the model made this season, graded against the result — and, more importantly, whether its probabilities held up.
Accuracy is the wrong lens for a three-way outcome: draws are rarely any side's single most-likely result, so ~25% of games are "wrong" by design. What matters is whether a stated 60% really happens ~60% of the time — that's calibration, and it's the number that actually matters.
Over 380 matches, the model lands within 94.9% of the consensus forecast's accuracy. The consensus wins narrowly — as expected, since it aggregates all available information. Source: football-data.co.uk (closing: Pinnacle/Bet365). Analysis only.
The market strongly favored Atalanta (58% away), while the model gave Verona the edge (43% home), likely reflecting information the market priced in beyond a public-data model's reach. Verona won 3-1 despite being outshot on xG (0.99 vs 1.61), vindicating the model's higher home probability even as the scoreline outran the underlying chances.
The market strongly favored Inter (68% away) while the model gave Torino a better chance (31% home), likely because the model weighed recent xG more heavily whereas the market may have priced in information a public-data model cannot capture. The result showed a 2-2 draw with Torino outperforming on xG (2.51 vs 1.47) across a game with late goals, validating the model's more balanced view.
The model gave Juventus only 41% versus the market's 68%, likely underweighting factors a public-data model cannot capture, and the result favored the market as Juventus controlled play (2.4 xG to 0.6) before scoring at the 59th and 84th minutes for a comfortable 2-0.
The model rated the match nearly even at 37% for Juventus, while the market strongly favored the hosts at 66%, likely pricing in information a public-data model cannot capture. The result validated the market, as Juventus dominated by xG (3.21 vs 0.54) and won 3-1.
"closer" = the side that gave the actual result the higher probability. Pick badges: H/D/A = home / draw / away. One-line reads are AI-written strictly from each match's data (xG, red cards, goals, score) — no outside news.