Math & ModelsUpdated 21 Jul 20267 min read

The Poisson Distribution: Turning Expected Goals Into Scorelines

The whole idea in one line

Give the Poisson distribution one number — how many goals a team is expected to score — and it returns the probability of every goal count. Do that for both sides and you have a consistent price for every goals market in the match.

What the distribution actually describes#

Before the formula, the idea. Poisson is a distribution for counting: how many independent, rare-ish events land inside a fixed window, when they arrive at a roughly constant average rate. Calls to a switchboard in an hour. Typos on a page. Buses at a stop.

Football goals fit it tolerably well. The window is fixed — 90 minutes plus stoppage. Goals are rare relative to the number of attempts that could produce one. And once you have conditioned on which two teams are playing, one goal does not strongly cause the next. None of that is exactly true, and the last part is where the model eventually breaks, but it is close enough that the entire goal-based modelling tradition is built on it.

The single input is λ (lambda): the average count you expect. λ is not a prediction of the score. It is the long-run average over many imagined replays of the same fixture. A λ of 1.5 means "replay this match a thousand times and that side scores about 1,500 goals in total". No individual match ever finishes 1.5.

The formula, worked by hand#

For a team with expected goals λ, the probability of scoring exactly k goals is:

P(k) = e−λ × λk ÷ k!

Three parts. The e−λ term sets the overall floor and shrinks as λ grows. The λk term rewards higher counts. The k! term — the factorial, 3! = 3 × 2 × 1 = 6 — punishes them, and punishes harder the further you go. The balance between those last two is the whole distribution.

Work it through with λ = 1.5. First, e−1.5 = 0.2231. Then:

  • P(0) = 0.2231 × 1 ÷ 1 = 0.223
  • P(1) = 0.2231 × 1.5 ÷ 1 = 0.335
  • P(2) = 0.2231 × 2.25 ÷ 2 = 0.251
  • P(3) = 0.2231 × 3.375 ÷ 6 = 0.126
  • P(4) = 0.2231 × 5.0625 ÷ 24 = 0.047

Two things worth noticing. The most likely single outcome is one goal, not the 1.5 you fed in — the distribution is skewed, with a long thin tail and a hard floor at zero. And 0.223 + 0.335 + 0.251 = 0.809, so a side rated at 1.5 expected goals still fails to reach three about four times in five.

Two rates make a grid#

Model each team separately and multiply. If the home side is on λ = 1.5 and the away side on λ = 1.1, then the probability of exactly 2-1 is P(2 goals at 1.5) × P(1 goal at 1.1).

The away side's numbers, by the same formula, are P(0) = 0.333, P(1) = 0.366, P(2) = 0.201. So:

1-1
12.3%
0.335 × 0.366
1-0
11.1%
0.335 × 0.333
2-1
9.2%
0.251 × 0.366
0-0
7.4%
0.223 × 0.333

Do that for every pair and you have a grid — home goals down one axis, away goals across the other, a probability in every cell. That grid is the model's complete opinion on the match, and every market is simply a different sum of cells:

MarketWhich cellsThis fixture
Home wineverything below the diagonal46.4%
Drawthe diagonal itself25.8%
Away wineverything above the diagonal27.8%
Over 2.5 goalscells where the two numbers add to 3 or more48.2%
BTTS yescells where both numbers are at least 151.8%
Plain Poisson at 1.5 v 1.1. Every row is a sum over the same grid, so the whole book is consistent by construction.

This is the part that matters most and gets explained least. Because match result, Over/Under 2.5 and BTTS are all read off one object, they cannot contradict each other. Price those three markets separately — three models, three sets of assumptions — and nothing stops you publishing a home-win number that is arithmetically impossible given your own totals number. Build the grid first and that class of error disappears.

Try it, then break it#

Set the two expected-goals sliders and read every market off the grid below. Two things are worth doing deliberately.

Home
47.1%
2.12
Draw
26.2%
3.81
Away
26.7%
3.75
Over 2.5
51.9%
1.93
Under 2.5
48.1%
2.08
BTTS yes
55.2%
1.81
BTTS no
44.8%
2.23

Scoreline probability

home ↓ · away →
012345
07.16.64.21.60.50.1
19.512.56.82.60.70.2
28.29.45.42.10.60.1
34.45.02.91.10.30.1
41.72.01.20.40.10.0
50.60.60.40.10.00.0

Percentages, shaded by likelihood. The grid runs to 8-8 behind the scenes; scorelines above 5 are too rare to be worth the ink.

Most likely scorelines

1112.5%109.5%219.4%208.2%007.1%

