← NeuPortal blog

How a Poisson Model Turns Team Form Into Football Match Probabilities

By ·

Ask a fan who wins on Saturday and you get a name. Ask a forecasting model and you get three numbers: the chance of a home win, a draw, and an away win, adding up to 100%. Getting from raw team form to those three numbers is one of the oldest and most dependable tricks in football analytics, and at its heart sits a piece of maths from the 1800s — the Poisson distribution.

Here is how a double Poisson model turns "this side attacks well, that side defends badly" into a full set of scoreline probabilities — and, just as importantly, where it quietly breaks.

Why goals behave like a Poisson distribution

The Poisson distribution describes how often a relatively rare event happens over a fixed stretch of time, when each occurrence is roughly independent of the last and the underlying rate is roughly steady — think phone calls arriving at a switchboard.

Goals in football fit that shape surprisingly well. Across 90 minutes, chances arrive here and there, most attacks lead to nothing, and one goal doesn't mechanically cause the next. That is close enough to a Poisson process to make the distribution a genuinely useful model of how many goals a team will score. It won't be perfect — we'll get to why — but it captures the real texture of the game: plenty of 1-0 and 2-1 results, the occasional goalless draw, the rare 5-0 blowout.

The single input the Poisson distribution needs is the average rate. In football that rate has a name.

Lambda: a team's expected goals for one match

Statisticians call that rate lambda (the Greek letter λ). It is simply the number of goals a team is expected to score in a given match — not a prediction of the exact scoreline, but the long-run average if that fixture were replayed hundreds of times.

Feed a single lambda into the Poisson formula and it spreads that average across every possible goal count. Suppose a team's lambda for a match is 1.4 (an illustrative figure). The model then assigns a probability to scoring 0, 1, 2, 3 or more: the likeliest outcomes cluster around one and two, zero is common, and four-or-more is possible but rare. Higher lambda pushes the whole distribution toward more goals; lower lambda pulls it toward a blank.

One lambda describes one team's scoring. A football match has two teams — so we need two.

Where the lambdas come from

This is the part that separates a toy from a working model. A lambda isn't guessed; it's built from each side's underlying strength relative to the league. The classic construction gives every team an attack strength and a defence strength, then combines them with the fixture: home lambda is roughly the league-average home goals times the home team's attack times the away team's defence, and away lambda is the league-average away goals times the away team's attack times the home team's defence.

The league average bakes in home advantage (home sides score more on average). The attack and defence multipliers say how far above or below average each team is. A strong attack facing a leaky defence produces a high lambda; a blunt attack against a miserly defence produces a low one.

The strength ratings themselves are estimated from data, and this is where "form" enters honestly rather than as a gut feeling: recent results and goals, weighted so newer matches count more than old ones; expected goals (xG) instead of, or alongside, raw goals, because xG measures the quality of chances and strips out finishing luck; injuries, suspensions and confirmed lineups, which shift the relevant strength before kickoff; and context adjustments like fixture congestion or an opponent playing most of a match a man down.

Get the lambdas right and the rest is arithmetic. Get them wrong and no clever maths downstream will save the forecast.

Building the score matrix and reading off home, draw and away

With a home lambda and an away lambda in hand, the model builds a grid: down the side, home goals 0, 1, 2, 3, …; across the top, away goals 0, 1, 2, 3, …. Each team's Poisson distribution gives the probability of each goal count, and — under the model's working assumption that the two teams' goals are independent — the probability of a specific scoreline is just the two multiplied together.

So the chance of home 2 – away 1 is the probability home scores exactly 2 times the probability away scores exactly 1. Do that for every cell and you get a full score matrix: a probability for 0-0, 1-0, 2-1 and every other result, all summing to 100%.

The three headline numbers fall straight out of that grid. The home win probability is the sum of every cell where home goals exceed away goals. The draw is the sum of the diagonal, where the two counts are equal (0-0, 1-1, 2-2, …). The away win is the sum of every cell where away goals exceed home goals.

Three sums over one matrix, and "how strong is each side" has become something like "home 55%, draw 27%, away 18%" — figures used purely to illustrate the shape, not a real fixture. The same matrix also answers over/under and both-teams-to-score questions, because they are just different regions of the same grid.

What the model gets right and its honest limits

The double Poisson approach earns its long life for good reasons. It is transparent: every number traces back to attack strength, defence strength and the lambdas, so you can see why a forecast came out the way it did. It is calibratable: because it emits probabilities, you can check over many matches whether the events it called 60% actually happen about 60% of the time. And it is hard to beat for the effort — a serious baseline that far fancier systems often only edge past.

But an honest account has to name where it strains. Goals aren't perfectly independent: a team chasing an equaliser pushes forward, changing the scoring rate for both sides, which is why refinements like the Dixon-Coles adjustment exist to correct the low scores where the plain model is known to be slightly off. The rate isn't really constant either — a red card, a tactical reshuffle or a two-goal cushion changes the game mid-flow, and a single fixed lambda can't feel that. Everything rests on the strength estimates, so thin early-season samples, a manager change or a mishandled injury feed the model bad lambdas, and it will state a wrong answer with a straight face. And it gives probabilities, not certainties: a 55% favourite losing is not the model being "wrong" — it's the 45% showing up.

That last point is the whole philosophy. A Poisson forecast isn't a prophecy that a team will win; it's a claim that they win about 55% of the time in a world that looks like this one — a number you can hold to account after the whistle.

The bottom line

A double Poisson model is a clean pipeline: estimate each side's attacking and defensive strength from form, xG and lineups; turn those into two expected-goal rates; multiply out a grid of scorelines; and sum the regions to get home, draw and away probabilities. It's simple enough to explain on one page and honest enough to be scored in public — which is why it remains a backbone of serious football analytics rather than a relic.

Educational content — not financial advice, and not a betting tip.