Match probabilities
| Market | Probability | Fair odds |
|---|
Most likely scorelines
Fair odds carry no margin — a real price below them is negative value at these λ inputs. Grid truncated at 10 goals per side.
The same maths, with nothing hidden
This is not a toy version of our model — it is the core of it. Every fixture page on this site starts from exactly this computation: a goals rate for each side, a Poisson grid over every scoreline, and market probabilities read off the grid. What the production pipeline adds is how the λ values are estimated — time-decayed attack and defence rates over ~11,000 results, shrinkage toward the league mean, and a blend with market prices — all documented on the model page.
Two honest limitations worth knowing before you trust any output. Goals are not perfectly independent — teams sit on leads and chase deficits — so plain Poisson slightly underrates draws and 0-0s; and the output quality is exactly the input quality: λ values pulled from thin air produce confident-looking nonsense. Used with real xG or rate data, it is the fastest way to sanity-check whether a price on totals or BTTS is in the right neighbourhood.
Poisson FAQ
It models the number of goals a team scores as random events arriving at a steady rate λ (the expected goals). Given λ for each side, every scoreline gets a probability: P(k goals) = e^−λ · λᵏ ⁄ k!. Summing the grid gives 1X2, totals and BTTS.
From any xG source, from a team’s goals-per-game rates, or from our fixture pages — every match where the model has a reliable fit shows its expected goals. The calculator is the same engine with the inputs exposed.
Good enough to be the backbone of most quant football models, imperfect in known ways: it slightly underrates draws and low-scoring games because goals are not fully independent. Our production model adds time-decay, shrinkage and a market blend on top — methodology on the model page.
The grid is truncated at 10 goals per team. The missing tail is a fraction of a percent at football-realistic λ values — visible only if you push the inputs to absurd levels.