Role taxonomy
Every benchmark speaks one position vocabulary. Providers map onto it offline, in versioned mappers, and no provider's native labels ever reach a contract.
This page is shared. A role means the same thing in Transfers as it does in League Normalization, which is only true because the definition lives here rather than inside either task.
The eight broad roles
| Broad role | Meaning | Macro role family | Scored in v0 |
|---|---|---|---|
GK | Goalkeeper | Goalkeeper | No |
CB | Centre-back | Defender | Yes |
FB | Full-back or wing-back | Defender | Yes |
DM | Defensive midfielder | Midfield | Yes |
CM | Central midfielder | Midfield | Yes |
AM | Attacking midfielder | Midfield | Yes |
W | Winger | Attack | Yes |
ST | Striker or centre-forward | Attack | Yes |
The broad role selects two things: the metric mask a case is asked about, and the percentile
peer pool it is ranked against. A CM case is ranked against CM match performances, not against
all midfielders.
The macro role family is carried alongside it. It is the fallback stratum wherever a role is too thin to support its own pool, and the axis for coarse leaderboard breakdowns.
Goalkeepers carry a mask and a pool, and are not scored in v0. The source exposes almost nothing goalkeeper-specific, and goals conceded ranks the defence rather than the keeper.
Provider mapping
Football data providers do not agree on how to describe a position, and they are not wrong to disagree — they are describing different things. A transfer database records where a player is registered. A match-event provider records where he lined up on the day. One publishes a single primary label, another the set of positions actually played across a season, another only a coarse group such as "Midfield".
The Arena adopts none of them. Each provider gets its own mapper, which resolves whatever position fields that provider exposes onto the eight broad roles above. Mapping happens offline, in versioned mappers, and never inline at request time. A provider's native labels never reach a contract, a request, or a leaderboard.
Every mapper emits broad_role, macro_role_family, role_mapping_confidence and
role_mapping_version, so a role assignment is auditable rather than assumed — you can ask why a
given player was pooled as a winger and get an answer.
Adding a provider means adding a mapper. The taxonomy does not change to accommodate one. If it did, a role would mean something slightly different depending on where the data came from, and peer pools built from different sources would stop being comparable — which would quietly undermine every percentile on the board.
Two mappings are worth naming because they surprise people:
- Wide midfielders are wingers.
LMandRMmap toW, not to a midfield role. What they do in a match — crosses, dribbles, touches in wide areas — resembles a winger far more than a central midfielder, and the peer pool is built from what happens on the pitch. - Wing-backs are full-backs.
WBmaps toFB. One role, one pool.
Metric masks
A case asks about three or four metrics, chosen for the role:
| Broad role | Metrics requested |
|---|---|
GK | savestotal_passespass_success |
CB | clearancesaerials_wontackles_wonpass_success |
FB | tackles_woninterceptionsaccurate_crossestotal_passes |
DM | tackles_woninterceptionstotal_passespass_success |
CM | total_passespass_successkey_passestackles_won |
AM | key_passesshotsdribbles_wontotal_passes |
W | dribbles_wonkey_passesshotsaccurate_crosses |
ST | shotsgoalsaerials_wonkey_passes |
Masks are narrow on purpose. A full mask of eight metrics at ten bands is eighty probabilities per case, which the current cohort is far too small to need. They are also chosen for band behaviour, not only for football salience: a metric that is zero in almost every match wastes the grid, because every zero collapses into one tie block at the bottom of the percentile scale.
What a role's grid looks like
Because the pool is per role, the grid is too. The same metric is cut differently for a striker than for a midfielder, and differently again in each league:
goals for ST| Band | Percentile | Values in Premier League | Share of appearances |
|---|---|---|---|
| 1 | 0–78.1 | 0 | 78.1% |
| 2 | 78.1–96.8 | 1 | 18.7% |
| 3 | 96.8–100 | 2+ | 3.2% |
A band’s percentile width is its share of peer appearances, because bands are cut at cumulative mass. Predicting these shares is the league base rate, and scores zero.
Contract version 2026-09-transfers-distributional-v0. Grids are published for
Bundesliga, LaLiga, Ligue 1, Premier League and Serie A.