CONTRACT SURPLUS MODEL
Learn what the NBA market pays, as a share of the cap, for a player's production, so any contract can be priced against the going rate.
What it measures
A hierarchical regression of log cap share on last season's output, where each stat has a league price that roles can bend toward their own, and where a maximum salary counts as "at least this much".
How to read it
fair salary (point estimate and 80% interval); surplus (point estimate and 80% interval); probability that surplus is positive; verdict, max-ceiling and limited-availability flags; dollar waterfall by stat group, age and availability; similar producers and similar contracts; market summary (league and role prices, age curve)
Why it exists
The model is Bayesian because the question needs an honest range, not a single number: fair salary comes with a posterior predictive interval, and verdicts are withheld when that interval straddles zero. Role-level prices are partially pooled, so a big man's rebounds and a guard's rebounds can be priced differently without small groups overfitting. Maximum contracts are censored: the league cannot pay a star more than his tier, so his salary is evidence of a floor, not a price. Structure that failed on real fits is recorded in the code and not repeated: free and learned-scale group effects did not converge, so season and role effects are sum-to-zero with fixed scales. The model publishes only after beating the method it replaces on a season it never saw.
Limits
- Box-score features miss most defensive and off-ball value.
- Position family is inferred from the box score for players with no listed position (76% accuracy).
Calculation, evidence, and implementation
Calculation
Inputs
NBA Player Salary History (Basketball-Reference, 2016-17 Onward, As Cap Share), NBA Player Season Stats (Prior-Season Per-Game Production), NBA Players (Draft Year And Round, Listed Position), NBA Team Salary Cap Players (Contract-Season Cap Hits To Score)
Method
Fitted with nutpie (4 chains, 2,000 tuning and 1,000 draws, target_accept 0.97) on every salary season with market deals, twice: once without the latest season for the holdout gate, and once on all of them.
Evaluation
Two gates must pass before a run can be published. Convergence: max R-hat below 1.01, minimum bulk ESS above 400, no divergences. Holdout: lower error than the quantile-swap baseline and 80% interval coverage between 0.75 and 0.85. Parameter recovery on 1,500 simulated contracts recovers every price within three posterior standard deviations.
Outputs
Fair Salary (Point Estimate And 80% Interval), Surplus (Point Estimate And 80% Interval), Probability That Surplus Is Positive, Verdict, Max-Ceiling And Limited-Availability Flags, Dollar Waterfall By Stat Group, Age And Availability, Similar Producers And Similar Contracts, Market Summary (League And Role Prices, Age Curve)
Sources
Src/Sports Intelligence/Leagues/NBA/Contracts/Surplus/Model.Py, Src/Sports Intelligence/Leagues/NBA/Contracts/Surplus/Features.Py, Pipelines/NBA Ingest/Contract Surplus.Py
Implementation
Registry identifier: CONTRACT_SURPLUS_MODEL. Version 1.0.0; status drafted.