Markets coveredMatch OddsCorrect ScoreOver / UnderFirst HalfSecond Half
Statometrics
Model Library · Distributions

Skellam Distribution

The distribution of the difference between two Poisson counts, used to price goal handicaps and winning margins directly.

Intermediatepre-matchin-play

In one sentence

The Skellam distribution gives the probability of each goal difference when both teams' goals follow independent Poisson distributions.

How it works

Many markets care only about the margin: Asian handicaps, winning margin, and match odds itself (home wins when the difference is positive). Instead of building the whole correct score grid and adding up the right cells, Skellam gives the goal difference in one step.

It takes the two expected goals figures and returns P(difference = 0), P(difference = +1), P(difference = −2) and so on. The result is identical to summing the correct score grid from two independent Poissons, just quicker and tidier.

One neat property: the difference has mean λ1 − λ2 and variance λ1 + λ2. A match expected to be 1.7 v 1.0 has an average margin of +0.7 but a lot of spread around it.

The maths

P(D=k)=e−(λ1+λ2)(λ1λ2)k/2I∣k∣ ⁣(2λ1λ2)P(D = k) = e^{-(\lambda_1+\lambda_2)} \left(\frac{\lambda_1}{\lambda_2}\right)^{k/2} I_{|k|}\!\left(2\sqrt{\lambda_1\lambda_2}\right)
  • D is home goals minus away goals.
  • k is a particular difference (can be negative).
  • λ1 and λ2 are home and away expected goals.
  • I is a special function (the modified Bessel function) that software computes for you.

In words: plug in two expected goals figures and read off the chance of every margin.

Worked betting example

Match Odds and handicap, illustrative inputs. Home expected goals 1.7, away 1.0.

  1. Skellam gives P(draw, D = 0) = 24.02%, P(home win, D ≥ 1) = 53.79%, P(away win, D ≤ −1) = 22.18%.
  2. P(home wins by 2 or more, D ≥ 2) = 29.48%. This is the home −1.5 Asian handicap. Fair odds ≈ 3.39.
  3. The exchange has home −1.5 available to back at 2.60 and to lay at 2.62. Backing is poor value: 0.2948 × £32 − 0.7052 × £20 ≈ −£4.67 on a £20 stake.
  4. Laying £20 at 2.62 means a liability of £32.40. Expected value = 0.7052 × £20 × 0.98 − 0.2948 × £32.40 ≈ +£4.27 after 2% commission.

A price this far from your number is more likely a sign your inputs are wrong than a gift. Check team news before laying into a heavy favourite.

Where it's good

  • Asian handicap and winning margin markets in football and ice hockey.
  • Quick in-play repricing: scale both λ figures by time remaining and add the current score difference.
  • Checking your match odds quickly without building a full grid.
  • Any sport where both sides produce rare, roughly independent scoring events.

Limitations and pitfalls

  • It inherits every Poisson assumption: constant scoring rate, no link between the teams, variance equal to the mean.
  • It ignores the low-score draw excess; Dixon-Coles or bivariate Poisson do better near D = 0, which matters for draw-heavy handicaps.
  • Note that a shared scoring component (bivariate Poisson) cancels out of the difference, so Skellam cannot tell you about correlation at all.
  • Handicap markets settle on whole and quarter lines with pushes and half-stakes; make sure you map probabilities to the exact settlement rules.
  • Totals and margins are linked; using Skellam for margins but a different model for totals can give inconsistent prices.

How to build it

  • scipy.stats.skellam (pmf, cdf, sf) in Python; the skellam package in R.
  • Data: expected goals per team from your ratings model.
  • Tip: for in-play, compute P(final difference) as the current difference plus a Skellam draw over the remaining minutes.
Learn it step by step
18+ only. Educational content, not financial or betting advice. Past results do not guarantee future returns. If gambling stops being fun, get free, confidential help at BeGambleAware.org.
Members