FootballEdgeSeason 2026/27Self-updating record
How it works

What xG actually measures

Expected goals gets thrown around a lot, usually by people who have never had to build anything with it. Here is the plain version.

The number itself

Every shot in a football match gets a score between 0 and 1. That score is the share of the time a chance like that gets scored, worked out from a large history of similar shots — similar distance, similar angle, similar body part, whether it followed a dribble or a cross, how many defenders were in the way.

A tap-in from four yards might be 0.8. A hopeful effort from thirty yards is more like 0.03. Add up every shot a team took and you get their expected goals for the match: the number of goals an average side would have scored from those chances.

What it is good for

Chance quality is a far more stable thing than results are.

A team that wins 1-0 through a deflection, having been out-shot 0.4 to 2.1 on xG, did not play well. They got away with one. Do that three times and the league table says you are flying, while the underlying numbers say a correction is coming. Do the reverse — create the better chances and lose anyway — and the table is lying about you in the other direction.

Over a handful of matches, results are mostly noise. Goals are rare events, and rare events swing wildly. Chance quality settles down much faster, which is why every model worth anything is built on some version of it rather than on results.

Three things people get wrong

It is not a measure of who deserved to win. It is a measure of the chances created. A side can create less and win entirely fairly by defending well and taking their one opportunity. Deserve is a moral word and xG is not a moral number.

One match of xG tells you almost nothing. The sample is tiny. A single missed sitter moves it more than an hour of controlled possession. It becomes useful across ten matches, and genuinely informative across a season.

Not all xG models agree. Different providers use different features and different training data, so the same match can come out at 1.8 or 2.3 depending on whose number you are reading. Comparing xG figures across sources is a mistake people make constantly. Ours come from a single provider for exactly that reason.

How we use it

Our model turns match-by-match xG into an attack and a defence rating for every team, updated after each game with more weight on recent matches. Those ratings feed a scoreline grid, and every market we look at is read off that same grid.

That is the whole engine. It is not complicated, and complication is not where the difficulty lives — the difficulty is in being honest about what the output is worth, which is the subject of most of the rest of these pages.

Next: Closing line value — the only honest scoreboard →

← All explainers