Working…

How the Simulation Works

1. Elo ratings

Every team starts the tournament with an Elo rating β€” a single number summarizing its overall strength, in the same style used for chess and international football rankings. Higher Elo means a team is expected to win more often and by larger margins against weaker opposition.

The ratings used here are seeded once from each team's recent international form / FIFA ranking and stored in data/wc2026.json. They do not change during the simulation β€” every simulated tournament starts from the same starting strengths.

2. From Elo to expected goals

For a match between team A and team B, the Elo difference Δ = (elo_A - elo_B) / 400 is converted into each team's expected goals (λ) for that match, using:

λ_A = μ × e^(+Δ/2)
λ_B = μ × e^(-Δ/2)

where μ = 1.3 is the average number of goals a World Cup team scores per match. This keeps the *combined* goal-scoring rate realistic while shifting it in favour of the stronger team β€” a 400-point Elo gap (e.g. 2090 vs 1690) makes the stronger side roughly e ≈ 2.7× more likely to score per attack-minute than the weaker side.

3. Simulating a scoreline

Each team's goals are then drawn independently from a Poisson distribution with that team's λ:

goals_A ~ Poisson(λ_A)
goals_B ~ Poisson(λ_B)

This is the standard statistical model for "number of events in a fixed time period" and produces realistic-looking football scorelines (mostly 0-3 goals per side, occasional high-scoring games).

4. Group stage

For every simulated tournament, all 6 matches in each group are played out using the model above. Points (3 for a win, 1 for a draw), goal difference and goals scored determine the final ranking of the 4 teams in the group, exactly as in the real competition's tiebreaker rules (simplified β€” head-to-head and fair-play tiebreakers beyond goal difference/goals scored are not modelled).

The 2 group winners advance automatically, plus the 8 best 3rd-placed teams across all 12 groups (ranked by points, then goal difference, then goals scored), determined using the official FIFA "Annex C" lookup table that maps which combination of groups' 3rd-place teams qualify to a specific Round-of-32 bracket slot.

5. Knockout stage

Knockout matches (Round of 32 through the Final) cannot end in a draw. The same Poisson goal model is used for 90 minutes; if the score is level, the match is decided by a simulated penalty shootout where the win probability is a much weaker function of the Elo difference (a small Elo edge matters far less in a penalty shootout than over 90 minutes).

Winners advance through the real FIFA 2026 bracket structure (matches 73-103) until a champion is produced.

6. Monte Carlo aggregation

Steps 4-5 are repeated tens of thousands of times (the "number of simulations" you choose on the Simulations page). The probabilities shown throughout the app β€” to advance from the group, reach the Round of 16 / Quarter-final / Semi-final / Final, or win the whole tournament β€” are simply the fraction of simulated tournaments in which each outcome occurred for each team.

7. Guaranteed vs. near-certain qualification

A simulated 100% is not the same as a mathematical certainty β€” a scenario that simply never came up in the samples still shows as 100%. So the app draws a deliberate distinction:

  • Q βœ“ means a team has mathematically clinched a top-two place: there is no combination of remaining group results β€” under the official FIFA 2026 tiebreakers (points, then head-to-head, then goal difference and goals scored) β€” in which they miss out. This is computed exactly, not sampled.
  • Q >99.9% means a team is near-certain in the simulations but could still, in principle, be caught.

Reaching the knockouts as one of the eight best third-placed teams depends on the other groups, so it can never be shown as a mathematical βœ“ β€” only as a probability.

Already-played matches (entered on the Simulations / Settings pages as "actuals") are locked to their real result in every simulated tournament, so probabilities update to reflect what has actually happened so far.