Project Details
Project information
- Category: Python, XGBoost, scikit-learn, pandas, Streamlit, EWMA, GPS workload data
- Project date: March 2026
- Client: Departamento de Data del Club, Real Madrid C.F. · Madrid, Spain
- Team: Group A — trAIn Labs
- License: Apache License 2.0
- Project URL: github
Prediction of Acute vs Chronic Workload Ratio for Players
Built during my Data Scientist internship at Real Madrid C.F. for the Club's Data Department, this is an end-to-end tool that predicts and visualises the Acute vs Chronic Workload Ratio (ACWR) — a key injury-risk indicator that compares an athlete's recent load (acute, ~7 days) against their longer-term load (chronic, ~28 days). Values outside a safe range signal elevated risk, so the tool lets fitness coaches and technical staff plan training with data rather than experience alone — and without writing code or querying databases.
A data pipeline turns a season of period-level GPS data into clean daily player loads: it caps outliers per player and exercise type, aggregates drills into one row per player-day, fills rest days, and engineers session-composition and calendar features. Three independent XGBoost models — one each for total distance, high-intensity accelerations, and high-speed running — predict workload from planned session inputs, tuned with RandomizedSearchCV over 10-fold cross-validation on a log-transformed, scaled target.
Forecast loads are stitched onto historical series and converted to ACWR using EWMA smoothing (acute α = 0.25, chronic α ≈ 0.069), with a 28-day warm-up. Everything is surfaced through a bilingual (English / Spanish) Streamlit app with four pages: a squad Dashboard with colour-coded ACWR per player, a Planning & Forecast calendar that projects a 15-day ACWR forecast across all 28 players with injury-risk alerts, a Player Customization view to tweak an at-risk player's plan day-by-day and compare against the original, and an Export Plan page for one-click A3 PDF schedules. The whole squad is forecast in a single vectorised prediction — no day-by-day recursion.