Football Probability & Fair-Odds Calculators
Open, client-side mathematical instruments used across Football Charts: test how expected goals (λ, μ) and low-score correlation (ρ) map into exact scorelines, Over/Under lines, and Asian Handicaps; strip bookmaker margin using Power or Shin de-vigging; or jump to any league's 10,000-simulation points cutoff calculator.
On any match page in Today or Predictions, click “Open in Dixon–Coles calculator →” under the model table to pre-load that fixture's exact expected goals (λ, μ) and bookmaker 1X2 odds 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)
}League Points Cutoff & “What-If” Run-In Calculators
Pick a club and test how many points from its remaining fixtures are needed for safety, promotion, or the title across 10,000 Monte Carlo season simulations:
