GoalSoon · 5 September 2026

One number does the work of an expected-goals model — in the divisions the models were not built for.

We hold shots on target. A provider holds a model of where every shot came from. Measured on the same 23,816 club-matches, with our coefficient learned leaving each season out, shots on target win in the German third tier (+0.089), the Championship (+0.038) and the Eredivisie (+0.033), tie in the Premier League and the Bundesliga, and lose in La Liga, Portugal and Belgium. The order is the finding: the elaborate model never beats the simple count in the richest divisions and the simple count never wins in the smallest — an xG model is trained where the data is, and carried elsewhere the extra detail stops paying for itself.

A provider’s expected-goals model weighs where a shot was taken from, what part of the body it came off, how many defenders were in the way. We hold one number instead: shots on target. Across 23,816 club-matches in ten divisions, we put them against each other on the same matches, and the answer depends entirely on which division you are in.

How the two were compared

Both are judged on the same question: how well does the number predict the goals that club actually scored in that match? The measure is a correlation, and both are measured on exactly the same matches — only those carrying the provider’s xG. That matters more than it sounds. Our own figure exists for every match we hold, theirs for far fewer, and comparing a number measured on 6,712 matches against one measured on 666 is not a comparison at all.

Our side also gets no home advantage. Ours is one coefficient — goals per shot on target — and it is learned leaving each season out: the number applied to 2023/24 never saw 2023/24. Their model never saw these matches either, so neither side is marking its own homework.

What came out

DivisionShots
on target
Their
xG
3. Liga0.5540.464
Championship0.5720.534
Eredivisie0.6340.601
Premier League0.5930.578
Bundesliga0.6170.613
Serie A0.5440.563
Ligue 10.5750.595
La Liga0.5570.585
Primeira Liga0.5960.625
Pro League0.5480.588

An arrow marks a division where the difference holds up — up for shots on target, down for their model. The four rows without one are ties. Sample sizes run from 1,144 matches (3. Liga) to 3,336 (Championship), 23,816 in all.

Three of those differences are real in one direction and three in the other; the four in the middle are not differences at all. The test is Steiger’s, which is the right one when two numbers are compared against the same outcome on the same matches: 3. Liga p < 0.001, Championship p = 0.001, Eredivisie p = 0.010, and going the other way Belgium p = 0.006, La Liga p = 0.017, Primeira p = 0.039. The Premier League gap of +0.014 is p = 0.22, which is nothing.

The pattern is the finding

Sort those ten rows and the order is not random. Where the counting model wins, it wins in the German third tier, the English second tier and a mid-sized top flight. Where it loses, it loses in La Liga, in Portugal, in Belgium. Nowhere does the elaborate model beat the simple one in the divisions with the most money in them — the Premier League and the Bundesliga are dead heats — and nowhere does the simple one win in a division that is small and outside the main leagues.

The straightforward reading: an expected-goals model has to be trained, and it is trained where the tracking data is richest. Carried into a division it was not built for, the extra detail stops paying for itself, and one honest count of shots on target does the same work or better. That is not a claim that shot placement does not matter. It is a claim about where the modelling of it currently reaches.

What this does not say

Neither number is good. A correlation of 0.6 against goals in a single match means most of what happens in a football match is still outside both. Nothing here says one match can be predicted; it says which of two summaries of a match is closer to its scoreline, and by a margin that in six of ten divisions is under 0.03.

Four divisions we hold are missing from the table because the provider’s xG barely exists in them — League One (666 matches), League Two (668), Ligue 2 (none at all) and Serie B (550). That absence is its own version of the same point.

Our number runs live on all sixteen divisions we cover, and the coefficient is each division’s own: 0.33 goals per shot on target in the Bundesliga, 0.29 in Serie B. We publish it, and the error with it.

expected goalsxGmethodChampionshipEredivisie3. Liga
Follow this
New pieces go out by RSS — paste that into any reader and you get them as they land. Everything here is free, including the full season packs the numbers come from.

Comments

No account, no email. Links are not allowed — say it in words.

Loading…