Pricing a trade

A trade is not an exchange of players. It is a change in what entire rosters are worth, under constraints that make talent stubbornly non-additive. Five mechanisms do the work, and all five are estimated. A sixth, a rest penalty, was a stated modelling choice until it was switched off; section 4 says why.

1. Minutes are a budget

The binding constraint: a team plays 240 player-minutes per game and may dress fifteen. Valuing an acquisition at the minutes he has historically played lets a calculator buy ten thirty-minute players and count all ten — 300 minutes on a 240-minute team — which is why naive trade tools conclude that acquiring talent is always good.

Instead the roster is re-allocated, subject to the budget and to the fact that five men are on the floor at once, so nobody can hold more than a fifth of it:

Σi mi = 240, 0 ≤ mi ≤ 48, |{i : mi > 0}| ≤ 15

The value of a trade is the difference in team value before and after, for every club involved. An incoming player displaces minutes rather than adding them. How they are re-allocated is the next section, and it is the part of this model that changed most recently and on the clearest evidence.

Who plays is right, and the reshuffle counts at full value. Checked against game logs, the minutes the model moves on a trade really do move — about one for one within a season. A trade's roster change is split in two — the players who moved, and the reallocation of everyone else — and the weight on the reallocation is tested the way the tool is used, forward in time: for each of the 495 club-seasons of 2009–2025, a weight was chosen on earlier seasons' actual win changes and used to forecast the next. The chosen weights ran 0.55 to 0.90 and did not forecast clearly better than a fixed one (a weight must win in 90% of season resamples to ship), so the reallocation counts at full value. An earlier version discounted it to 0.55; that discount only helped while the forecast's player ratings had seen the season the trade was forecast into.

What a process grade says about the outcome. Every card in the Trade Lab shows the range of realized value that trades graded like it produced. It is fitted on the 2,763 team-sides of 1999–2025 trades, whose contracts have played out: for each percentile, a line in the process value and the size of the side's ledger (quantile regression), so the range widens with the size of a trade as fast as outcomes actually did. Checked forward in time — fitted on earlier seasons and tested on each later one — the 80% range held 80% of outcomes and the 50% range 48%, and the 80% range held 77%, 84%, 82%, 82% of trades from the smallest size band to the largest. The middle outcome sits well inside the process value: realized value moves only about 20 to 40 cents per dollar of process, and a range centred on the process value itself held 73%.

2. The roster limit, and a bug it caused

The fifteen-man cap is a real constraint rather than decoration, and it bites in a way worth naming. A one-body roster change can flip the man on the bubble between waived and playing. Charging a full season of workload to that flip once cost a 32-year-old 1.40 rating points for a move nobody made.

Worse, the load charge was measured against a player's listed minutes per game rather than against the pre-trade allocation. Every roster therefore carried a penalty for merely existing — a league mean of −0.425 rating points with no trade at all, and −1.46 for the worst team. No invariant caught it, because with no trade the charge appears on both sides and cancels exactly; it only distorts real trades. Both the load charge and a development term — extra minutes this season shifting next season's rating — were then measured against the untouched roster's own allocation, and both have since been switched off: neither improved a forecast, and the one fit of development against realized value had the wrong sign.

3. Who absorbs the minutes

This model used to answer that by optimisation: give the freed minutes to whoever produces most per minute. That is what a club should do and it is not what clubs do. Checked against 270 club-sides of real in-season trades, scored on minutes actually played in the twenty games after each deal, the reallocation turns out to be close to mechanical.

An acquired player takes the departed player's share roughly one-for-one and immediately — about two thirds of it when one man arrives, essentially all of it when three do. Incumbents lose share rather than gaining it. And where a vacancy does reach the incumbents it follows spare capacity, meaning who has room to play more, rather than resemblance to the man who left.

So each arriving player is seated from an equation fitted on trades themselves, in shares of the 240:

share = -0.0156 + 0.511 · (his share at his old club) + 0.0879 · hole + 0.0339 · projected wins

A traded player keeps about half the role he had, a coefficient that lands near 0.5 from three independent estimates on different samples. What the arrivals do not absorb settles on the incumbents by capacity, and a club that receives nobody gets a replacement body priced by the same logic rather than a fixed constant.

Held out, it predicts each man's post-trade minutes with a mean absolute error of 5.97 minutes per player per game, against 6.63 for simply removing the departed and renormalising. Lower is better, and neither is good: six minutes is a large error when a rotation player's allocation is fifteen to thirty. The honest reading of the gap is that most of it comes from knowing who arrived — naming the incoming player and doing nothing else gives 6.03. Every theory of who covers the hole is worth a fraction of a minute beyond that.

