World Cup 2026 · Complete — Champions: 🇪🇸 Spain · this edition is now a permanent retrospective

Data Science

Model Lab

The machinery behind the predictions, made playable. Every visual recomputes live in your browser from the real engine — drag a control and watch the math move. No black boxes: a bivariate-Poisson goals model, a Monte Carlo tournament simulator, PCA + k-means on team style, model calibration, and Shapley attribution.

Bivariate-Poisson Score Matrix

The generative model behind every prediction

Each prediction starts here: two goal expectations (λ) feed a bivariate-Poisson distribution over every possible scoreline, with a shared component (λ₃) for the correlation between the two scores. Win/draw/loss, BTTS and over/under are just sums over this grid. Load a real fixture or drag the λ sliders to reshape it.

ESP goals
0
1
2
3
4
5
6
0
7
8
5
1
9
12
8
3
2
6
9
6
3
3
3
4
3
4
5
6
ARG goals →

Match outcome

ESP
X
ARG
ESP win41.7%
Draw26.6%
ARG win31.7%

Most likely scores

  • 1111.9%
  • 109.3%
  • 218.9%
  • 017.9%
  • 127.5%
BTTS
58.4%
Over 2.5
53.3%
Hover a cell for its exact-scoreline probability. Drag the λ sliders to reshape the joint distribution.

Monte Carlo What-If Simulator

Re-run the tournament 3,000 times with a team's strength of your choosing

Override a team’s attack, defense or ELO and the real engine re-simulates the rest of the tournament 3,000 times against the current results — sampling every remaining group game, resolving the bracket, and playing it out. Watch the chosen team’s survival path and the whole title race react.

3,000 runs

🇪🇸 Spain — survival path

Round of 32
0.0%
Round of 16
0.0%
Quarter-final
0.0%
Semi-final
0.0%
Final
0.0%
Champions
0.0%

Title-odds leaderboard

Running the first simulation…

Monte Carlo Convergence

The law of large numbers, watched live

The same bivariate-Poisson model, two ways. We sample random scorelines one batch at a time and tally win/draw/loss — the solid lines are that running estimate, the dashed lines the model’s exact answer. The estimate wobbles wildly at first, then homes in: the error shrinks with 1/√n. This is exactly how the tournament simulator works, just on one match.

025500.0%0.0%0.0%simulations →

Solid = the running Monte Carlo estimate from sampled scorelines; dashed = the exact bivariate-Poisson probability. Watch the estimate converge as n grows — the shaded band is ±2 standard errors (∝ 1/√n).

simulations
0
of 2,500
ESP win0.0% / 41.7%
Draw0.0% / 26.6%
ARG win0.0% / 31.7%
Max error41.7%

Live Win-Probability Timeline

The model re-read minute-by-minute from the event feed

For any played match, the win probability is rebuilt at every minute from the score so far and the goals still expected in the time remaining — so each goal visibly swings it, and a sending-off bends the curve. Pre-match prediction at kickoff, the actual result by full time.

0'45'90'

Win probability rebuilt minute-by-minute from the event feed: the model re-reads the match at each minute from the live score and the goal expectation left in the remaining time (red cards cut a side’s rate). Hover to scrub. ⚽ = goal, pink bar = red card.

minute 98'
FRA 46 ENG
🇫🇷 FRA win0%
Draw0%
🏴󠁧󠁢󠁥󠁮󠁧󠁿 ENG win100%

At kickoff this is the pre-match prediction; by full time it resolves to the result. The jumps are goals — each one swings the model.

Team Embedding — PCA + k-means

48 teams, 8 style dimensions, projected to 2D

Every team is a vector of playing-style metrics. Principal Component Analysis (computed in-browser via a covariance eigendecomposition) collapses that to two axes that capture the most variance, and k-means groups teams into stylistic clusters. Toggle which metrics feed the projection and it recomputes instantly.

PC1 →PC2 ↑BELFRACROBRAURUCOLESPENGJPNMEXGERARGPORMARAUTNORNED
PC1 explains 77% · PC2 10% of variance

Metrics in the projection

Clusters (k)5

Colour by

48 teams reduced from 8 dimensions to 2 via PCA computed in your browser. Toggle metrics or change k and the projection + k-means clusters recompute live.

Feature Relationships & Model Fit

How the metrics move together, and where the goals model misses

Left: the Pearson correlation matrix across the team-style metrics — which qualities travel together (attack and xG) and which trade off. Right: a residual plot of predicted (xG-rate) goals versus what teams actually scored, with the mean absolute error and bias — the honest view of how well the model tracks reality.

Metric correlation matrix · across 48 teams

