What the data says about who wins, and how confident to be.
A team-strength model rated, backtested against real results, simulated forward 50,000 times, checked against the market, and stress-tested against an obvious economic story that turns out to be mostly wrong.
Every stage here exists to answer one question: can the previous stage be trusted before building on top of it.
Building this honestly meant checking the model's own work, twice, and reporting what was actually wrong rather than only showing the parts that worked.
Validating the rating engine line by line against the published academic worked example surfaced a real bug. Home advantage points were being permanently added to a team's rating instead of only shaping that match's win expectation, quietly inflating every rating into the thousands across 150 years of matches. Fixed and re-verified before any result downstream was trusted.
A second issue: rating deviation (RD), the entire reason for moving from Elo to Glicko-2, was computed and displayed but never actually used in the win/draw/loss output. Fixed so RD genuinely pulls a prediction toward a more humble split when a matchup is poorly tested.
Each bar is a single team's probability mass thinning out, round by round, from Round of 32 through to lifting the trophy.
Pull two of the 48 World Cup squads and the model breaks down the win, draw, and loss probability between them, using each team's actual rating gap and recent results as evidence, not a generic template. As Round of 32 and later results come in, this same reasoning re-grounds itself in the latest result for any team that's already played its next match, and flags any team that's been eliminated.
Every group-stage prediction bucketed by stated confidence, plotted against what actually happened. The diagonal is perfect calibration, and a model is in trouble if its dots drift far from it.
Sample sizes are small per bucket (8 to 18 matches), so read this as a direction of travel check, not a verdict.
Sportsbook odds and prediction-market pricing, both dated to the close of the group stage. The ranking agrees almost everywhere; the size of the numbers doesn't always.
Part of this is a measurement artifact, not a modelling miss. The public sportsbook board only lists its handful of most traded favorites, and those alone already summed to 86% of total probability, meaning the other roughly 26 teams are implicitly compressed into the leftover 14%. That said, France specifically is rated about half of what two independent real-money sources suggest, and the gap is real rather than just a listing artifact. Tracing France's actual results shows a Nations League loss to Spain, a draw with Iceland in World Cup qualifying, and a friendly loss to Ivory Coast. The friendly is discounted in this model (0.8x weight versus full weight for competitive matches), but as the bigger surprise of the three results, it still cost France more rating than either competitive loss. The model is rating France on results alone; the market may be pricing in squad talent and tactical judgment that a results-only system has no way to see. Rank agreement is the more reliable signal here: both sources name the same six favorites, in nearly the same order.
GDP per capita (PPP, World Bank) plotted against each team's current rating. A weak relationship exists, until you separate it by confederation.
Look at the chart and the eye is drawn to Qatar, sitting alone in the far top right: the richest country in the entire field by a wide margin, and yet one of the worst-rated teams here. The overall correlation is real but thin (r=0.29, about 8% of variance explained), and it nearly vanishes once confederation is held constant. CONMEBOL is the clearest evidence against the "money buys success" story, with the highest average rating of any confederation sitting on by far the lowest average GDP per capita. What looked like a wealth effect is mostly a UEFA effect: Europe is both rich and historically strong at football, and the two get conflated unless you separate them.