That figure scores minutes, not valuations. Whether the dollar figures this page produces are more accurate under one allocation rule than another is not something any test here establishes, and the change of rule moved team surplus by a median of $77M. Take the minute errors as what they are.

It also scored only half the question until recently, and the half it left out was the one that failed. The error above rescales each rule's prediction to the club total that was actually played before comparing, so it can measure how minutes are divided between men and is blind to how many are claimed altogether. Scored without that help the same rule reads 6.29 minutes, and every rule that HAS a level overstates a club's total — this one by 23.4 minutes a game, the kernel by 30.2. A metric that hands the model the answer to the level cannot see a nine-man offseason roster being sent out to play all 240 minutes, which is what shipped here until it was found by hand.

The two-part minutes model is exempt from that column rather than excused from it. Its outcome equation is a centred log-ratio, which divides each man's share by the within-night geometric mean, so anything constant across a club — the total included — differences out of the estimate. It predicts proportions and has no level to be right or wrong about, and its prediction sums to one by construction on every case. Scoring it here would have produced a number that looks like the others and measures only what fraction of a club's minutes go to men no rule can name.

Two rules that lost are worth recording, because both are more elaborate than the one that ships. The substitution kernel that used to sit here — share decaying with characteristic distance, still estimated at R² 0.0302 against 0.0256 for a positional benchmark on 77,156 player-games — has an error of 5.96 minutes on the same test, marginally BETTER than the rule that replaced it. The two are level within the noise of a 268-case backtest, and the simpler one is preferred on grounds other than accuracy — though that comparison reverses once the club total counts: 6.42 for the kernel against 6.29 for the shipped rule, which claims 6.75 fewer minutes a game that nobody played. A fitted two-part model of whether a man dresses and how much he then plays, which predicts per-night minutes better than anything else tested, comes in at 6.18 minutes: worst of the four, because it cannot express an acquired man inheriting the job of the man he replaced.

The split it replaced is instructive about assumptions generally. It had been set at 96/96/48 minutes on the reasoning that a lineup is two guards, two forwards and a centre. Measured, minutes actually divide 47.0 / 39.5 / 13.4 percent: roster labels are not lineup slots.

The optimising allocator both of those describe has since been replaced, for the reasons above. Its history is kept because the failures were instructive: it claimed to scale everyone proportionally when a roster could not fill 240 minutes and in fact ran a greedy rate waterfall, pinning the top few men at their caps. Making it genuinely proportional halved a spurious finding that subtracting rotation players paid.

4. The rest penalty — switched off

The tool used to adjust a player's per-minute rating for rest: fewer minutes than his norm made him better per minute, more made him worse, as a log-rest term with coefficient b = 0.04211. Since 2026-09-11 b is zero, and minutes are neutral for per-minute quality. The minute budget and who plays are unaffected; the term never entered the allocator that ships.

It was never identified. Instrumenting minutes with teammates' injury absences across eight seasons — 110,106 player-games, 735 players, 7,593 games — returns a well-estimated zero: +0.0016, 95% interval [−0.0032, +0.0064], first-stage F of 1189. The value that shipped came from a log-rest specification at a 10-minute floor, with t = 0.73 and an interval of [−0.071, +0.156], and at a 1- or 5-minute floor the same regression returned a small benefit instead.

And it was not harmless. A cut in a player's minutes bought him a rest credit that was usually larger than the minutes themselves, so the term paid clubs for taking on bodies and charged them for consolidating. With it off, the tool's own forecast of a trade's win change tracks what clubs actually did at 0.86 wins per predicted win, against 0.45 with it on, across 754 club-seasons.

5. Championship equity

Wins are the intermediate currency; contention is what teams actually buy. Title probability is a logistic in projected wins and the strength of a roster's best player, then normalised so that exactly one team wins:

Pt ∝ σ( β0 + β1 · wins + β2 · top1 )
sharet = Pt / Σt′ Pt′

Equity is that share of a fixed league-wide prize, $300M by default and adjustable.

Normalising is the part that is easy to get wrong, and it was wrong. The raw logistic summed to 1.057 across the league, and repricing only the teams in a trade let a deal create roughly 4.8 percentage points of championship probability from nothing — enough to recommend trades on its own. Probability given to one team must come from the others, so the pot is fixed and all thirty teams are repriced on every evaluation. Separately, projected wins were summing to 1331 against a true 1230, putting every team above the curve and inflating all title equity; they are now recentred additively by −3.37 per team.

