In one sentence
The Poisson distribution tells you how likely each count (0, 1, 2, 3 goals and so on) is when events happen randomly at a known average rate.
How it works
Imagine a match as 90 minutes of small chances, each with a tiny probability of becoming a goal. If you know the average number of goals a team should score, the Poisson distribution spreads that average across every possible scoreline count. You only need one number, the expected goals, often written λ (lambda).
Football suits it reasonably well because goals are rare, fairly independent of each other, and happen at a roughly steady rate. Give each team its own λ, work out the probability of each goal count, and multiply the two teams together to get a full correct score grid. From that grid you can price match odds, over/under, both teams to score and correct score.
The same idea works for any count of rare events: corners, cards, tries, wickets in a spell, or even the number of matched bets arriving in a minute.
The maths
- X is the number of events (goals) in the match.
- k is the specific count you are asking about (0, 1, 2 ...).
- λ is the expected number of events, which is both the mean and the variance.
- e is the constant 2.718..., and k! means k × (k − 1) × ... × 1.
In words: the chance of exactly k goals depends only on the average rate, and the spread is fixed once you pick the average.
Worked betting example
Over/Under goals, illustrative inputs. Your model gives the home side 1.6 expected goals and the away side 1.1.
- Home goals from the Poisson formula: 0 goals 20.19%, 1 goal 32.30%, 2 goals 25.84%, 3 goals 13.78%.
- If the two teams score independently, total goals are also Poisson with λ = 1.6 + 1.1 = 2.7.
- Probability of 0, 1 or 2 total goals (under 2.5) = 49.36%, so over 2.5 = 50.64%.
- Fair odds for over 2.5 = 1 ÷ 0.5064 ≈ 1.97. Fair odds for under 2.5 ≈ 2.03.
- The exchange offers 2.10 on over 2.5. Backing £10: expected value = 0.5064 × £11 − 0.4936 × £10 ≈ +£0.63.
- After 2% commission on winnings: 0.5064 × £11 × 0.98 − 0.4936 × £10 ≈ +£0.52.
That edge is thin and depends entirely on your λ values being right. Nudge either team's expected goals by 0.1 and the answer moves noticeably.
Where it's good
- Quick pre-match pricing of over/under, correct score and both teams to score in football.
- Counting markets such as bookings, corners (as a first pass) and tries.
- In-play: scale λ by the minutes remaining to reprice totals as the clock runs down.
- A baseline that more complex models must beat before you trust them.
Limitations and pitfalls
- Variance equals the mean. Real corner and card counts are usually more spread out, so the tails get underpriced (see negative binomial).
- Independence between the two teams is false in practice: low-scoring draws such as 0-0 and 1-1 occur more often than the basic model says.
- Scoring rates change within a match. Red cards, a team chasing the game and late pressure all break the constant-rate idea.
- The model is only as good as λ. Most of the work, and most of the error, is in estimating expected goals, not in the formula.
- Liquid football markets on Betfair are efficient. A plain Poisson model built from season averages rarely beats the closing price.
- Check value after 2% commission, not before.
How to build it
- scipy.stats.poisson in Python (pmf, cdf, sf) or dpois in R handle the maths.
- penaltyblog and statsmodels (Poisson GLM) can fit attack and defence ratings from past results.
- Data: several seasons of results or, better, expected goals by match, with home and away split.
- Tip: weight recent matches more heavily; team strength drifts through a season.
Related methods
- Dixon-Coles: fixes Poisson's low-score draw problem.
- Bivariate Poisson: lets the two teams' goals be correlated.
- Negative binomial: for counts more spread out than Poisson allows.
- Skellam: the goal difference between two Poisson teams.
- Expected goals: the usual source of λ.