Knockout & Tournament Modelling¶
Overview¶
A Poisson model produces 90-minute scoreline probabilities. That is exactly what the main betting market (1X2, "full-time result") prices — including in knockout matches, where the draw is a real 1X2 outcome even though someone must advance. Once the model is asked about advancement, outright winners, or group standings, three new layers appear: extra time, penalty shootouts, and tournament structure.
1X2 vs to-qualify¶
Two distinct markets, two distinct quantities:
- 1X2 — result after 90 minutes. Use the scoreline matrix directly; no change from group-stage logic.
- To qualify / to advance — P(advance) = P(win in 90) + P(draw in 90) × P(win ET+pens | draw)
Mixing these up is a classic settlement error: a team that wins on penalties did not win the 1X2 market.
Extra time and penalties¶
Extra time is 30 minutes at a lower per-minute scoring rate than regulation (fatigue, caution — empirically roughly 10–20% below regulation rate). A serviceable model: rerun the Poisson with λ_ET ≈ λ_90 × (30/90) × 0.85 for each team, conditioned on the match being level. From the ET scoreline matrix, the diagonal goes to penalties.
Penalty shootouts are close to a coin flip. Empirical studies find no robust team-strength effect and only weak order effects. Default P(win pens) = 0.5; refinements (shootout records, goalkeeper quality) are v3 territory at best.
Putting it together for evenly matched teams: if P(draw in 90) ≈ 0.28, then P(advance) ≈ P(win90) + 0.28 × (P(win ET) + P(ET draw) × 0.5). With symmetric teams this collapses to 0.5 each, as it must.
World Cup 2026 format¶
First edition with 48 teams: 12 groups of 4, then a 32-team knockout (top two per group + the 8 best third-placed teams). 104 matches total. Modelling consequences:
- Best-thirds rule couples the groups — whether a third-placed team advances depends on other groups, so advancement probabilities require simulating all groups jointly, not one group at a time
- Tie-breakers within groups: points → goal difference → goals scored → head-to-head → fair play → drawing of lots; the simulator must implement these to get standings right
- Dead rubbers and rotation: a team already qualified often rotates in match 3 — a real effect the base model won't capture; at minimum flag such matches in EV reports rather than trusting the model edge
- Bracket asymmetry: knockout paths differ greatly in difficulty; outright-winner probabilities are path-dependent and only obtainable by simulation
Monte Carlo tournament simulation¶
The standard architecture on top of any per-match model:
import numpy as np
def simulate_tournament(model, fixtures, n_sims=20_000, rng=None):
"""fixtures: remaining schedule + bracket logic. model.match_probs(a, b, neutral) -> (pW, pD, pL).
Returns advancement / winner frequencies per team."""
rng = rng or np.random.default_rng()
counters = {}
for _ in range(n_sims):
# 1. simulate remaining group matches by sampling scorelines
# (sample from the Poisson scoreline matrix, not just W/D/L,
# because tie-breakers need goal difference and goals scored)
# 2. compute group tables incl. tie-breakers; rank third-placed teams
# 3. fill the round-of-32 bracket per the official slotting rules
# 4. simulate knockouts: 90-min matrix; if level, ET matrix; if level, coin flip
# 5. tally: group winner, advance, reach QF/SF/F, champion
...
return counters
Key disciplines: sample scorelines, not outcomes (tie-breakers need goals); freeze the model parameters at simulation time (no peeking); and use enough sims that the probabilities you bet on have Monte Carlo error well below your edge (20k sims gives ~±0.3pp at p=0.5).
This also gives the tournament-level markets for free: group winner, to reach the quarter-final, outright winner — all of which can be compared against bookmaker futures and Polymarket prices for expected-value-ev screening.
Pitfalls¶
- Settling to-qualify logic against 1X2 odds — bookmaker knockout 1X2 prices include the draw; don't "correct" the model's draw away
- Reusing 90-minute λ for extra time unscaled — overstates ET goals and understates shootouts
- Ignoring group coupling via best-thirds — per-group simulation silently miscalculates advancement in 2026's format
- Static strengths across a 5-week tournament — injuries, suspensions, and form shifts accumulate; refresh inputs between rounds
- Trusting model edge in dead rubbers — rotation breaks the team-strength assumption; filter or down-weight these in value-bet output
See Also¶
- poisson-distribution — supplies the scoreline matrices being sampled
- fitting-poisson-mle — where the per-match probabilities come from
- international-football-modelling — neutral venues and data issues upstream of this
- expected-value-ev — applying simulated probabilities to futures markets