In one sentence
Dixon-Coles is a Poisson goals model that rates each team's attack and defence, adjusts the four lowest scorelines, and down-weights older matches.
How it works
Mark Dixon and Stuart Coles published the model in 1997, aiming it squarely at beating football betting markets. It starts from the standard setup: each team has an attack rating and a defence rating, plus a home advantage, and those combine to give each side's expected goals.
They then noticed that plain Poisson gets 0-0, 1-0, 0-1 and 1-1 wrong: real matches finish 0-0 and 1-1 more often than predicted. So the model multiplies just those four scorelines by a correction factor controlled by one parameter, ρ (rho). Every other score is left alone, and the corrections are built so the probabilities still add up to 100%.
The second idea is time decay. A result from last month tells you more about a team than one from two seasons ago, so each past match is weighted by how long ago it happened.
The maths
- λ and μ are home and away expected goals.
- α is a team's attack strength, β its defensive weakness, γ the home advantage.
- τ is the correction, equal to 1 for every score other than the four listed.
- ρ controls the correction; a negative ρ adds 0-0 and 1-1 and removes 1-0 and 0-1.
- Time decay multiplies each match's contribution by e raised to (−ξ × days ago), where ξ sets how fast old results fade.
In words: start with Poisson, tweak the low scores, and trust recent form more.
Worked betting example
Match Odds and Correct Score, illustrative inputs. Home expected goals λ = 1.3, away μ = 1.0, and ρ = −0.1.
- Independent Poisson: P(0-0) 10.03%, P(1-1) 13.03%, P(1-0) 13.03%, P(0-1) 10.03%.
- Corrections: 0-0 × 1.13, 0-1 × 0.87, 1-0 × 0.90, 1-1 × 1.10.
- Adjusted: P(0-0) 11.33%, P(1-1) 14.34%, P(1-0) 11.73%, P(0-1) 8.72%. The full grid still sums to 100%.
- P(draw) rises from 27.96% to 30.57%. Fair draw odds fall from 3.58 to 3.27.
- The exchange shows 3.40 on the draw. Backing £10 under plain Poisson: 0.2796 × £24 − 0.7204 × £10 ≈ −£0.49. Under Dixon-Coles: 0.3057 × £24 − 0.6943 × £10 ≈ +£0.39, which shrinks to about +£0.25 after 2% commission.
The correction flips the verdict, but the edge after commission is only about 2.5% of stake. That is typical.
Where it's good
- Match odds, draw, correct score and low totals (under 1.5, under 2.5) in football.
- Lower leagues where the market is less sharp and data is still plentiful.
- A well-understood baseline to benchmark fancier models against.
- Updating ratings weekly with the time decay doing the forgetting for you.
Limitations and pitfalls
- Published in 1997 and now widely copied. The major Betfair football markets already price in what it knows.
- Results-based ratings react slowly to injuries, transfers and manager changes. Expected goals inputs help.
- ρ is one number for the whole league; the true low-score effect may differ by team style.
- The decay rate ξ is chosen by trial and error, which invites overfitting to your backtest.
- Promoted teams and the start of a season are weak spots: little relevant data, big uncertainty.
- It ignores in-match dynamics such as red cards and game state.
How to build it
- Python: penaltyblog has a ready Dixon-Coles implementation; or write the likelihood and optimise with scipy.optimize.
- Data: results with dates for two or more seasons; expected goals improves ratings.
- Tip: choose ξ by walk-forward testing on log loss, never by in-sample fit.
Related methods
- Poisson: the core engine.
- Bivariate Poisson: a different way to handle correlated scores.
- Expected goals: better inputs than raw goals.
- Model vs market: the test any Dixon-Coles build must pass.