Basketball Data Science All studies Scouting one-pagers Code on GitHub
Every five-man lineup, two seasons

Who actually moves the scoreboard? Player value with honest error bars

Every plus-minus argument has the same flaw: the players you share the floor with. A bench guard who rides shotgun with the MVP posts a glowing on/off number; a good starter marooned on a bad roster posts a grim one. This study builds the standard remedy, RAPM-family regularized regression over every five-man lineup. It builds it twice, in R and Python, for 2023-24 and the just-completed 2025-26 season. Then it does the two things public plus-minus work most often skips: it reports uncertainty honestly, and it rebuilds the whole thing from a second, independent unit of observation to see if the answer holds.

Terms used in this analysis
Median interval width
±2.5 pts/100
One public season cannot separate the 5th-best player from the 30th.
Cross-model agreement
0.97
Spearman correlation between two independently built models.
Stints parsed
62,658
Substitution-to-substitution units from all 1,230 games of play-by-play.
Home-court advantage
+2.2 pts/100
Estimated as a byproduct of the stint model, not assumed.
The method

Shrinkage chosen by prediction, not by hand

Both models in this study turn basketball into rows of a regression, one row per unit of play, and differ in what a row holds. The diagram below draws one real row of each.

How each model turns basketball into one row of a regressionLineup modelOne row per five-man lineup, summed overthe seasonMIL's best high-volume lineup+1Brook Lopez+1Damian Lillard+1Khris Middleton+1Giannis Antetokounmpo+1Malik Beasley0every other playerOutcome: +199 over 1,302 possessions =+15.3 per 100Weight: 1,302 possessionsOpponents: not in the season totals, so notadjusted forStint modelOne row per stint: no substitution byeither teamIND at MIL, fourth quarter, 7:33 to 0:00MIL (home)+1Lopez+1Lillard+1Middleton+1Antetokounmpo+1BeasleyIND (away)−1Haliburton−1Mathurin−1McConnell−1Toppin−1Turner1intercept: home-court advantageOutcome: MIL 14, IND 25 over 15.7possessions = −69.9 per 100Weight: 15.7 possessionsOpponents: on the same row, so every playeris adjusted for the other nineBoth models stack their rows and fit a possession-weighted ridge regression, with thepenalty chosen by cross-validation. Each player's coefficient is his net points per 100possessions with the other players on the floor accounted for.Rows in 2023-24: 15,484 lineups; 32,268 stints, after slivers such as a lineup on the floor forone free throw were merged into the next stint (62,658 parsed).
How each model turns basketball into one row of a regressionLineup modelOne row per five-man lineup, summed over theseasonMIL's best high-volume lineup+1Brook Lopez+1Damian Lillard+1Khris Middleton+1Giannis Antetokounmpo+1Malik Beasley0every other playerOutcome: +199 over 1,302 possessions =+15.3 per 100Weight: 1,302 possessionsOpponents: not in the season totals, so notadjusted forStint modelOne row per stint: no substitution by eitherteamIND at MIL, fourth quarter, 7:33 to 0:00MIL (home)+1Lopez+1Lillard+1Middleton+1Antetokounmpo+1BeasleyIND (away)−1Haliburton−1Mathurin−1McConnell−1Toppin−1Turner1intercept: home-court advantageOutcome: MIL 14, IND 25 over 15.7possessions = −69.9 per 100Weight: 15.7 possessionsOpponents: on the same row, so every player isadjusted for the other nineBoth models stack their rows and fit apossession-weighted ridge regression, with thepenalty chosen by cross-validation. Eachplayer's coefficient is his net points per 100possessions with the other players on thefloor accounted for.Rows in 2023-24: 15,484 lineups; 32,268 stints,after slivers such as a lineup on the floor forone free throw were merged into the next stint(62,658 parsed).
One real row from each model. The lineup model sees a five-man unit's season total and its five players; the stint model sees one stretch without substitutions, both fives, and which team was at home. Both are fitted the same way, by possession-weighted ridge regression.

The model's one free knob, how hard to shrink, is not a taste decision. Cross-validation chooses the ridge penalty (λ = 3200 in both seasons). The figure below shows why that choice is defensible rather than decorative: predictive error falls, bottoms out, and rises again as the penalty grows. The model simply takes the minimum.

The cross-validation curve that picks the ridge penalty. Necessary because shrinkage is the entire difference between this model and raw on/off. This figure is the evidence that the amount of shrinkage was chosen by held-out prediction, not by hand.
Raw on/off versus the regularized estimate for every qualifying player. The before/after of the method: the players pulled hardest toward zero are exactly the low-minute, star-adjacent profiles whose raw numbers are most contaminated: visible teammate-context correction, one dot per player.
The ranking

The error bars are the real headline

What comes out the other side passes the eye test at the top: Jokić (+5.5 per 100), Anunoby, Brunson, George, Gilgeous-Alexander lead 2023-24; Wembanyama (+6.5) and Gilgeous-Alexander lead 2025-26. But the study's real headline is the width of the intervals: the median 95% bootstrap CI spans about ±2.5 points per 100 possessions. One season of lineup data genuinely cannot separate the 5th-best player from the 30th, and a model that pretends otherwise is selling something.

The 2023-24 player values with their bootstrap intervals: the study's most important figure precisely because of the error bars. The ordering is the headline everywhere else; here the honest message is how much the intervals overlap, which is what a front office actually needs to know before acting on a single-season number.
The replication

