Contract Surplus
Say how much more, or less, a player is paid this season than the league pays players who produced what he produced last season, in dollars and with an honest range.
What it measures
Price last season's output at the market's going rate, cap that price at the most the CBA lets this player earn, and compare it with his actual cap hit.
How to read it
Positive means the team pays less than the market pays for this output. Rookie-scale, minimum and two-way deals show their deal type instead of a verdict. A player flagged "limited availability" played fewer than 41 games last season, which drags the estimate down; read those with care.
Why it exists
A contract is a market price, so the fair comparison is the market, not a formula: what have teams actually paid, as a share of the cap, for this kind of scoring, playmaking, rebounding, defense, efficiency, usage, age and availability? The model learns those prices from ten seasons of market-set deals and leaves out rookie-scale, minimum and two-way contracts, because the CBA sets those rather than teams. It is built to refuse false precision. A maximum salary only says a player is worth at least the maximum, so max deals are treated as censored rather than taken at face value. Every estimate carries an 80% interval, and a player is called underpaid or overpaid only when that whole interval agrees. The number describes the current deal against the current market; it is not a forecast of a player's next contract or a grade of the front office that signed him.
Limits
- Public box-score data does not capture most defense, screening, spacing or lineup context.
- Prior-season output drives the price, so a player returning from injury looks overpaid.
- Salary data comes from Basketball-Reference; see the source decision note.
Calculation, evidence, and implementation
Calculation
Inputs
Prior-Season Per-36 Points, Assists, Rebounds, Stocks And Turnovers, True Shooting Relative To The League, Usage Rate, Three-Point Attempt Rate, Age, Total Minutes, Position Family And Starter Or Reserve Role, Contract-Season Cap Hit And Salary Cap, Maximum-Salary Tier From Service Time Or The Actual Designated Maximum
Methodology
See the contract-surplus-model card. The published number is the posterior point estimate of fair salary minus the cap hit, with an 80% posterior predictive interval, a probability that surplus is positive, a within-season percentile among market deals, a dollar waterfall, and two comp lists.
Normalization
Salaries are modelled as a share of the cap, so seasons with different caps are comparable; dollars are the display unit only.
Uncertainty
The 80% interval is posterior predictive, so it includes the market's own negotiation noise, not just parameter uncertainty. It is wide on purpose.
Evaluation
Each run refits without the latest salary season and prices it. On 2024-25 the model's error was 0.511 in log cap share against 0.800 for the quantile-swap method it replaces, with 80% interval coverage of 0.809 (target 0.75-0.85).
Sources
Src/Sports Intelligence/Leagues/NBA/Contracts/Surplus/Score.Py, Src/Sports Intelligence/Leagues/NBA/Contracts/Surplus/Serving.Py
Implementation
Registry identifier: CONTRACT_SURPLUS. Version 1.0.0; status drafted.