Skip to content

Explore WCWins

Track 4 · Professional Research Lab · Lesson 19 of 24

Reproduce a Dixon–Coles case study

Rebuild the Dixon–Coles workflow step by step — team strengths, the low-score τ correction, time-decay weighting and a chronological backtest — then compare its probabilities with a de-vigged hypothetical market.

Learning objectives

  • Write down the Dixon–Coles likelihood components: attack, defence, home advantage, τ and time weights.
  • Compute a score matrix and 1X2/BTTS/Over 2.5 probabilities for given λ, μ and ρ, with and without the τ correction.
  • Design a rolling, point-in-time backtest that never uses future matches or post-kickoff prices.
  • Separate what the 1997 evaluation showed from what it cannot show about today's markets.
  • List at least five failure modes to check before trusting a reproduced result.

What the original study did, in outline

Dixon and Coles built on the team-strength Poisson idea of Maher (1982): each side's goals follow a Poisson distribution whose rate depends on its own attacking strength, the opponent's defensive weakness and, for the home side, a home-advantage factor. They added two refinements that matter for reproduction: a small correction to the probabilities of the four lowest scores, and a weighting scheme that lets recent matches count more than old ones Dixon & Coles (1997).

λ = α_home × β_away × γ μ = α_away × β_home
Expected goals for the home side (λ) and away side (μ). α is attack strength, β defensive weakness, γ home advantage. One constraint (for example, average α = 1) is needed so the parameters are identifiable.
P(x, y) = τ(x, y) × Pois(x; λ) × Pois(y; μ)
τ = 1 − λμρ for 0-0, 1 + λρ for 0-1, 1 + μρ for 1-0, 1 − ρ for 1-1, and 1 for every other score.
ℓ = Σ_matches φ(t) × ln P(x, y) with φ(t) = exp(−ξ t)
Weighted log-likelihood: t is the age of a past match, ξ controls how quickly old matches fade. The parameters are found by maximising ℓ.

Reproducing the score matrix

Take a hypothetical fixture with λ = 1.45, μ = 1.10 and ρ = −0.08. The τ factors are 1.1276 for 0-0, 0.884 for 0-1, 0.912 for 1-0 and 1.08 for 1-1. A negative ρ therefore lifts 0-0 and 1-1 and trims the two 1-0 type scores. Because the four adjustments cancel exactly (the four cells add up to 40.17% either way), the grid still sums to one and no other score changes.

Independent Poisson (ρ = 0) versus Dixon–Coles (ρ = −0.08), λ = 1.45, μ = 1.10, grid to 10 goals
QuantityIndependentDixon–ColesChange
P(0-0)7.81%8.80%+0.99 pp
P(1-0)11.32%10.33%−0.99 pp
P(0-1)8.59%7.59%−1.00 pp
P(1-1)12.45%13.45%+1.00 pp
Home win45.13%44.13%−1.00 pp
Draw26.20%28.19%+1.99 pp
Away win28.67%27.68%−1.00 pp
Both teams score51.06%52.06%+1.00 pp
Over 2.5 goals46.89%46.89%0

Two lessons fall out of this table. First, the correction is a draw correction: about two points of probability move into the draw. Second, Over/Under 2.5 is untouched, because every adjusted score has two goals or fewer. If a reproduction shows ρ shifting Over 2.5, the code is wrong.

A chronological backtest design

A reproduction is only meaningful if each forecast uses information that existed when the bet would have been placed. The design below is a rolling origin: refit on everything before a match week, forecast that week, then move on.

  1. Freeze the data: match results with kickoff timestamps, and odds with the timestamp at which each quote was captured.
  2. Choose ξ and any thresholds on an early validation window only. Never tune them on the test seasons.
  3. For each match week, fit α, β, γ and ρ using only matches completed before the first kickoff of that week.
  4. Join each forecast to the last quote captured before kickoff (an as-of join), never to a closing or post-match price you could not have taken.
  5. De-vig with a method fixed in advance, record every candidate bet (taken or not) and score both forecasts (log loss) and bets (ROI with uncertainty).
Time-decay weights φ(t) = exp(−0.002 t), with t in days (hypothetical ξ)
Match ageWeight
0 days1.000
90 days0.835
180 days0.698
365 days0.482
730 days0.232

With ξ = 0.002 per day the half-life is ln 2 / ξ ≈ 346.6 days: a match from just under a year ago counts half as much as yesterday's. Larger ξ reacts faster to form but estimates each team from fewer effective matches, so the parameters become noisier.

What 1997 showed, what it cannot show today, and how reproductions fail

  • Promoted and new teams: no recent history in the league, so α and β rest on few matches.
  • Squad changes: transfers, injuries and managerial changes are invisible to a goals-only model until results arrive.
  • Unstable ρ: the dependence parameter is estimated from rare low scores and can swing between refits.
  • De-vig choice: a two-point model–market gap can shrink when the margin is removed by another method (Štrumbelj (2014)).
  • Overfitting: many (ξ, threshold, league) combinations make a good-looking test season likely by chance.
  • Price realism: historical odds may be closing or best-of-market prices nobody could take at size.

A faithful reproduction checklist: same score likelihood and τ, the same identifiability constraint, a documented ξ chosen out of sample, point-in-time joins, a fixed de-vig method, every candidate bet logged, forecast scores reported alongside ROI, and an explicit statement of what was not reproduced (for example, the original odds source).

Worked example

