Model

Expected points (xPts): the justice table and its limits

By · Published · Updated 26 Sep 2026 · 4 min read

Expected points — xPts, sometimes xP — is the metric behind every “justice table” you have seen on social media: the standings as they should look, if results had matched the quality of chances created. It is a genuinely useful idea, and it is routinely used for something it cannot do. The confusion is worth untangling, because two different calculations travel under the same name.

How the standard version works

The familiar xPts starts from expected goals. Every shot in a match carries an xG value — the historical conversion rate of shots taken from that position, in that situation. Take both teams’ shot-by-shot xG for a single match, simulate the match many thousands of times by letting each shot score or miss at its own probability, and count how often each side ends up winning, drawing or losing.

That gives three probabilities, which convert straight into points: three for a win, one for a draw. A team whose chances imply a 55% win probability, a 25% draw and a 20% defeat earned 1.9 expected points from that match, whatever the scoreboard said. Sum those across a season and you have a full xPts table.

Its value is real. A side sitting five points below its xPts total has been finishing badly or getting unlucky in front of goal — two things with very different implications for what happens next. The table tells you results; xPts tells you something about performance.

The version people confuse it with

There is a second calculation with the same name and a different meaning entirely.

Take a pre-match model’s probabilities for a fixture — the sort our own model produces — and convert them to points the same way: three times the win probability plus the draw probability. That is also expected points, but it is a forecast, not a retrospective. The xG version asks what should have happened in the match we just watched. The model version asks what do we expect to happen in a match not yet played.

The distinction matters because the two answer opposite questions and get used interchangeably. An xG-based justice table is evidence about the past that is frequently presented as a prediction of the future — “this team is due a correction”. It is not a prediction. It contains no information about fixtures, opponents or squad changes to come.

The baseline nobody states

A hidden assumption sinks a lot of xPts commentary: the idea that an average team should expect 1.5 points a match, half of the three on offer. It shouldn’t, and where a team plays decides most of it.

Across 16,992 finished matches in the nine leagues we model, home sides won 43.9% of the time and 25.6% of matches were drawn. That works out to an average of 1.57 points per match for the home team and 1.17 for the away team — a gap of four tenths of a point in every fixture, before anyone considers who is playing. A team with an unbalanced run of home and away games is not over- or under-performing its expectation; it has simply not played a representative sample yet.

Any xPts comparison that ignores this is measuring the fixture list as much as the football.

Four limits worth carrying

xG only knows about shots. A side that dominates territory, forces errors and creates nothing clear-cut registers a low xG and a low xPts, and both are correct on their own terms while missing what happened.

Game state distorts everything. A team leading from the tenth minute will concede chances and take few, because that is the rational way to protect a lead. Its xPts will look poor for a match it controlled. The same logic runs through red cards, where the shot profile after a dismissal reflects the situation rather than either side’s quality.

The samples are small. A season is 38 matches. Differences of a few points between a table and an xPts table sit comfortably inside the range that randomness produces on its own, and the arithmetic of small samples is unforgiving here.

xG models disagree. There is no single xG standard. Providers weight shot location, body part, assist type and defensive pressure differently, so two published xPts tables for the same league can differ meaningfully without either being wrong.

What we do, and what we don’t

Our model does not ingest shot-level data, so we publish no xG figures and no xPts table. What it produces is a probability for each outcome of each fixture — from which expected points follow in one line of arithmetic, for anyone who wants them.

We would rather publish the probabilities themselves, for a reason that runs through everything here: a probability can be scored against reality once the match is played, and an expected-points total mostly cannot. That scoring is what the public track record exists to do.

Use xPts for what it is good at — a check on whether a league table is telling you about performance or about finishing — and not as a forecast. And whatever the justice table says your team deserved, stake only what you can afford to lose.