Players mapped
1,468
outfielders, five leagues
Variance on two axes
74.3%
PC1 51.4% + PC2 23.0%
Roles found
k = 4
silhouette 0.266, best of k = 4–9
Agreement with the badge
ARI 0.28
roles vs listed position

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

    Source: Understat, big-5 leagues, 2025/26 · n = 1,468 players ≥ 900 min · computed by pipeline/model_player_embeddings.py
    Roster table — every mapped player with role and archetype, filtered by the league and isolate controls above
    All mapped players with role, minutes and key per-90 values
    PlayerTeamLeague ListedRoleArchetype MinnpxG/90 xA/90Buildup share
    What the axes are made of — full PCA loadings
    PCA loadings of each feature on the two map axes
    FeaturePC1 (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.

    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

    Source: Understat, big-5 leagues, 2025/26 · n = 1,468 players · listed position = Understat primary listing · computed by pipeline/model_player_embeddings.py

    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

      Source: Understat, big-5 leagues, 2025/26 · n = 1,468 players · cosine on z-scored per-90 vectors · computed by pipeline/model_player_embeddings.py

      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.

      Role persistence
      71.4%
      same cluster, 2024/25 → 2025/26
      Find-yourself top-5
      5.0%
      exact-player retrieval
      Chance top-5
      0.34%
      5 of 1,468 candidates
      Median self-rank
      118
      of 1,468

      Retrieval ablation — four ways to measure “similar”

      share of 933 cross-season queries whose own next season ranks in the top k · sortable

      Cross-season retrieval accuracy by similarity variant
      VariantTop-1Top-5 Top-10MRRMedian rank
      Cosine on z-scores (used on this page)1.9%5.0%9.5%0.049118
      Euclidean on z-scores1.9%6.4%11.4%0.055108
      Cosine on 4 PCA components1.5%4.8%7.6%0.042127
      Cosine, PCA-whitened1.5%5.7%9.2%0.045133
      Source: Understat, big-5 leagues · 933 players present in both 2024/25 and 2025/26 · Decroos & Davis (2019) protocol · computed by pipeline/model_player_embeddings.py