Model release · 2026-05-24

Model 1.0.0 — initial published version

Version 1.0.0currently in production

This is the first versioned release of the onthepitch probability model. Every probability the site publishes — match win / draw / loss, group-finish, stage progression, tournament-winner, score distributions, anytime-scorer — is produced by this model.

What ships at 1.0.0

Per-fixture probabilities come from a calibrated uniform-mean ensemble of three components:

  • Model 1 — FIFA-Elo with Monte Carlo bracket simulation. Two-team Elo differential mapped to expected score, 100-point home-advantage on non-neutral fixtures, fixed 22% draw probability. The bracket is replayed at 50,000 simulations and per-team round-by-round probabilities are aggregated from the simulation outputs.
  • Model 2 — Dixon-Coles with time decay. Per-team attack and defence parameters fit by MLE on roughly 49,000 international results since 1872. Poisson goals with the Dixon-Coles low-score correction (ρ ≈ −0.048). Exponential time-decay weight with a five-year half-life. K-factor weights qualifiers and major-tournament matches above friendlies. Last refit 2026-05-17.
  • Model 3 — Hierarchical Bayesian Poisson. Same likelihood as Model 2 with Gaussian priors on per-team attack and defence parameters; estimated via PyMC NUTS (4 chains, 1000 warmup + 1000 sampling). Convergence gated on max R-hat ≤ 1.01 and min ESS ≥ 400; the fit script raises rather than ships if either gate fails. Last refit 2026-05-23.

The three component models are uniformly averaged per fixture (components that can't predict a given fixture are dropped from the mean), then run through a per-class isotonic calibrator split across three tiers — friendly, qualifier, and tournament (which pools continental finals and the FIFA World Cup itself). Calibrator last refit 2026-05-23.

Per-player anytime-scorer (Model 5) sits on top of the Model 4 composite player rating, with the Model 4b goalkeeper-specific rating and the Model 18 multiplicative starting-GK defence offset applied at predict time.

What does not change in 1.0.0

This release stamps a version on the model that the site has been running and publishing all along. There is no architecture or feature change — the version exists so future retrains, calibrator refits, or component swaps can be tracked against this baseline.

For the full methodology, see /docs/methodology/. For in-tournament calibration metrics (Brier, log-loss, ECE) measured against played matches as the tournament progresses, see /docs/calibration/.

Compliance posture

The model publishes probabilities, expected goals, score distributions, ratings, and calibration metrics. It does not publish edges, +EV, fair odds, model-vs-market comparisons, or any output framed for placing bets. See /terms/ for the full statement.

Components in this release

elo

k_factor:
tournament-tier-keyed (20 friendly, 30 default, 40 qualifier, 50 continental finals, 60 FIFA World Cup)
home_advantage_pts:
100
draw_rate:
0.22
last_refit:
rolled forward on every build from data/raw/intl/results.csv

dixon_coles

window_years:
10
half_life_days:
1825
rho:
-0.0478
home_advantage:
0.249
last_refit:
2026-05-17T14:00:32+00:00

hierarchical_poisson

sampler:
PyMC NUTS, 4 chains, 1000 warmup + 1000 sampling
convergence_gates:
max R-hat <= 1.01, min ESS >= 400
window_years:
10
rho:
-0.0393
home_advantage:
0.255
last_refit:
2026-05-23T02:21:05+00:00

ensemble

weights:
uniform mean over components that produced a prediction
calibrator:
per-class isotonic (pool-adjacent-violators), per-tier (friendly / qualifier / tournament)
monte_carlo_sims:
50000
last_refit:
2026-05-23T01:54:33+00:00

anytime_scorer

base:
Model 4 player composite + Model 4b goalkeeper rating
gk_offset:
Model 18 multiplicative starting-GK defence offset
last_refit:
unknown