Ranking players by what they do with the space around them, not by how much they touch the ball.
Matteo Vezzoli & Armando Mio — 2026
ℹ️ Fork Notice: This repository is a dedicated fork of Contextual Football Scouting.
The complete theoretical framework, mathematical proofs, academic paper, and original tracking-data methodology (StatsBomb 360) are documented in the main repository:
🔗 Corresponding README in the original repository: Contextual-Football-Scouting/README.md
This fork adapts the contextual scouting methodology to work with Wyscout seasonal aggregated data (webapp/backend/data/wyscout_sample.csv):
-
Wyscout Statistical Proxies:
-
H1 — Space Control & Value: Replaced 360° convex hull geometry with seasonal proxies for Progression (
Progressive passes/90,Progressive runs/90,Passes to final 3rd/90), Reception (Touches in box/90,Received passes/90), Gravity (Fouls suffered/90,Offensive duels/90), and Dangerousness (xG/90,xA/90). -
H2 — Decision Quality: Replaced event-level freeze-frame xPass/xEPV models with a Decision Quality Index (DQI) evaluated across Possession Accuracy, Duel Robustness, Risk Readings /90 (
Key passes/90+Smart passes/90), and Risk Accuracy (Accurate progressive passes, %). - H3 (Off-Ball Movement): Excluded, as off-ball runs and receiver resolution require spatial tracking coordinates not present in seasonal aggregated data.
- H4 — Player Similarity: Replaced the 11-axis tracking DNA with an 8-axis orthogonal style DNA combining H1 and H2, computing within-role Euclidean distance look-alikes across 1,059 eligible players.
-
H1 — Space Control & Value: Replaced 360° convex hull geometry with seasonal proxies for Progression (
-
100% In-Memory Full-Stack Webapp:
- Replaced PostgreSQL / Supabase and offline DB migration scripts with a lightweight in-memory FastAPI backend (
webapp/backend/data_module.py) that loadswebapp/backend/data/wyscout_sample.csvdirectly on startup. - Sub-5ms response times across all endpoints (
/players/,/similar/,/roles/, and/space-control/). - Modern React 19 + Vite frontend with responsive radars, multi-criteria filtering, and head-to-head similarity overlays.
- Replaced PostgreSQL / Supabase and offline DB migration scripts with a lightweight in-memory FastAPI backend (
-
Expanded Player Pool:
- Expanded the evaluation pool from 272 players (StatsBomb 360 minutes threshold) to 1,697 total players (1,059 outfield players with
$\ge 300$ minutes) from the Wyscout seasonal sample dataset.
- Expanded the evaluation pool from 272 players (StatsBomb 360 minutes threshold) to 1,697 total players (1,059 outfield players with
Original Project: ArMat-Analytics/Contextual-Football-Scouting