Findings / League parity
How competitive is each season? A parity ledger
team-game points = sum of a team's players' pts within one game_id. Gini of per-team win counts (wins/total-wins sum to 1); 0 = balanced, (N-1)/N = one team hoards all
Win-share Gini rose from 0.177 in 2023-24 to 0.2004 in 2025-26 -- across the three seasons on disk, the league looks more top-heavy, not more balanced. Two of those three seasons are partial vs. a full 1230-game season, so read this as a small, honest description, not a trend.
| Season | Games | Teams | Win-share Gini | Win% stdev | Mean abs margin | % close (≤5) |
|---|---|---|---|---|---|---|
| 2023-24 | 1230 | 30 | 0.177 | 0.1636 | 12.58 | 23.3 |
| 2024-25partial season | 1225 | 30 | 0.1798 | 0.1629 | 12.71 | 25.2 |
| 2025-26partial season | 1156 | 30 | 0.2004 | 0.1667 | 13.03 | 25.5 |
Scroll horizontally for all columns.
Methodology and confounds
- only game_ids with exactly 2 distinct teams; higher score wins (ties excluded from margins)
- Herfindahl of win shares; balanced floor = 1/N; normalized = (HHI-1/N)/(1-1/N)
- std of team win percentage -- games-normalized companion (robust to unequal game counts)
- mean/std of absolute final margin + pct of games decided by <= 5 points
- Games floor: 200 per season -- season below the floor is flagged meets_games_floor=false and excluded from the Lorenz chart. Full-season reference = 1230 games.
- NOT a prediction of any future season's parity (describes seasons already played)
- NOT reg-season-only (pooled with any playoff games in the parquet, which inflate win concentration)
- NOT strength-of-schedule adjusted (opponent-raw win counts)
- Results report season-level concentration measures with the stated games floor.