Poisson Distribution

Summary

The Poisson distribution is a discrete probability distribution that models the probability of a given number of events occurring in a fixed interval of time, given a known constant mean rate and independence between events. It is named after French mathematician Siméon Denis Poisson (1781–1840).

In sports prediction, the Poisson distribution is the foundational model for expected goals (xG) in football/soccer. Because goals are relatively rare events, the number of goals scored in a match follows a Poisson-like process. The model takes the expected goals (xG) for each team as its λ (lambda) parameter and computes the probability of each scoreline.

The Poisson distribution is applicable when: events occur independently, the average rate is constant, two events cannot occur at exactly the same instant. For football, these assumptions are approximately met (though the Dixon-Coles correction addresses the key violation — correlation between goals in low-scoring matches).

Key Concepts

  • λ (lambda): Mean number of events (goals) in the interval. For football, this is the expected goals for a team in a match. Both mean and variance of a Poisson distribution equal λ.
  • PMF (Probability Mass Function): P(X=k) = (λ^k × e^(-λ)) / k! — probability of exactly k goals
  • Independence assumption: Standard Poisson assumes goals are independent events; in football, 0-0 and 1-1 draws are systematically under-predicted (goals are correlated — a team that scores first changes behavior)
  • Dixon-Coles correction: Addresses the independence violation by adding a tau (ρ) parameter that adjusts specific low-scoring scorelines
  • Additivity: If two independent Poisson processes with rates λ1 and λ2 are combined, the result is Poisson with rate λ1 + λ2. This allows modeling home and away goals separately then combining.

Formulas

Poisson PMF:
$$P(X = k) = \frac{\lambda^k e^{-\lambda}}{k!}$$

For football match modeling (two independent Poisson variables):
$$P(HomeGoals = h, AwayGoals = a) = \frac{\lambda_h^h e^{-\lambda_h}}{h!} \times \frac{\lambda_a^a e^{-\lambda_a}}{a!}$$

Where λ_h and λ_a are expected goals for home and away teams respectively.

Expected goals can be derived from attack/defense strength:
$$\lambda_{home} = \overline{goals_{home}} \times attack_{team} \times defense_{opponent}$$
$$\lambda_{away} = \overline{goals_{away}} \times attack_{team} \times defense_{opponent}$$

Python Implementation

import numpy as np
from scipy.stats import poisson

def poisson_probability(goals, lambda_):
    """Probability of scoring exactly `goals` given expected goals `lambda_`."""
    return poisson.pmf(goals, lambda_)

def scoreline_matrix(lambda_home, lambda_away, max_goals=6):
    """Generate full scoreline probability matrix for a match."""
    matrix = np.zeros((max_goals + 1, max_goals + 1))
    for h in range(max_goals + 1):
        for a in range(max_goals + 1):
            matrix[h, a] = poisson.pmf(h, lambda_home) * poisson.pmf(a, lambda_away)
    return matrix

def win_draw_loss(matrix):
    """Extract W/D/L probabilities from scoreline matrix."""
    home_win = matrix[1:, :-1].sum()  # home goals > away goals
    draw = np.diag(matrix).sum()       # home goals == away goals
    away_win = matrix[:-1, 1:].sum()   # home goals < away goals
    return home_win, draw, away_win

Notes

  • Wikipedia notes that the average goals per World Cup soccer match is approximately 2.5, making the Poisson model appropriate
  • The key limitation: Poisson underestimates draw frequencies because goals are not independent (a team winning 1-0 plays defensively, affecting the second goal probability)
  • For betting applications, always apply Dixon-Coles correction when modeling football
  • Overdispersion (variance > mean) is common in real football data; negative binomial is an alternative but Poisson remains standard due to simplicity