The Poisson distribution is the standard first model for football scorelines. Goals are rare, roughly independent events occurring at some rate per match, which is exactly the situation Poisson describes — and its failures are as instructive as its successes.
The model
- Probability of exactly k goals:
P(k) = (λ^k × e^−λ) / k! λis the expected goals for that team in that match- Scoreline probability assumes independence:
P(h, a) = P_home(h) × P_away(a) - Match outcome probabilities are the sums over all scorelines where home > away, equal, or away > home.
Worked example
With λ_home = 1.7 and λ_away = 1.1, the chance of exactly 1 home goal is (1.7¹ × e^−1.7) / 1! = 31.0%, and of exactly 1 away goal is 36.6%. So 1–1 has probability 0.310 × 0.366 = 11.4%, typically the single most likely scoreline in a match of this shape.
Where independence breaks
The independence assumption is wrong in a specific, measurable way: basic Poisson systematically under-predicts draws, especially 0–0 and 1–1. Real matches are correlated — a red card, a defensive shell after taking the lead, or a game state where both teams stop attacking all violate the assumption. The Dixon–Coles adjustment exists precisely to correct low-scoring outcomes, and any model used seriously applies something like it. Treat raw Poisson as a baseline, not an answer.
Doing this at scale
Poisson needs λ, and λ comes from historical scoring rates adjusted for opponent strength and venue. Stats API supplies fixtures, full-time results and team identifiers that stay stable across seasons, so a rolling estimate can be rebuilt without re-mapping entities each time.
Common questions
Where do I get expected goals from?
Either derive them from historical scoring and conceding rates adjusted for opponent and venue, or take a published xG figure. Stats API publishes expected goals in team match statistics for covered competitions.
Why is my draw probability too low?
That is the known Poisson failure mode, not a bug in your arithmetic. Independence understates draws. Apply a Dixon–Coles style correction to the low-scoring cells.