How to read this dashboard
Most likely champion
Most likely finalist
Dark horse
Mode
Simulations ⓘ
Holdout log-loss ⓘ
Holdout accuracy ⓘ
Top-1 concentration ⓘ
Annex C lookup ⓘ
Tournament storylines
Five quick takeaways derived from the simulation — refresh as the model updates.
Biggest movers
Champion-probability changes versus the pre-tournament baseline. Activates as matches lock during the tournament.
Title contenders
Probability of reaching each stage. Click any row in the top 10 for the full "why this team?" breakdown.
| # | Team | Adv | QF | SF | Final | Champion |
|---|
Tip: Click any column header to sort. Search by team, or filter by group / region. Click a top-10 row to expand the full breakdown. · Confederation dots: UEFA CONMEBOL CAF CONCACAF AFC OFC.
Group stage projections
Full FIFA 2026 tiebreaker cascade per simulation: pts → GD → GF → H2H pts → H2H GD → H2H GF → fair-play (approximated as zero) → FIFA ranking. Top 2 + 8 best 3rd-placers advance.
Most interesting matches
Auto-curated picks from the upcoming fixtures — group stage through the final. Click a card to jump to the full match panel.
Match predictions
Goal-model expected scorelines for every fixture — group stage and knockouts. Bars = 90-minute W/D/L probabilities. λ = expected goals per side.
Compare two teams
Pick any two of the 48 teams to put their probabilities, Elo, squad value, and travel side-by-side.
Title probability — top 20
Title by confederation
Travel impact — geography in 2026
The tournament spans 16 cities across 3 countries — some teams travel 4,500+ km between group matches. We apply a per-km Elo penalty and compare to a no-travel baseline.
Teams travelling most (group stage)
Champion-prob impact (travel on vs off)
Calibration — does the model mean what it says?
Predicted 70% home win should match ~70% actual frequency. Dots near the diagonal = trustworthy probabilities. Test set: 4,839 unseen historical matches.
Robustness — backtests and ablation
How well would this model have predicted the past 4 World Cups, using only data available before each one?
Walk-forward backtest
| WC | Matches | Log-loss | Acc | Lift |
|---|
Feature ablation
| Configuration | Log-loss | Acc |
|---|
What's powering the prediction
1. Match history
49,000+ international matches since 1872 — every friendly, qualifier and tournament.
2. Elo ratings
Chess-style rating updated after every match. Tournaments weight more than friendlies.
3. Time-decayed form
180-day exponential half-life — recent matches matter much more than old ones.
4. Squad value prior
Transfermarkt aggregate (€20M – €1.5B). Captures young-talent surges Elo hasn't caught up with.
5. Venue effects
Altitude (Mexico City: 2,240m), climate (Houston/Miami heat), per-venue host-country boost.
6. Travel fatigue
Pre-computed 16×16 Haversine matrix. Per-km Elo penalty between consecutive group matches.
7. Goal model
Negative Binomial goal model with Dixon-Coles low-score correction.
8. FIFA bracket
Official Round of 32 → final structure. Annex C 495-row third-place lookup.
9. Monte Carlo
5 independent seeds × 5,000 sims with extra time and penalties. Cross-seed p05/p95 reported as a simulation range (sampling noise from independent rollouts), not a parameter confidence interval.
Feature importance — home goals model
Matchday intelligence
Live adjustment layers stacked on top of the static Elo + squad-value baseline.
Every component is capped — see the cap row below — and the full per-tick audit log
is appended to data/live/matchday_intelligence_log.jsonl so any
probability move can be traced back to the source row that triggered it.
How live updates work
FT / AET / PEN only), locks their scorelines, re-runs the
full Monte Carlo simulator, and commits the new JSON. The dashboard picks it up on the next page load — no manual refresh needed.
API_FOOTBALL_KEY is configured in CI secrets) and Sportmonks. Without a key the orchestrator falls back to manual / mock mode —
scorelines are edited in data/live/results_2026.json and pushed.
team_adjustments.json still
stacks on top for operator-curated tier-1 calls), lineups poll /fixtures/lineups in the kickoff window, weather pulls Open-Meteo
(16-day forecast → static climate fallback past the horizon), and post-match stats come from /fixtures/statistics. Every layer is
capped, every adjustment is logged. See the Matchday Intelligence section above for the live state.
Open data
Everything on this page is loaded from the JSON files below. Download, audit, or wire into your own tools.