How the forecasts work
Every probability on this site comes from running 50,000 simulated versions of the tournament. Here is how those simulations are built, step by step.
Elo ratings
Each team starts with an Elo rating derived from their recent international results. Elo is a single number that summarises a team's strength — a difference of 100 points means the stronger team wins roughly 64% of competitive matches; 300 points means roughly 85%.
After each completed match the two teams exchange Elo points. The size of the exchange is controlled by a K-factor (set to 50 for World Cup 2026) and scales with the surprise of the result — beating a heavy favourite earns far more points than beating an equal opponent.
Host advantage. The host nation gets a 102-point Elo bonus when computing expected results — calibrated on 32,530 historical international matches played at home vs. neutral venues.
| Elo gap | Stronger team wins | Weaker team wins |
|---|---|---|
| 0 pts (equal) | ~50% | ~50% |
| 100 pts | ~64% | ~36% |
| 200 pts | ~76% | ~24% |
| 300 pts | ~85% | ~15% |
| 400 pts | ~91% | ~9% |
Goal probability model
Knowing who is likely to win is not enough — the simulation needs to know the scoreline. For each match we use two XGBoost models (one per team) trained on 32,530 international matches since 1990 to predict each team's expected goals (λ).
The models take three inputs:
- Elo difference — the signed gap between the two teams
- Home advantage — whether a team is playing at home
- Competition type — competitive match vs friendly
With expected goals λ₁ and λ₂, the probability of every exact scoreline (0-0, 1-0, 1-1, …) follows a Poisson distribution. Summing the joint probability grid gives win / draw / loss odds for each team.
The goal heatmap on each game page is this joint Poisson grid — each cell is the probability of that exact scoreline. The actual result is highlighted in green if the game is completed.
Monte Carlo simulation
With win / draw / loss odds for every possible fixture, we simulate the entire tournament 50,000 times. In each simulation:
- Completed matches use their real scorelines. No randomness.
- Remaining group games are sampled — draw a random number, compare against the Poisson probabilities, assign a scoreline.
- Group standings are computed with full FIFA tiebreakers (points → head-to-head → goal difference → goals scored → Elo).
- Knockout rounds are drawn following the bracket. Extra time is modelled as a coin flip at Elo-adjusted odds; penalties are 50/50.
After 50,000 runs the probabilities are the fraction of simulations in which each team reached each stage. A team showing 14% "reach Final" won in exactly 7,000 of those 50,000 simulated tournaments.
Worked example — Brazil vs Norway
Quarter-final, World Cup 2026. Brazil, ranked among the tournament favourites, faced Norway in the last eight. Here is exactly what the model said — and what happened.
Knockout — no draw. Elo difference of 97 pts gives Brazil a clear edge.
Brazil tournament chances
Norway tournament chances
Result
Brazil 1 – 2 Norway
Norway win as underdogs — Elo gap 97 pts, win prob 44%
Brazil
Eliminated — probability instantly drops to zero.
Norway
Through to the semi-final — chances more than doubled.
Norway's tournament win probability rose from 4.1% to 9.6% — more than doubled — by eliminating a team that had been projected as one of the two most likely finalists. This is an upset of a 56% favourite. They happen — and they matter.
View the full game impact page for this match →How probabilities update
Probabilities are recalculated automatically after each completed match. The poller checks live results every 10 minutes (every 2 minutes during a live match window) and triggers a fresh 50,000-simulation run when new results appear.
Elo ratings update after every game. Progression probabilities (R16 / QF / Win etc.) update at round boundaries — after all games in a round are complete — since probabilities within a round shift only slightly game-by-game.
Elo ratings
After every game
Win / advancement %
After each round
Prediction bracket
Real-time in browser