Players

One metric per dimension, because one number is not enough

There is no honest way to put a goalkeeper and a centre-forward in the same table. They do different jobs, measured by different data, and any single number that merges them is mostly reporting what position each player occupies.

For months this site published exactly that mistake. The player ranking measured goals per 90 minutes above a replacement player — a good metric, but a finishing one — and presented it as a league ranking. Checking the distribution by position made the problem obvious: every goalkeeper in the model received an identical value, because the model had nothing to say about them. It was not measuring them badly; it was not measuring them at all.

The fix is not a better number. It is admitting that several are needed, each with its own scale, its own credible interval and its own sample — and that comparing values across them is meaningless. A 0.20 in finishing and a 0.20 in goalkeeping are not the same thing.

Ranked on this page: finishing, contribution, contested possession, cross intervention. Model run but no ranking possible: shot-stopping (3 seasons), defenders.

Finishing

Goals per 90 minutes above a replacement-level player, after adjusting for minutes, opponent and home advantage. Goals are capped before the estimate, so one four-goal afternoon is not read as permanent skill.

What this list is not: a league ranking. The 40 published names are 36 forwards, 4 midfielders — it is a forwards metric, and should be read as one.

Player
Goals/90 above replacement
SAR
90% interval

Top 10 of 40 published. 600-minute minimum; fitted on 29,812 individual appearances since 2023-24 · r̂ máx 1.030 · 0 divergences.

Full finishing ranking

Attacking contribution

The same structure as the finishing metric, but with goals and assists together. It covers the midfielders and wingers who score little and create plenty — the players the goals-only metric could not see, by construction.

The “vs goals” column shows how many places each player moves against the goals-only ranking. That is where the story is: who the old number was underrating.

Player
Contribution/90 above replacement
value
90% interval

Bayesian estimate with shrinkage: few minutes pull the value toward replacement level and widen the interval. seasons 2023-24–2026-27 · 29,812 observations · 722 players · 600-minute minimum · r̂ máx 1.020 · 0 divergences.

What this metric does not measure (7)
  • Ranks and intervals are posterior summaries from a hierarchical model with shrinkage: low-minute players are pulled toward the replacement level, so a high raw goals+assists total does not guarantee a high rating.
  • The interval is a 90% posterior interval on the metric, not a confidence interval on a count. Two players whose intervals overlap are not separated by this model.
  • Goalkeepers are not measured by this metric. It counts attacking contribution, and 49 of 53 goalkeepers in the sample have zero goals and zero assists, so they sit at the floor by construction. Shot-stopping needs its own model (ADR-019).
  • Defenders are only partially measured: the metric captures their attacking output (set-piece goals, assists) and says nothing about defending.
  • This is a full-sample fit and is descriptive, not predictive. Any predictive use must go through the walk-forward panel (contrib_skill_walkforward.parquet), per ADR-017.
  • Goals+assists counts penalties and assists as recorded by SofaScore; secondary assists are not counted.
  • positional_distribution covers the whole fitted universe (2023-24 onwards, all players over the minutes cut), while the players list is the current-squad subset — the two are not the same population.

The distribution by position

The test this page exists to pass: if a whole position collapses onto practically one value, the metric is not measuring it. This covers the model's full universe, not only the players listed above.

Positionnmedianrangedistinct values
Forward1780.1570.817148
Midfielder2510.0190.433151
Defender240-0.0730.13684
Goalkeepernot measured53-0.1410.0013

How to read it: adding assists fixes midfielders, who now spread across a real range. It does not fix defenders, and it does not fix goalkeepers at all — they still sit on practically one value, because they neither score nor assist. That is why those positions get their own sections instead of a row in this list.

Contested possession

The probability of winning a duel — aerial or on the ground — estimated over each player's three-season career. It is the first metric on this page where defenders and midfielders genuinely separate from one another, because the outcome is attributed to the player who contested it, not to the whole team.

What this is not: a defensive rating. It measures contested possession — one narrow, honest dimension — and nothing else. Individual defensive contribution to goals conceded remains unmeasurable in this league, and no metric on this page pretends otherwise.

Values are career-pooled by necessity: a single season is not enough to separate players. A newly arrived signing cannot be rated for roughly two seasons. In defenders' aerial duels, the profile tag (higher or lower aerial involvement) distinguishes centre-backs from full-backs — compare within the same profile.

Aerial duels — defenders

29 of 135 fitted players separate from the positional average (1.05 expected by chance). The list shows only players in the league this season.

Player
P(win) vs positional average
p.p.
90% interval

Aerial duels — midfielders

14 of 75 fitted players separate from the positional average (0.95 expected by chance). The list shows only players in the league this season.

Player
P(win) vs positional average
p.p.
90% interval

Ground duels — defenders

16 of 114 fitted players separate from the positional average (0.1 expected by chance). The list shows only players in the league this season.

Player
P(win) vs positional average
p.p.
90% interval

Ground duels — midfielders

