Most football forecasts start with the team: how good is Brazil, how good is Croatia. This one starts a level lower — with the twenty-six players each country brings — and rebuilds the team's strength from whoever is actually on the pitch. The logic is simple: international squads turn over constantly, and a side is only as strong as the eleven names on the team sheet, so a player is a steadier unit of measurement than a flag.
From there it is four steps — rate every player, roll the starters up into one team number, turn two team numbers into a distribution of plausible scorelines, then play the whole tournament out ten thousand times to see how often each path ends with the trophy. The rest of this page walks through each step in plain terms; a glossary at the bottom defines the statistical words as they come up.
The base signal is a player's transfer-market value — the price the football market puts on him. It sounds crude, but a decade of research (and our own testing) keeps landing on the same result: the wisdom-of-the-crowd baked into market prices is very hard to beat for predicting results. Thousands of clubs, scouts and bidders price a player more accurately than most hand-built rating systems can.
Two corrections sit on top. First, age: the market prices resale value, so it over-discounts a 33-year-old who is still excellent now and over-prices a teenager who might be excellent later. A position-specific age curve pulls the number back toward present-day ability. Second, a small recent-form adjustment from club expected-goals and defensive numbers — capped at 15% of the rating, because form is noisy and the market has usually priced it in already.
Everything is then expressed as a z-score within position, so a goalkeeper and a striker sit on the same scale.
Q = 0.85 · prior + 0.15 · formprior = market value (logged, z-scored) + age correctionNot everyone contributes equally. The model estimates expected minutes for each player — better players are likelier to start and finish — and takes a minutes-weighted roll-up of the squad into separate offensive and defensive ratings. Those are mapped onto the Elo scale, the same points system used to rank national teams, so a squad built from market values becomes directly comparable to a team's results-based rating.
The last move is a 50/50 blend: half the rating comes from the players, half from the team's actual Elo — its track record of results. Why both? Market value is excellent for European sides but undersells some South-American and results-driven teams whose players are cheaper than their results deserve. Blending hedges "who's on paper" against "what they've actually done," and it was the single biggest accuracy gain in testing.
rating = 0.5 · player value + 0.5 · actual Eloplayer value = squad rolled up and calibrated to EloA match is mostly a count of rare events — goals — and the natural tool for counts is the Poisson distribution: give it an expected number of goals (called λ, lambda) and it returns the chance of 0, 1, 2, 3 … goals. Each team's λ comes from a small regression fit on 898 World Cup qualifiers, where expected goals depend on just two things: home advantage, and the Elo gap between the sides. Bigger favourite → higher λ → more goals expected.
Multiply the two teams' goal distributions together and you get a grid of every scoreline and its probability — which collapses into win / draw / loss and an expected score. One real-world wrinkle: independent Poisson slightly under-counts 0-0s and 1-1s, because level teams play it safe. The Dixon–Coles correction nudges those low draws up to match reality. This grid is exactly the score matrix you can expand on the Matches page.
λ = exp( b0 + home + b_diff · ΔElo / 100 )ΔElo = home Elo − away Elo; home applies only to a host on home soilKnowing each match as a probability is not the same as knowing who lifts the trophy — you have to chain 104 matches through a group stage and a knockout bracket, where every result reshuffles who meets whom next.
So the model runs a Monte Carlo simulation: it plays the entire tournament from first whistle to final 10,000 times, each match resolved by a random draw from its score distribution, with extra time and penalties included. Shootouts are treated as a coin flip — the evidence says they essentially are. Counting how often each team reaches each round gives the percentages on the Tournament page.
The regression above is fit on qualifiers — but a World Cup is not a qualifier. A point-in-time backtest of recent major tournaments surfaced two systematic gaps, and each is corrected with a single dial:
Host advantage is smaller than an ordinary home game. A qualifier home side gets a large boost; a World Cup host gets about half of it. The co-hosts USA, Mexico and Canada still get a real edge — roughly +5 percentage points on home soil, not the +11 a naïve home bump would hand them.
World Cups score more. Recent World Cups average about 2.7 goals a game; the qualifier-fit model expected nearer 2.3. A small lift to the goal level closes the gap — and, helpfully, also improved who-wins accuracy, because World Cup games score more and draw less than qualifiers.
Everything above assumes expected lineups. About an hour before kickoff the real elevens are published — and a model built on players can use them directly. An automated agent reads the confirmed lineups from ESPN, re-rates both teams with the actual starters, and republishes the prediction.
The swings are real. In the USA–Paraguay group game the USA rotated into a weaker back line while Paraguay named their strongest attack; the forecast moved roughly eight percentage points toward Paraguay between the provisional and confirmed lineups. A team-level model could not see that coming.
The whole system is hand-built and runs unattended: the statistical models (Python and R), the agent that ingests lineups and scores, the publish step, and this TypeScript dashboard — the same data-modelling, pipeline and visualisation work that sits behind any production analytics system.
A model is only as honest as its out-of-sample test. We rebuilt the entire pipeline exactly as it would have stood before each of five recent major tournaments — point-in-time squads, market values and Elo, with no knowledge of what happened next — and scored its match forecasts.
≋ Scale starts at 0.96, not 0 · shorter is better. Log-loss scores a probability forecast: lower means more confidence placed on what actually happened (a coin flip scores ≈1.10; perfect foresight scores 0). The model edges raw team-Elo and clears a coin flip comfortably — but the margin over Elo is modest, and we report it that way on purpose.
Then the 2026 World Cup happened — the one test nothing could leak into. Over the 100 matches with captured betting odds, both the model and the market beat the naive baselines by a distance; the market finished ahead of the model by a real but narrow margin (p ≈ 0.06). Put on the coin-flip scale: the market recovered about 22% of the distance from a random forecast toward perfect foresight, the model about 19% — two informed forecasters in the same league, well clear of chance.
≋Scale starts at 0.80 · WC26 final scores, mean hard log-loss, n = 100 · "base rates" = the season's own home/draw/away frequencies applied to every match. The split matters: the market's whole edge came from the 68 group games (0.834 vs 0.887) — in the 32 knockout matches the model was flat-out even with it (0.894 vs 0.896). The full breakdown is in the tournament review.
The three model-specific terms — expected goals, xWDL and player quality — get a worked visual on the glossary page.
Built by Isaac Kaczor. The model, the matchday agent and this dashboard are independent hobby work — not affiliated with FIFA or any betting operator. Forecasts are for interest and discussion only.