Worked example · Model versus a de-vigged hypothetical market: Harbour City v Northvale

A reproduced model gives λ = 1.45 (Harbour City, home) and μ = 1.10 (Northvale) with ρ = −0.08. A hypothetical bookmaker quotes 2.30 home, 3.30 draw, 3.40 away. Is there anything worth acting on?

  1. τ factors0-0: 1 − 1.45 × 1.10 × (−0.08); 0-1: 1 + 1.45 × (−0.08); 1-0: 1 + 1.10 × (−0.08); 1-1: 1 − (−0.08)1.1276, 0.884, 0.912, 1.08
  2. Model 1X2Sum the Dixon–Coles score grid (0–10 goals each) by resultHome 44.13%, draw 28.19%, away 27.68% (fair odds 2.266 / 3.547 / 3.613)
  3. Book sum1/2.30 + 1/3.30 + 1/3.401.0319 → overround 3.19%
  4. Proportional de-vigEach 1/o divided by 1.0319Home 42.13%, draw 29.37%, away 28.50%
  5. Model minus market44.13 − 42.13; 28.19 − 29.37; 27.68 − 28.50+2.00 pp, −1.17 pp, −0.83 pp
  6. EV at the quoted pricesEV = p × o − 1: 0.4413 × 2.30 − 1; 0.2819 × 3.30 − 1; 0.2768 × 3.40 − 1Home +1.50%, draw −6.96%, away −5.90%
  7. Sensitivity on the home priceModel home ± 2 pp → 42.13% to 46.13% at 2.30 (break-even 43.48%)EV from −3.10% to +6.10%: depends on the estimate
  8. Method checkPower and Shin de-vig give the home side 42.41% and 42.34%Gap shrinks to 1.72–1.79 pp

The model leans towards the home side by about two points, but the expected value at 2.30 is only +1.5% and turns negative if the model is two points too high — a plausible error for a reproduced model with an unstable ρ. The honest decision is no action: record the forecast, score it later, and let a chronological sample — not one fixture — decide whether the model adds information.

Practice · Remove the margin from the hypothetical quote

Open the Remove the margin lab with the preset 2.30 / 3.30 / 3.40. Compare the four de-vig methods with the model's 44.13% / 28.19% / 27.68%. Does any method put the model's home probability below the market's?

Lab 2 · Remove the margin

Synthetic · deterministic
Enter a complete home / draw / away market. The lab removes the bookmaker margin four ways.
Book sum103.19%
Overround3.19%
Theoretical payout96.91%
Largest method gap0.28 pts
Fair probability (fair decimal odds) for each outcome
MethodHomeDrawAway
Raw implied (with margin)43.48%30.30%29.41%
Proportional42.13% (2.373)29.37% (3.405)28.50% (3.509)
Additive42.41% (2.358)29.24% (3.420)28.35% (3.528)
Power k = 1.029942.41% (2.358)29.24% (3.420)28.35% (3.527)
Shin z = 0.016042.34% (2.362)29.27% (3.416)28.39% (3.523)
  • Proportional: Divides every implied probability by the book sum. Simple, but assumes the margin is spread in proportion to probability.
  • Additive: Removes an equal amount from every outcome. Easy to explain; it can push long shots below zero.
  • Power: Raises every implied probability to a common power. Takes relatively more margin from long shots.
  • Shin: Derived from Shin's insider-trading model. Takes more margin from long shots; performed well in Štrumbelj (2014).

Reading the result. The methods agree on the favourite more than on long shots. None of them recovers the “true” probability: they are different assumptions about how the bookmaker spread its margin. Differences of a point or two can decide whether a price looks like value, so state which method you used.

Educational calculator. Uses only the numbers you enter or seeded synthetic data — no live prices, no staking, no real money.

Show what you should find

The book sums to 103.19%. Proportional gives 42.13% / 29.37% / 28.50%; additive and power both give about 42.41% / 29.24% / 28.35%; Shin gives 42.34% / 29.27% / 28.39%. Every method leaves the model about 1.7–2.0 points higher on the home side and 1.0–1.2 points lower on the draw. The direction is robust to the method; the size is small, which is why it does not justify a pick on its own.

Common mistakes

  • ✗ Fitting the model on the whole dataset, then backtesting on the same matches.Refit before every match week using only completed matches; the test forecasts must be out of sample.
  • ✗ Expecting ρ to change Over/Under 2.5 probabilities.τ only redistributes mass among 0-0, 1-0, 0-1 and 1-1, all of which are under 2.5 goals. It changes draw and BTTS probabilities, not Over 2.5.
  • ✗ Treating the 1997 betting result as evidence that the model beats current markets.It is one historical evaluation in a high-margin era. Dixon & Coles (1997) does not show that the model beats today's markets after margins, limits and competition.
  • ✗ Comparing model probabilities with raw implied probabilities.Raw 1/o includes the margin. Compare with de-vigged probabilities and check that your conclusion survives more than one de-vig method.

When it fails

Supporting research

Check your understanding

1. With λ = 1.45, μ = 1.10 and ρ = −0.08, which probability is unchanged by the τ correction?
2. In a chronological backtest, which odds should each forecast be compared with?
3. The model gives the home side 44.13% and the de-vigged market 42.13% at odds 2.30. What is the best conclusion?

Practice only: saved on this device, no XP and no account record.

Saved on this device only.
Reproduce a Dixon–Coles case study · Value Academy · WCWins