How this works
Every team gets an attack rating and a defense rating from a Poisson goal-scoring model (a scikit-learn PoissonRegressor), fitted on all 964 World Cup matches from 1930 to 2022. The model learns, from history, how many goals a team tends to score against a given opponent's defense — the same family of model used by most public football-prediction projects (Maher, 1982; Dixon-Coles, 1997).
Teams with little or no World Cup history — this year's five debutants, plus a handful of teams with only a few matches on record — can't be rated from history alone. For those, attack and defense are predicted from a linear calibration between FIFA ranking points and the fitted ratings of teams that have both signals, blended in proportionally to how many World Cup matches a team has actually played.
A home-advantage term is fitted the same way, using each historical match's actual host nation — it came out to +17.5% on the goal-scoring rate, and is applied to co-hosts USA, Mexico, and Canada for their 2026 matches.
With every team rated, the 2026 tournament — 12 groups of 4, the top 2 plus the best 8 third-place teams advancing to a 32-team knockout — is simulated end-to-end 50,000 times. Each simulated match draws a goal count for each side from a Poisson distribution at that team's fitted scoring rate; group standings use the standard points → goal difference → goals-for tiebreak; knockout ties go to a simulated penalty shootout, weighted toward (but not decided by) the stronger side. A team's probability of reaching any stage is just the share of those 50,000 runs where it got there.
Live conditioning.Once the tournament kicked off, pre-tournament odds go stale fast — so the app also pulls every match result from FIFA's public API (cached for five minutes via Next.js fetch revalidation). Matches that have been played are locked in as fact, the real knockout bracket replaces the randomized pre-tournament draw, and only the remaining matches are simulated — 20,000 times, server-side, on each refresh. That is the “title odds now” number you see next to the pre-tournament one.
One deliberate simplification in the pre-tournament numbers: the official round-of-32 draw sheet assigns knockout matchups to specific group-position slots (e.g. “runner-up of Group A plays a third-place qualifier”) in a way that depends on which groups the third-place teams actually come from. That document isn't modeled here — instead, the 32 advancing teams are randomly paired into the round of 32 on each simulation. It changes exactly who a team might face in the first knockout round, not how strong the field is overall.
Model last generated 7/4/2026, 11:17:12 AM.