AttackDefensELO stxGShotsCreatiDefensProgreAttack rating
1.0
0.9
1.0
0.0
0.8
0.8
0.6
0.7
Defense rating
0.9
1.0
1.0
0.0
0.8
0.8
0.6
0.6
ELO strength
1.0
1.0
1.0
0.0
0.8
0.8
0.6
0.6
xG
0.0
0.0
0.0
0.0
0.0
0.0
0.0
0.0
Shots
0.8
0.8
0.8
0.0
1.0
1.0
0.7
0.5
Creativity
0.8
0.8
0.8
0.0
1.0
1.0
0.7
0.6
Defensive actions
0.6
0.6
0.6
0.0
0.7
0.7
1.0
0.5
Progression
0.7
0.6
0.6
0.0
0.5
0.6
0.5
1.0

Pearson r between every pair of team-style metrics (teal = move together, pink = inversely). Computed in-browser.

Model fit · predicted vs actual goals

11223344MEX v RSA (home): predicted 1.50, scored 2MEX v RSA (away): predicted 1.28, scored 0KOR v CZE (home): predicted 1.39, scored 2KOR v CZE (away): predicted 1.40, scored 1CAN v BIH (home): predicted 1.40, scored 1CAN v BIH (away): predicted 1.40, scored 1USA v PAR (home): predicted 1.42, scored 4USA v PAR (away): predicted 1.31, scored 1QAT v SUI (home): predicted 1.18, scored 1QAT v SUI (away): predicted 1.55, scored 1BRA v MAR (home): predicted 1.47, scored 1BRA v MAR (away): predicted 1.29, scored 1HAI v SCO (home): predicted 1.28, scored 0HAI v SCO (away): predicted 1.45, scored 1AUS v TUR (home): predicted 1.31, scored 2AUS v TUR (away): predicted 1.46, scored 0GER v CUR (home): predicted 1.75, scored 7GER v CUR (away): predicted 1.11, scored 1NED v JPN (home): predicted 1.49, scored 2NED v JPN (away): predicted 1.31, scored 2CIV v ECU (home): predicted 1.31, scored 1CIV v ECU (away): predicted 1.40, scored 0SWE v TUN (home): predicted 1.44, scored 5SWE v TUN (away): predicted 1.26, scored 1ESP v CPV (home): predicted 1.71, scored 0ESP v CPV (away): predicted 1.11, scored 0BEL v EGY (home): predicted 1.55, scored 1BEL v EGY (away): predicted 1.28, scored 1KSA v URU (home): predicted 1.16, scored 1KSA v URU (away): predicted 1.57, scored 1IRN v NZL (home): predicted 1.53, scored 2IRN v NZL (away): predicted 1.14, scored 2FRA v SEN (home): predicted 1.56, scored 3FRA v SEN (away): predicted 1.21, scored 1IRQ v NOR (home): predicted 1.30, scored 1IRQ v NOR (away): predicted 1.57, scored 4ARG v ALG (home): predicted 1.62, scored 3ARG v ALG (away): predicted 1.21, scored 0AUT v JOR (home): predicted 1.55, scored 3AUT v JOR (away): predicted 1.21, scored 1POR v CGO (home): predicted 1.65, scored 1POR v CGO (away): predicted 1.21, scored 1ENG v CRO (home): predicted 1.46, scored 4ENG v CRO (away): predicted 1.28, scored 2GHA v PAN (home): predicted 1.42, scored 1GHA v PAN (away): predicted 1.36, scored 0UZB v COL (home): predicted 1.21, scored 1UZB v COL (away): predicted 1.57, scored 3CZE v RSA (home): predicted 1.46, scored 1CZE v RSA (away): predicted 1.30, scored 1SUI v BIH (home): predicted 1.44, scored 4SUI v BIH (away): predicted 1.30, scored 1CAN v QAT (home): predicted 1.51, scored 6CAN v QAT (away): predicted 1.27, scored 0MEX v KOR (home): predicted 1.44, scored 1MEX v KOR (away): predicted 1.37, scored 0USA v AUS (home): predicted 1.44, scored 2USA v AUS (away): predicted 1.31, scored 0SCO v MAR (home): predicted 1.21, scored 0SCO v MAR (away): predicted 1.46, scored 1BRA v HAI (home): predicted 1.77, scored 3BRA v HAI (away): predicted 1.13, scored 0TUR v PAR (home): predicted 1.44, scored 0TUR v PAR (away): predicted 1.31, scored 1NED v SWE (home): predicted 1.51, scored 5NED v SWE (away): predicted 1.27, scored 1GER v CIV (home): predicted 1.65, scored 2GER v CIV (away): predicted 1.22, scored 1ECU v CUR (home): predicted 1.49, scored 0ECU v CUR (away): predicted 1.19, scored 0TUN v JPN (home): predicted 1.24, scored 0TUN v JPN (away): predicted 1.48, scored 4ESP v KSA (home): predicted 1.71, scored 4ESP v KSA (away): predicted 1.09, scored 0BEL v IRN (home): predicted 1.49, scored 0BEL v IRN (away): predicted 1.26, scored 0URU v CPV (home): predicted 1.57, scored 2URU v CPV (away): predicted 1.18, scored 2NZL v EGY (home): predicted 1.18, scored 1NZL v EGY (away): predicted 1.55, scored 3ARG v AUT (home): predicted 1.58, scored 2ARG v AUT (away): predicted 1.21, scored 0FRA v IRQ (home): predicted 1.71, scored 3FRA v IRQ (away): predicted 1.07, scored 0NOR v SEN (home): predicted 1.43, scored 3NOR v SEN (away): predicted 1.46, scored 2JOR v ALG (home): predicted 1.24, scored 1JOR v ALG (away): predicted 1.55, scored 2POR v UZB (home): predicted 1.67, scored 5POR v UZB (away): predicted 1.16, scored 0ENG v GHA (home): predicted 1.69, scored 0ENG v GHA (away): predicted 1.16, scored 0PAN v CRO (home): predicted 1.18, scored 0PAN v CRO (away): predicted 1.57, scored 1COL v CGO (home): predicted 1.55, scored 1COL v CGO (away): predicted 1.26, scored 0SUI v CAN (home): predicted 1.44, scored 2SUI v CAN (away): predicted 1.30, scored 1BIH v QAT (home): predicted 1.51, scored 3BIH v QAT (away): predicted 1.27, scored 1MAR v HAI (home): predicted 1.59, scored 4MAR v HAI (away): predicted 1.16, scored 2SCO v BRA (home): predicted 1.17, scored 0SCO v BRA (away): predicted 1.62, scored 3CZE v MEX (home): predicted 1.35, scored 0CZE v MEX (away): predicted 1.40, scored 3RSA v KOR (home): predicted 1.33, scored 1RSA v KOR (away): predicted 1.48, scored 0ECU v GER (home): predicted 1.21, scored 2ECU v GER (away): predicted 1.52, scored 1CUR v CIV (home): predicted 1.29, scored 0CUR v CIV (away): predicted 1.51, scored 2JPN v SWE (home): predicted 1.42, scored 1JPN v SWE (away): predicted 1.37, scored 1TUN v NED (home): predicted 1.16, scored 1TUN v NED (away): predicted 1.57, scored 3TUR v USA (home): predicted 1.44, scored 3TUR v USA (away): predicted 1.42, scored 2PAR v AUS (home): predicted 1.33, scored 0PAR v AUS (away): predicted 1.31, scored 0SEN v IRQ (home): predicted 1.52, scored 5SEN v IRQ (away): predicted 1.23, scored 0NOR v FRA (home): predicted 1.25, scored 1NOR v FRA (away): predicted 1.64, scored 4URU v ESP (home): predicted 1.28, scored 0URU v ESP (away): predicted 1.47, scored 1CPV v KSA (home): predicted 1.36, scored 0CPV v KSA (away): predicted 1.34, scored 0EGY v IRN (home): predicted 1.35, scored 1EGY v IRN (away): predicted 1.39, scored 1NZL v BEL (home): predicted 1.08, scored 1NZL v BEL (away): predicted 1.71, scored 5CRO v GHA (home): predicted 1.57, scored 2CRO v GHA (away): predicted 1.23, scored 1PAN v ENG (home): predicted 1.11, scored 0PAN v ENG (away): predicted 1.69, scored 2COL v POR (home): predicted 1.34, scored 0COL v POR (away): predicted 1.48, scored 0CGO v UZB (home): predicted 1.42, scored 3CGO v UZB (away): predicted 1.35, scored 1ALG v AUT (home): predicted 1.38, scored 3ALG v AUT (away): predicted 1.42, scored 3JOR v ARG (home): predicted 1.06, scored 1JOR v ARG (away): predicted 1.77, scored 3RSA v CAN (home): predicted 1.35, scored 0RSA v CAN (away): predicted 1.44, scored 1BRA v JPN (home): predicted 1.56, scored 2BRA v JPN (away): predicted 1.29, scored 1GER v PAR (home): predicted 1.57, scored 1GER v PAR (away): predicted 1.19, scored 1NED v MAR (home): predicted 1.41, scored 1NED v MAR (away): predicted 1.31, scored 1CIV v NOR (home): predicted 1.37, scored 1CIV v NOR (away): predicted 1.57, scored 2FRA v SWE (home): predicted 1.60, scored 3FRA v SWE (away): predicted 1.18, scored 0MEX v ECU (home): predicted 1.37, scored 2MEX v ECU (away): predicted 1.31, scored 0ENG v CGO (home): predicted 1.65, scored 2ENG v CGO (away): predicted 1.17, scored 1BEL v SEN (home): predicted 1.45, scored 3BEL v SEN (away): predicted 1.34, scored 2USA v BIH (home): predicted 1.48, scored 2USA v BIH (away): predicted 1.35, scored 0ESP v AUT (home): predicted 1.56, scored 3ESP v AUT (away): predicted 1.23, scored 0POR v CRO (home): predicted 1.46, scored 2POR v CRO (away): predicted 1.32, scored 1SUI v ALG (home): predicted 1.39, scored 2SUI v ALG (away): predicted 1.37, scored 0AUS v EGY (home): predicted 1.35, scored 1AUS v EGY (away): predicted 1.39, scored 1ARG v CPV (home): predicted 1.73, scored 3ARG v CPV (away): predicted 1.09, scored 2COL v GHA (home): predicted 1.59, scored 1COL v GHA (away): predicted 1.24, scored 0CAN v MAR (home): predicted 1.24, scored 0CAN v MAR (away): predicted 1.50, scored 3PAR v FRA (home): predicted 1.10, scored 0PAR v FRA (away): predicted 1.62, scored 1BRA v NOR (home): predicted 1.62, scored 1BRA v NOR (away): predicted 1.33, scored 2MEX v ENG (home): predicted 1.24, scored 2MEX v ENG (away): predicted 1.55, scored 3POR v ESP (home): predicted 1.36, scored 0POR v ESP (away): predicted 1.45, scored 1USA v BEL (home): predicted 1.33, scored 1USA v BEL (away): predicted 1.51, scored 4ARG v EGY (home): predicted 1.66, scored 3ARG v EGY (away): predicted 1.17, scored 2SUI v COL (home): predicted 1.31, scored 0SUI v COL (away): predicted 1.42, scored 0FRA v MAR (home): predicted 1.49, scored 2FRA v MAR (away): predicted 1.21, scored 0ESP v BEL (home): predicted 1.50, scored 2ESP v BEL (away): predicted 1.31, scored 1NOR v ENG (home): predicted 1.31, scored 1NOR v ENG (away): predicted 1.59, scored 2ARG v SUI (home): predicted 1.56, scored 3ARG v SUI (away): predicted 1.18, scored 1FRA v ESP (home): predicted 1.40, scored 0FRA v ESP (away): predicted 1.35, scored 2ENG v ARG (home): predicted 1.34, scored 1ENG v ARG (away): predicted 1.43, scored 2FRA v ENG (home): predicted 1.43, scored 4FRA v ENG (away): predicted 1.32, scored 6ESP v ARG (home): predicted 1.37, scored 1ESP v ARG (away): predicted 1.40, scored 0predicted goals (xG-rate)actual goals
n = 208MAE = 1.02 goalsbias = +0.09 home away

