Dixon–Coles & Poisson Football Calculator + Fair Odds De-Vig Tool
Interactive reference implementation of the Dixon & Coles (1997) low-score correlation adjustment on top of independent Poisson goal expectancies (λ, μ, ρ), paired with a 4-method bookmaker margin remover (Multiplicative, Additive, Power k, and Shin z) and proper scoring rule verifier (Brier & Ranked Probability Score). Runs 100% in your browser — no tracking, no affiliate links, open-source Python & R code below.
Dixon–Coles vs. Independent Poisson Calculator
| Market | Dixon–Coles | Fair Odds | vs. Poisson |
|---|---|---|---|
| Home Win (1) | 45.2% | 2.21 | -1.3 pp |
| Draw (X) | 27.9% | 3.59 | +2.6 pp |
| Away Win (2) | 26.9% | 3.72 | -1.3 pp |
| Home Draw No Bet (AH 0.0) | 62.7% | 1.60 | +0.4 pp |
| Away Draw No Bet (AH 0.0) | 37.3% | 2.68 | -0.4 pp |
| Home Asian Handicap -0.25 | 54.0% | 1.85 | -0.4 pp |
| Home Asian Handicap +0.25 | 67.9% | 1.47 | +0.9 pp |
| Home Asian Handicap -0.75 | 37.7% | 2.65 | -0.9 pp |
| Home Asian Handicap -1.5 | 23.6% | 4.23 | 0.0 pp |
| Market | Over / Yes | Under / No | Fair Odds (O / U) |
|---|---|---|---|
| Over / Under 0.5 goals | 92.0% | 8.0% | 1.09 / 12.44 |
| Over / Under 1.5 goals | 76.5% | 23.5% | 1.31 / 4.25 |
| Over / Under 2.5 goals | 50.6% | 49.4% | 1.97 / 2.03 |
| Over / Under 3.5 goals | 28.6% | 71.4% | 3.50 / 1.40 |
| Over / Under 4.5 goals | 13.7% | 86.3% | 7.29 / 1.16 |
| Both Teams to Score (BTTS) | 55.1% | 44.9% | 1.81 / 2.23 |
Exact Scoreline Probability Grid (Home rows 0–5 vs. Away columns 0–5)
| Home \ Away | Away 0 | Away 1 | Away 2 | Away 3 | Away 4 | Away 5 |
|---|---|---|---|---|---|---|
| Home 0 | 8.04% | 6.41% | 4.44% | 1.70% | 0.49% | 0.11% |
| Home 1 | 9.10% | 13.30% | 6.89% | 2.64% | 0.76% | 0.17% |
| Home 2 | 8.07% | 9.28% | 5.34% | 2.05% | 0.59% | 0.14% |
| Home 3 | 4.17% | 4.80% | 2.76% | 1.06% | 0.30% | 0.07% |
| Home 4 | 1.62% | 1.86% | 1.07% | 0.41% | 0.12% | 0.03% |
| Home 5 | 0.50% | 0.58% | 0.33% | 0.13% | 0.04% | 0.01% |
Highlighted top-left 2×2 cells (0,0), (1,0), (0,1), (1,1) are where the Dixon–Coles dependence parameter ρ shifts probability mass between low-scoring draws and single-goal wins.
Fair Odds De-Vigging Calculator (Multiplicative, Additive, Power & Shin)
| Outcome | Raw Implied | Multiplicative | Additive | Power (k) · Fair | Shin (z) · Fair |
|---|---|---|---|---|---|
| Home (1) (@2.10) | 47.62% | 45.43% (2.20) | 46.02% (2.17) | 46.02% (2.17) | 45.87% (2.18) |
| Draw (X) (@3.40) | 29.41% | 28.06% (3.56) | 27.81% (3.60) | 27.80% (3.60) | 27.87% (3.59) |
| Away (2) (@3.60) | 27.78% | 26.50% (3.77) | 26.17% (3.82) | 26.18% (3.82) | 26.26% (3.81) |
Python & R Implementation of the Dixon–Coles Score Matrix
Drop these functions directly into Jupyter, Quarto, or R Markdown notebooks. Free to reuse under CC BY 4.0.
import numpy as np
from scipy.stats import poisson
def dixon_coles_matrix(lam: float, mu: float, rho: float = -0.11, max_goals: int = 10) -> np.ndarray:
"""Dixon & Coles (1997) bivariate score probability matrix — football-charts.com/tools/dixon-coles-calculator"""
g = np.arange(max_goals + 1)
M = np.outer(poisson.pmf(g, lam), poisson.pmf(g, mu))
M[0, 0] *= max(0.0, 1.0 - lam * mu * rho)
M[1, 0] *= max(0.0, 1.0 + mu * rho)
M[0, 1] *= max(0.0, 1.0 + lam * rho)
M[1, 1] *= max(0.0, 1.0 - rho)
return M / M.sum()dixon_coles_matrix <- function(lambda, mu, rho = -0.11, max_goals = 10) {
# Dixon & Coles (1997) score probability matrix — https://www.football-charts.com/tools/dixon-coles-calculator
g <- 0:max_goals
M <- outer(dpois(g, lambda), dpois(g, mu))
M[1, 1] <- M[1, 1] * max(0, 1 - lambda * mu * rho)
M[2, 1] <- M[2, 1] * max(0, 1 + mu * rho)
M[1, 2] <- M[1, 2] * max(0, 1 + lambda * rho)
M[2, 2] <- M[2, 2] * max(0, 1 - rho)
M / sum(M)
}4 · Mathematical Formulation & References
Dixon & Coles (1997) Low-Score Dependence τ(x, y)
Under an independent double Poisson model with home goal expectancy λ and away goal expectancy μ, the joint probability of scoreline (x, y) is P(X=x) · P(Y=y). Dixon & Coles (Journal of the Royal Statistical Society: Series C, 46(2), 265–280) multiply the four low-scoring outcomes by τ(x, y):
- τ(0, 0) = 1 − λ · μ · ρ
- τ(1, 0) = 1 + μ · ρ
- τ(0, 1) = 1 + λ · ρ
- τ(1, 1) = 1 − ρ
- τ(x, y) = 1 for x ≥ 2 or y ≥ 2
Across European domestic leagues, maximum-likelihood estimates of ρ typically fall between −0.09 and −0.15, increasing the probability of 0–0 and 1–1 draws relative to naive Poisson.
Overround Removal: Power Method vs. Shin (1993)
Given bookmaker decimal odds o_1, …, o_n with raw implied probabilities q_i = 1 / o_i and booksum S = Σ q_i > 1:
- Multiplicative:
p_i = q_i / S(equal proportional margin). - Additive:
p_i = q_i − (S − 1) / n(equal percentage-point margin). - Power (Clarke, Kovalchik & Ingram 2017): solves
Σ q_i^k = 1fork > 1, accounting for favourite–longshot bias via constant elasticity of variance. - Shin (1993): models a market maker facing insider flow share
z ∈ (0, 1), solvingp_i = (√(z² + 4(1−z)q_i²/S) − z) / (2(1−z))such thatΣ p_i = 1.
