About & Methodology

Data Sources ยท Metrics ยท Models ยท Pipeline

Data Sources

All data is sourced from the official Euroleague Basketball API via the euroleague-api Python package. No scraping is involved โ€” every data point comes from Euroleague's official endpoints.

19 Seasons (2007-2025)
5,000+ Games Analyzed
2M+ Play-by-Play Events
700K+ Shot Coordinates

Dashboard Pages

Player Metrics

Team Metrics

Predictive Models

Game Control Metrics

The Game Control Index (GCI) analyzes Win Probability trajectories โ€” the second-by-second likelihood of each team winning โ€” to measure how teams win, not just whether they did. Built from WP replay data across every game this season.

Historical GCI Trends

The GCI History page extends the Game Control Index across all 19 Euroleague seasons (2007โ€“2025), covering 5,000+ games. The same six sub-metrics and GCI Rating formula are applied to each historical season independently, with z-normalization computed within each season (so a GCI of 70 in 2007 means the same relative dominance as 70 in 2024).

Teams are included in trend comparisons only if they have 3 or more seasons of data. The 10 "legacy" teams (Olympiacos, Barcelona, Real Madrid, Panathinaikos, Maccabi Tel Aviv, Anadolu Efes, Fenerbahce, Baskonia, EA7 Milano, Zalgiris) have been present in all 19 seasons. Era breakdowns use three periods: Expansion Era (2007โ€“2015, 24 teams), Contraction Era (2016โ€“2019, 16 teams), and Modern Era (2020โ€“2025, 18โ€“20 teams).

Data Pipeline

The entire analytics suite updates via a single command (python refresh_all.py) that orchestrates the full pipeline:

1
Fetch latest data from Euroleague API
2
Parse game results and play-by-play events
3
Train ML models (Win Probability, Oracle)
4
Compute ratings (Adjusted, Elo, RAPM, WPA, WIR)
5
Run Monte Carlo simulation (10K iterations)
6
Generate visualizations and export dashboard data

Tech Stack

Quick Glossary