These are fair probabilities — no bookmaker margin. A real price for the same outcome will always be shorter than the fair odds shown, and the gap is the book's fee.

First, move one slider up and the other down while keeping the total roughly constant — say from 1.6 v 1.15 to 2.2 v 0.6. Watch the match-result numbers swing hard while Over/Under barely moves. Totals and 1X2 answer genuinely different questions.

Second, untick the Dixon-Coles box. At the default rates the draw probability falls from roughly 26% to roughly 25%, and the 0-0 and 1-1 cells visibly thin out. That single tick is the subject of the next section.

Where plain Poisson is wrong#

The independence assumption is the weak joint. Multiplying the two teams' probabilities together says the away side's goal count tells you nothing about the home side's, and that is not quite true. Real football produces more 0-0 and 1-1 finishes than independence allows — a cagey, low-tempo, high-stakes match suppresses both sides at once, so the two counts are mildly linked at the bottom of the range.

The Dixon-Coles correction, from the 1997 paper that founded modern football modelling, fixes exactly that and nothing else. It multiplies four cells — 0-0, 1-0, 0-1 and 1-1 — by a factor called τ (tau), leaving every other cell alone. With the correction's single parameter ρ (rho) fitted as a small negative number, as it comes out in practice, τ is above 1 for 0-0 and 1-1 and below 1 for 1-0 and 0-1. So the two low draws are inflated, the two 1-0 results are shaved, and the grid is renormalised so it still sums to 100%.

Two of those four cells are draws. That is why the visible effect of a correction aimed at low scores is more draws — and why it matters, because the draw is the hardest cell in football to price and the one where naive Poisson is most systematically wrong. The models behind Tofiko use the corrected version for that reason.

A minimal fix, not a general one

Dixon-Coles adjusts four cells. It does not make the two teams' goal counts properly dependent everywhere, and it does not repair a badly estimated λ. It is a targeted patch on the one place plain Poisson is known to be wrong — treat it as that, not as a general model upgrade.

What the maths cannot do for you#

It takes λ as given. Everything above is arithmetic: feed in two numbers and the grid follows mechanically. Estimating those numbers — from attack and defence strength, home advantage, opponent quality, rest, personnel and increasingly expected goals — is the actual hard problem, and where a real model earns its keep. A grid built on bad rates is confidently formatted nonsense.

It assumes the rate holds for 90 minutes. A red card on 20 minutes, or an early goal that changes how both sides set up, breaks the constant-rate assumption outright. The distribution has no mechanism for a match that changes character mid-window. Treat the output as a pre-match baseline, not a live price.

Its probabilities carry no margin. The fair odds the Poisson calculator shows are what a bookmaker would offer if it worked for free. Any real price will be shorter, and the gap is the fee you have to beat before anything else.

Consistent is not the same as correct

A grid can be internally flawless and still be a worse description of the match than the bookmaker's. Internal consistency is a property of the maths; accuracy is an empirical question you have to test. We grade our models on calibration, Brier score and closing-line value rather than profit, and publish the result either way — including the current position, which is that we have no demonstrated edge over closing prices.

Related

Frequently asked questions

What is the Poisson distribution in football?

It is the standard way of modelling how many goals a team scores. Give it one number — the team's expected goals for the match, written λ — and it returns the probability of that team scoring exactly 0, 1, 2, 3 goals and so on. It fits football well because goals are relatively rare events spread over a fixed 90 minutes.

What is the Poisson formula for goals?

P(k) = e^(−λ) × λ^k ÷ k!, where λ is the team's expected goals and k is the number of goals you want the probability of. With λ = 1.5, the chance of exactly one goal is 0.2231 × 1.5 ÷ 1 = 0.335, or 33.5%.

Why does plain Poisson underrate 0-0 and 1-1?

Because it assumes the two teams' goal counts are independent, and in real football they are mildly linked — a cagey, low-tempo match suppresses both sides at once. The result is that genuine football produces more 0-0 and 1-1 finishes than independence predicts.

What is the Dixon-Coles correction?

An adjustment from a 1997 paper that multiplies just four scorelines — 0-0, 1-0, 0-1 and 1-1 — by a correction factor, inflating the two draws and deflating the two 1-0 results. Because two of the four cells are draws, the visible effect is a higher draw probability.

Can a Poisson model predict the exact score?

It gives every scoreline a probability, but no scoreline is ever likely. In a typical fixture the single most probable result sits around 11–13%, so the model expects to be wrong about the exact score roughly nine times out of ten. Its output is a distribution, not a prediction.