The convexity in the top1 term is the largest known distortion remaining: concentrated talent is rewarded more than the evidence cleanly supports, which is why the strongest rosters price above what market-implied probabilities suggest.

6. Pricing a draft pick

A pick is not a player. It is an option over a distribution of players, and it is valuable because rookie contracts are cheap relative to production — not because rookies are good.

surplus(s) = E[value to the drafting club | slot s] − rookie cost(s)
E[value] = Σs P(slot = s) · surplus(s)

A pick is priced as the draft board prices the player it becomes. For every drafted prospect the board computes his expected value to the club that drafts him: the rookie deal while it holds him, then — if it keeps him and he is good enough to be paid the maximum — his value above the max, a max deal that sinks included (the draft methodology has the construction and its checks). The slot curve is the mean of that value by slot, read out of the built board so the two cannot disagree, smoothed across slots by local-linear kernel regression with a bandwidth that widens as the curve flattens:

v̂(s) = α̂s where (α̂s, β̂s) = argmin Σi K( (pi − s) / h(s) ) · [ vi − α − β(pi − s) ]²
h(s) = 2.0 · (1 + 0.06 · (s − 1))

Over the whole career, like the players. The Trade Lab values a player over his whole career — his contract, then a chain of deals with the club holding him to age 40 — so the rookie a pick becomes is worth the same span, and the pick is priced over it. Priced over a shorter one than its player, a pick would be worth less than the man it turns into the day after the draft, and the ledger would book the difference as a gain to whoever received it. At the 2026–27 cap that is $213M of surplus for the first pick, $152M for the fifth, $64M for the fourteenth, $20M for the thirtieth and $8M for the forty-fifth.

The level is recalibrated to realized outcomes, by slot. The board cannot be calibrated on the pick — it is not a model input there — but a slot curve is a function of the slot, so here it can. Each slot is scaled by the ratio of the value drafted players actually returned their clubs to the value the board gave them, over the same seasons, both smoothed (classes 2007–2016). The ratio is about 1.12 at the fifth pick and 1.03 at the fourteenth, and falls through the second round — 0.74 at the forty-fifth — where the board still overstates what second-rounders return. Isotonic last, so the curve never rises.

What it replaced. Four seasons of market value at the mean projected wins for the slot, minus the rookie scale: no re-signing, no max, and the price of the mean rather than the mean of the price. It priced the first pick at $101M and every pick from the 35th on at nothing.

Why smooth at all. Each slot has one observation per draft class — about nineteen — so a single star or bust moves that slot bodily. Averaging within a slot produced a curve where pick 3 priced above pick 2.

Why this was not fixed by the monotonicity constraint already applied. An isotonic projection does remove inversions from the value curve, but it does so by pooling violators into plateaus. Surplus is value minus rookie cost, and rookie cost declines smoothly with slot — so across a plateau, a flat value met a falling cost and surplus rose. The long upward ramps through the middle of the first round were not noise; they were the shape of the repair. Smoothing first leaves isotonic with almost nothing to bind on: inversions fell from nineteen to one, and that one is the second-round floor engaging, not an artifact.

Why local-linear rather than a weighted average. At slot 1 — the boundary, and the pick that matters most — every neighbour a smoother can see is worse, so a local-constant estimate is biased downward. Fitting a slope and reading the intercept removes that bias exactly where it would be most expensive.

The bandwidth widens with slot because the curve is steep across the top few picks, where over-smoothing would erase real differences, and nearly flat in the second round, where borrowing from neighbours is close to free. Effective sample size rises from about nineteen to roughly ninety near the top of the draft.

A traded pick is priced across where it might land, not where it is expected to: lottery probabilities enter exactly where they apply, and protections truncate the landing distribution rather than being approximated by a discount. Second-round surplus is floored at zero, because a bust on a minimum deal can be waived — the pick is an option, not a debt, and options are not negative.

7. Risk

Uncertainty is carried rather than averaged away. Each player's projection is a fan over rate, availability and minutes, propagated by simulation and collapsed to a certainty equivalent under constant relative risk aversion:

CE = u−1( E[u(W)] ), u(W) = W1−γ / (1 − γ)

Two assets with equal expected value are therefore not interchangeable — the more volatile one is worth less, which is the right treatment for a front office that cannot diversify across many rosters.

Limitations