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 roleMeaningMacro role familyScored in v0
GKGoalkeeperGoalkeeperNo
CBCentre-backDefenderYes
FBFull-back or wing-backDefenderYes
DMDefensive midfielderMidfieldYes
CMCentral midfielderMidfieldYes
AMAttacking midfielderMidfieldYes
WWingerAttackYes
STStriker or centre-forwardAttackYes

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. LM and RM map to W, 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. WB maps to FB. One role, one pool.

Metric masks

A case asks about three or four metrics, chosen for the role:

Broad roleMetrics requested
GKsavestotal_passespass_success
CBclearancesaerials_wontackles_wonpass_success
FBtackles_woninterceptionsaccurate_crossestotal_passes
DMtackles_woninterceptionstotal_passespass_success
CMtotal_passespass_successkey_passestackles_won
AMkey_passesshotsdribbles_wontotal_passes
Wdribbles_wonkey_passesshotsaccurate_crosses
STshotsgoalsaerials_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
BandPercentileValues in Premier LeagueShare of appearances
1078.10
278.196.81
396.81002+

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.