Poisson match predictor

Enter the expected goals for each team and get the probability of every scoreline, the match result, over/under 2.5 goals and both teams to score.

The starting values are an example. The basic Poisson model treats the two teams' goals as independent; real matches have slightly more low-scoring draws than it predicts.

The same calculation in Python

from math import exp, factorial

def pmf(k, lam):
    return lam ** k * exp(-lam) / factorial(k)

home_xg, away_xg = 1.45, 1.10
home = [pmf(k, home_xg) for k in range(11)]
away = [pmf(k, away_xg) for k in range(11)]

p_home = sum(home[i] * away[j] for i in range(11) for j in range(11) if i > j)
p_draw = sum(home[i] * away[i] for i in range(11))
p_away = 1 - p_home - p_draw
print(f"Home {p_home:.1%}  Draw {p_draw:.1%}  Away {p_away:.1%}")

Where the expected goals come from — and how to fit them to real results — is explained in Build a Poisson Football Model in Python.

18+ only. Models do not guarantee results. See our Responsible Gambling page.