Points above the dashed line scored more than the model expected. Positive bias = teams out-scoring their xG-rate so far.

Calibration Lab

Is the model honest? Predicted probability vs observed frequency

A reliability diagram tests whether stated probabilities mean what they say — of all the times the model said 70%, did it happen ~70% of the time? The Brier score and its Murphy decomposition (reliability − resolution + uncertainty) quantify it against every finished match.

Predicted probabilityObserved frequencypred 27% → observed 19% (n=109)pred 35% → observed 23% (n=62)pred 45% → observed 54% (n=69)pred 54% → observed 77% (n=30)pred 64% → observed 90% (n=10)

Points on the dashed line = perfectly calibrated. Bubble size = sample in that bin.

Brier score
0.198
lower is better
Brier skill
14%
vs coin-flip
Reliability
0.015
calibration error
Resolution
0.051
discrimination

Murphy decomposition: Brier = Reliability − Resolution + Uncertainty. Low reliability means the stated probabilities match reality; high resolution means the model separates likely from unlikely. Hit rate 66% across 104 matches.

Bins10

Outcome class

Prediction Explainer — Shapley values

What drives a single match prediction

Game-theoretic attribution: each input (home advantage, both teams’ attack and defense) gets credit equal to its average marginal effect over every ordering — exact Shapley values. The contributions sum precisely from the neutral baseline to the model’s win probability.

🇪🇸 Spain to beat Argentina
41.7%
from a 36.1% neutral baseline

Each bar is a factor’s exact Shapley contribution to the home-win probability — its average marginal effect over every ordering of the inputs. Green pushes the home win up, red pulls it down. They sum to the model output.

Neutral baseline
36.1%
ESP attack
+6.6
Home-field advantage
+6.2
ARG defense
-6.1
ARG attack
-5.3
ESP defense
+4.2
Model P(home win)
41.7%