Two models, no shared plumbing, one answer

A ranking with intervals still deserves suspicion if it only exists in one model. So the study rebuilds valuation from scratch at a different grain: 62,658 substitution-to-substitution stints parsed from all 1,230 games of play-by-play, with an opponent-adjusted design. Its unpenalized intercept lands at +2.2 points per 100. That is the home-court advantage, estimated as a byproduct rather than assumed, and a built-in sanity check that the design matrix means what it claims. The two models share no code path and no data feed.

Two independent builds of player value and where they meetLineup modelSOURCEthe NBA's season lineup totals(stats.nba.com)UNIT15,901 five-man lineupsAUDITlineup plus-minus re-adds to everyteam's season total (largest miss: 0points)MODELridge on each lineup's five playersRESULT454 player valuesStint modelSOURCEthe season's play-by-play, event byeventUNIT62,658 stints from 1,230 gamesAUDITplus-minus matches the NBA's own feedin 99.8% of player-gamesMODELridge on both fives, with opponentsRESULT452 player values, and home court worth+2.2 per 100 as a byproductWHERE THEY MEET452 players are in both. Ranked by each model, theirorders agree with a Spearman correlation of 0.97.No code path and no data feed is shared between the two columns, so their agreement is evidenceabout the players, not the plumbing.
Two independent builds of player value and where they meetLineup modelSOURCEthe NBA's season lineup totals(stats.nba.com)UNIT15,901 five-man lineupsAUDITlineup plus-minus re-adds to every team'sseason total (largest miss: 0 points)MODELridge on each lineup's five playersRESULT454 player valuesStint modelSOURCEthe season's play-by-play, event by eventUNIT62,658 stints from 1,230 gamesAUDITplus-minus matches the NBA's own feed in99.8% of player-gamesMODELridge on both fives, with opponentsRESULT452 player values, and home court worth+2.2 per 100 as a byproductWHERE THEY MEET452 players are in both. Ranked by eachmodel, their orders agree with a Spearmancorrelation of 0.97.No code path and no data feed is shared betweenthe two columns, so their agreement is evidenceabout the players, not the plumbing.
The two builds side by side. Each starts from its own source, passes its own audit against the NBA's totals or feed, and is fitted on its own rows; they meet only at the end, where their player rankings are compared.

Correction, October 19, 2026. The first stint build put events in the feed's numbering order, which is not the order they happened, and gave free throws to whoever was on the floor at the free throw instead of at the foul. Its league totals still checked out, so nothing flagged it. Checked player by player against the NBA's own feeds, it now matches: plus-minus is exact for 99.8% of player-games, up from 41%. The ranking barely moved (the two models now agree at 0.97, up from 0.96), and the figures here are from the corrected build.

Stint-level RAPM against the aggregate lineup model, one dot per player (Spearman 0.97). The convergent-validity figure: two independently built models, different units of observation, different feeds, near-identical player ordering. Agreement this strong is the best public-data evidence that the values reflect the players rather than the plumbing.
Five-man units

Lineup claims are gated by an audit

Lineups themselves get the descriptive treatment, where the volume filter does the honest work: among five-man units with 1,000+ possessions, the best of 2023-24 was Milwaukee's Lopez–Lillard–Middleton–Antetokounmpo– Beasley at +15.3 per 100 over 1,302 possessions. Every lineup total is gated by exact reconstruction of official team totals. The model is not allowed to describe a season it cannot re-add.

The takeaway

Trust the tier, not the rank

The takeaway for a decision-maker is deliberately modest: with one public season, trust the tier, not the rank; trust a value more when two independent constructions agree on it; and treat any lineup-value claim without an error bar as marketing.

What one season's intervals can and cannot separate1. Three tiersAll 454 players with 300+ possessions in 2023-24, sorted by where their 95% interval sitsagainst zero (league average)40 clearly above average388 cannot tell from average26 clearly below average2. Ranks the 5th-ranked player cannot be separated fromEach dot is one of the top 70 players' estimates. The band is Shai Gilgeous-Alexander's 95%interval (+2.2 to +7.3 per 100).0#5 Gilgeous-Alexander#30 Pritchardranks 1 to 53: inside the bandrank 70Trust the tier, not the rank: the data place these players near the top, but cannot orderthem within it.
What one season's intervals can and cannot separate1. Three tiersAll 454 players with 300+ possessions in 2023-24,sorted by where their 95% interval sits againstzero (league average)40clearly above average388cannot tell from average26clearly below average2. Ranks the 5th-ranked playercannot be separated fromEach dot is one of the top 70 players' estimates.The band is Shai Gilgeous-Alexander's 95% interval(+2.2 to +7.3 per 100).0#5 Gilgeous-Alexander#30 Pritchardranks 1 to 53: inside the bandrank 70Trust the tier, not the rank: the data placethese players near the top, but cannot orderthem within it.
What the intervals allow. Top: most players cannot be told apart from league average in one season, and only a small group sits clearly above or below it. Bottom: the 5th-ranked player's interval holds the estimates of a long run of ranks, including the 30th, which is why the tier is the claim to trust and the rank is not.

Additional figures

Player values (2025-26)
Shrinkage (2025-26)
Cv curve (2025-26)

Method, code, and verification

The full technical write-up (data provenance, model specification, validation gates, and stated limitations) is the README. The analysis is implemented independently in R and Python and reconciled to numeric tolerance; run_checks.sh replays every gate.