35 of 193 fitted players separate from the positional average (0.9 expected by chance). The list shows only players in the league this season.

Player
P(win) vs positional average
p.p.
90% interval

Seasons 2023-24–2026-27. Every cell passed three pre-registered gates: separability above 3× chance, club-quality correlation under 0.3, and stability across players who changed clubs. The league-average rate is exactly 50% by construction — every duel won is another player's duel lost.

Goalkeepers: three axes, published separately

There is no single goalkeeper score here, and that is deliberate: the three axes have season-to-season reliabilities ranging from 0.72 to below zero, and any average across them would manufacture precision. Each axis says one thing, with its own uncertainty.

Cross intervention

The share of crosses faced where the keeper comes for the ball — a punch or a claim. It is the first goalkeeper axis on this site where players genuinely separate: 12 of 50 in the fitted panel, beyond chance (~5 expected). And it belongs to the keeper, not the club: two keepers at the same club do not resemble each other (correlation -0.10). The list shows only keepers in the league this season.

We do not call this “command of the area”: the metric cannot tell a commanding catcher from a punch-happy keeper.

Player
Intervention vs league average
p.p.
90% interval

No keeper changed clubs between consecutive seasons with enough matches, so whether this trait travels with the player is still untested.

Sweeping (a style)

How often per 90 minutes the keeper leaves the box to cut out balls behind the defence. This is a style axis, not a quality one: about a third of its persistence comes from the club's defensive line height, not the keeper. A high value describes how they play, not how well.

Player
Sweeps per 90 vs league average
per 90
90% interval

Shot-stopping

0 of 50 keepers separate from the average over 4 seasons of shots (~150 per keeper). This is no longer a data shortage: the answer is still that Liga keepers' shot-stopping differences are real but too small to rank confidently. We publish the null rather than a list that would pretend to know.

Defenders

There is no defender ranking on this page, and that is the result — not a publishing failure.

The model tried to estimate how much each defender reduces the goals his team concedes, comparing what happens with and without him on the pitch. The problem is structural: centre-backs almost always play with the same partner, and the league is 34 matches long. The data do not contain enough information to separate a player from the man next to him.

What comes out of the model is mostly the club's defence, spread over whoever was on the pitch. Of the 786 players estimated, none passed the criterion set in advance — and it was set before anyone saw the result, precisely so there would be no temptation to loosen it afterwards.

Publishing the table anyway would be selling noise as a ranking. We would rather say we do not know.

Walkforward t
1.699
N players
786
N separable
0
Median shrinkage
-0.022
Max shrinkage
0.134
N ci excludes zero
12
Expected false positives at 90pct
78.6
Walkforward logscore gain
2.34
Passes shrinkage
no
Passes out of sample
yes
Separable
no
Criterion
>= 20 players with shrinkage >= 0.2 AND positive walk-forward log-score gain

Adjusted plus-minus on goals conceded, with hierarchical shrinkage. seasons 2023-24–2026-27 · 786 players · 450-minute minimum · r̂ máx 1.010 · 0 divergences.

What this metric does not measure (10)
  • NO RANKING IS PUBLISHED. Individual players could not be separated from their team by the pre-registered criterion: >= 20 players with shrinkage >= 0.2 AND positive walk-forward log-score gain. Only 0 of 786 players had a posterior meaningfully narrower than the population prior.
  • Substitution timing is not in the source data. Exposure is minutes-weighted, so a substitute is credited with a fraction of the whole match rather than the specific minutes they were on the pitch.
  • One static effect per player across the whole panel: 34 matches a season is too thin for a per-season defensive effect.
  • Goals conceded is a team outcome. Every on-pitch player is in the model, not only defenders, because forwards pressing also matter.
  • Players below the minutes threshold are pooled into a single replacement bucket pinned at zero.
  • 27% of the spread in the point estimates is between clubs rather than between club-mates, and the ratings correlate at r=-0.51 with their club's goals conceded per match: what is being measured is mostly the club, with player names attached.
  • Averaged to club level the ratings reproduce club goals conceded at r=-0.985 across 23 clubs. The model is a club defence model that distributes its answer over whoever was on the pitch.
  • Collinearity retains only 11% of the information the line-ups nominally carry: summed over players the model resolves 11 effective parameters against 105 if every other effect were known. The most-used player in the panel, Diogo Costa (8822 minutes), reaches shrinkage 0.028 where 0.324 was attainable.
  • With the shared hierarchical mean removed, frequent team-mates have a median posterior correlation of -0.04 (players who never shared a pitch: -0.00); the data pins their combined effect better than the split between them.
  • Walk-forward (fit 2023-24+2024-25, score 2025-26): adding player effects changed the out-of-sample log score by +2.34 nats over 612 team-matches (t = +1.70).

Each metric has its own scale. Do not add, compare or average values across sections: a goalkeeper and a forward are not measured in the same unit, and ranking them together was exactly the mistake this page exists to correct.

How the model works