Dimensionality reduction
An Atlas of Players
Reduce a season of per-90 production for 1,468 big-five outfielders to two principal components and football’s job titles start to dissolve: the two axes hold 74.3% of the variance, the silhouette score insists there are only 4 statistical attacking roles — and the similarity engine files Declan Rice next to attacking full-backs and Kevin De Bruyne.
The atlas
Every dot is a player-season. Right means more attacking output (shots, npxG, xGChain all load about +0.38 on PC1); up means the involvement comes early in moves (xGBuildup loads +0.49 on PC2), down means it comes at the end of them (npxG per shot loads −0.37). Search for anyone, click any dot, and the panel shows their percentile profile, their crowned archetype and their eight nearest statistical neighbours. Colour the cloud by its four statistical roles, by the badge, or by one of eight scouting archetype families — then use Isolate to dim everyone but a single family or archetype.
1,468 attacking profiles on two axes
PC1 (51.4% of variance) → · PC2 (23.0%) ↑ · axes cross at the pool average · dot size = minutes played
Roster table — every mapped player with role and archetype, filtered by the league and isolate controls above
| Player | Team | League | Listed | Role | Archetype | Min | npxG/90 | xA/90 | Buildup share |
|---|
What the axes are made of — full PCA loadings
| Feature | PC1 (attacking output) | PC2 (buildup depth) |
|---|
1 The pool contains two distinct players named Vitinha (Genoa’s striker and Paris Saint-Germain’s midfielder); similarity lists store names, so links to “Vitinha” resolve to whichever of the two sits closer on the map. Keyboard path: the search box, the roster table above, and the similar-player buttons in the side panel reach everything the pointer can.
Four roles, not ten
Ask coaches and you will hear of regista, trequartista, mezzala, raumdeuter. Ask the silhouette score and it answers four: clustering quality peaks at k = 4 (silhouette 0.266) and only degrades as k rises — 0.257 at k = 5, 0.231 at k = 9. On ten attacking features, the big five leagues contain Defensive anchors (560 players), Buildup connectors (418), Penalty-box finishers (265) and Elite creators (225). Each card below shows the role’s statistical fingerprint — its centroid, in standard deviations above or below the pool average — plus the five players closest to the archetype and the five biggest names living there. Click any name to find them on the atlas.
The four roles’ statistical fingerprints
cluster centroid per feature, z-score vs pool average (σ units) · bar left = below average, right = above
- above pool average
- below pool average
2 Role names are derived from each centroid’s most extreme features. “Defensive anchors” means lowest attacking involvement — the model sees no tackles or clearances, so it identifies defenders by the shape of what they don’t do with the ball in the final third.
Where the position on the team sheet lies
If listed positions described what players do, roles would just re-draw the D/M/F lines. They don’t: the adjusted Rand index between fitted role and Understat’s listed position is 0.279 — moderate agreement, exactly as the literature predicts. 148 players (10.1% of the pool) are strong mismatches: a listed defender producing like a finisher or creator, a listed forward producing like an anchor or connector, or a listed midfielder living purely in the box.
The famous cell is the top-right one: 42 listed “defenders” cluster as Elite creators — Federico Dimarco, David Raum and Álex Grimaldo lead a column of attacking full-backs whose output profile belongs with the wingers.3 Going the other way, 6 listed forwards cluster as Defensive anchors — Jørgen Strand Larsen played 2,353 minutes up front for Crystal Palace with the attacking involvement of a centre-back — and 25 listed midfielders are statistically pure Penalty-box finishers, led by Scott McTominay and Christoph Baumgartner. Click any cell to name every player in it.
Listed position vs fitted role
share of each listed position landing in each role (row %) · player counts labeled · click a cell for names
3 Understat’s primary listing is crude — it takes the first position string of the season, which is how Declan Rice and Dominik Szoboszlai both enter the data as “defenders” in 2025/26. The mismatch cells therefore mix two stories: players whose role genuinely outgrew their position, and players whose label was never right to begin with. Both are arguments against trusting the badge.
The shop-alike engine
Similarity here is the cosine between two players’ full 10-dimensional standardized vectors — it matches the shape of a profile, not its volume, so a 1,400-minute season can still match a 2,900-minute one. The engine’s answers pass the scouting eye test: Erling Haaland’s most similar player in Europe is Hugo Ekitike (cosine 0.989), Harry Kane’s are Deniz Undav (0.986) and Lautaro Martínez (0.985), and Lamine Yamal’s is Michael Olise (0.985). Then it produces the finding no scout would volunteer: Declan Rice’s nearest neighbours are attacking full-backs David Raum (0.981) and Álex Grimaldo (0.958) — plus Kevin De Bruyne (0.957).
Profile overlay
pool percentile per feature (0–100) · both players’ values labeled
A role is not a fingerprint
How much of a player’s identity do ten attacking features actually hold? The Player Vectors protocol gives an honest answer: build last season’s vectors (2024/25) independently, then ask each of the 933 players present in both seasons to find themselves among this season’s 1,468 candidates. The role label survives the summer: 71.4% keep the same cluster. The individual does not: exact same-player retrieval lands in the top 5 only 5.0% of the time (median rank 118). That is ~15× better than the 0.34% chance rate — these vectors clearly encode something persistent — but it is a role signature, not a fingerprint.
The ablation adds a wrinkle: plain Euclidean distance on z-scores actually edges cosine (top-10 11.4% vs 9.5%), and PCA truncation or whitening both hurt — with only 4 effective dimensions, there is no noise floor left to cut.
Retrieval ablation — four ways to measure “similar”
share of 933 cross-season queries whose own next season ranks in the top k · sortable
| Variant | Top-1 | Top-5 | Top-10 | MRR | Median rank |
|---|---|---|---|---|---|
| Cosine on z-scores (used on this page) | 1.9% | 5.0% | 9.5% | 0.049 | 118 |
| Euclidean on z-scores | 1.9% | 6.4% | 11.4% | 0.055 | 108 |
| Cosine on 4 PCA components | 1.5% | 4.8% | 7.6% | 0.042 | 127 |
| Cosine, PCA-whitened | 1.5% | 5.7% | 9.2% | 0.045 | 133 |