What each row carries
The team-level CSV is the consumer surface. Columns:
| Column | Definition |
|---|
team_id, team_name, season_label, data_as_of | Team identity and the season the figures refer to. |
xi_total_minutes, xi_mean_minutes_per_player, xi_median_minutes | Aggregate club minutes for the 11 predicted starters. |
squad_total_minutes, squad_mean_minutes_per_player | Aggregate club minutes for the full 26-man predicted squad. |
n_xi_matched, n_squad_matched | Number of slots we could match to a player-season row. The remaining slots have no minutes recorded. |
match_rate | n_squad_matched / 26. Used by downstream consumers to weight the signal. |
gk_minutes | Goalkeeper-only minutes carve-out. |
The detail CSV preserves the per-player slot, including unmatched ones, so the per-team aggregates are auditable. The spec column club_minutes_last_90_days exists on the detail CSV but is intentionally blank — ratings_player.csv is season-aggregated, not per-match, so a true rolling-90-day window is not derivable from what is on disk.
…