22 — Snake-Draft Pick-Value Chart (Jimmy-Johnson analog)
22 — Snake-Draft Pick-Value Chart (Jimmy-Johnson analog)
Date: 2026-05-30
Script: scripts/pick_value.py (reproducible)
Outputs: outputs/pick_value_chart.csv (84-slot tradeable table, 14-team draft)
Env: /home/david/code/nsba/.venv/bin/python
READ THE CAVEATS FIRST. This is built on 3 draft seasons and ~124 picks with observed game value. The primary curve uses 144 nsba2+nsba3 picks; the single fully-clean season is nsba2 (60/60 picks matched and played). nsba1 contributes only 11 resolvable picks (its game sheets use nicknames, so most picks can't be linked to game stats) and is sensitivity-only, not in the curve. Every number below is a small-n point estimate; treat the shape as the result and the per-slot values as ± a lot (95% bootstrap bands shipped in the CSV are wide).
TL;DR
- The pick-value curve is steeply convex, not flat. Realized value falls
off fast through round 3, then plateaus. Round 1 retains only 46% of its value
into round 2; rounds 5–6 are nearly indistinguishable. An exponential
value = 0.285 + 2.47·exp(−6.28·frac)fits far better than a linear chart (corr with observed WS 0.62 vs 0.38 for linear). - No classic "Loser's-Curse" flattening at the top. The top pick is not worth less than linear intuition — it is worth more. The quadratic fit is convex (a₂ = +3.5), the signature steep-top/flat-tail Jimmy-Johnson shape.
- The real loser's-curse signal is variance, not mean. Round-1 picks are both high-value and low-risk (CV 0.78, 15% bust rate). Late picks are lottery tickets: round-5 CV 1.40 with a 69% bust rate. So the premium you pay for an early pick buys reliability as much as ceiling.
- Tradeable chart (pick 1 = 100 pts): R1-start 100, R2-start 42, R3-start 22, R4-start 15, R5-start 12, R6-start 11. A trade is +EV for the side receiving more total points — but see the snake-turn and 4-6-picks/team rules below.
Method
Realized value metric
Each draft pick is joined by canonical_id to the same-season game spine and
scored on realized value:
- win_shares (primary) — from player_win_shares.csv, summed across teams for
players who switched mid-season. Integrates rate, playing time, and team success in
one number. This is the "did the pick actually help you win" metric.
- toss_points and pptf (secondary / robustness) — pure volume and pure rate.
All three are GAME-world stats (standard SB scoring). The combine is not used here — pick value is judged on what the player did, not their tryout.
Snake-slot normalization
Picks are ordered within each season's draft by (round, overall_pick) → a snake slot
1..N, and a pick_frac = (slot−0.5)/N ∈ (0,1) so 12- and 14-team drafts pool on a
common axis. nsba3 round-1 captains (overall_pick = 0) sort to the front of round 1.
Value coding for unobserved picks (the load-bearing decision)
- nsba2 (gold): all 60 picks matched and logged clean-game value → fully observed.
- nsba3: 84 matched, but 31 picks have no clean-game row (drafted, no recorded production). These are coded realized value = 0 — they were spent and returned nothing observable. Known hole: the 4 nsba3 round-1 games are team-level-only (no player names), so a little genuine round-1 value is invisible; this biases nsba3 round-1 slightly down, making the top-pick premium if anything understated.
- nsba1: only 11 of 72 picks resolve to a game player (nickname problem). The other 61 are unobservable, not zero, so nsba1 is excluded from the primary curve and reported separately as a directional sensitivity check.
Smoothing & uncertainty
A 3-parameter exponential floor + a·exp(−b·frac) is fit by nonlinear least squares to
the raw (pick_frac, win_shares) points (value clipped at ≥0 for the chart unit).
95% bands come from 400 bootstrap resamples of picks. The CSV ships the fitted
value and its band at every slot.
Results
Realized value by round (nsba2 + nsba3, zeros imputed for matched-no-production)
| round | n | mean WS | median WS | mean toss_pts | mean PPTF |
|---|---|---|---|---|---|
| 1 | 26 | 1.715 | 1.546 | 93.2 | 0.540 |
| 2 | 26 | 0.793 | 0.645 | 49.1 | 0.334 |
| 3 | 25 | 0.568 | 0.312 | 33.8 | 0.252 |
| 4 | 26 | 0.380 | 0.139 | 23.1 | 0.169 |
| 5 | 26 | 0.231 | 0.099 | 12.3 | 0.158 |
| 6 | 15 | 0.123 | 0.000 | 6.7 | 0.179 |
Monotone in every metric. PPTF (rate) decays much more gently than win_shares (0.54→0.16, ~3×) while win_shares falls ~14× — because late picks lose on both rate and playing time/role, and because many never crack the rotation (median WS hits 0 by round 6). The chart's steepness is a volume+role story, not just a skill story.
The pick-value chart (every 7th slot; full 84 in CSV)
| pick | round | value_WS | 95% lo | 95% hi | value_pts |
|---|---|---|---|---|---|
| 1 | 1 | 2.668 | 1.51 | 3.72 | 100.0 |
| 8 | 1 | 1.697 | 1.17 | 2.08 | 63.6 |
| 15 | 2 | 1.122 | 0.66 | 1.39 | 42.1 |
| 22 | 2 | 0.781 | 0.49 | 1.05 | 29.3 |
| 29 | 3 | 0.579 | 0.40 | 0.82 | 21.7 |
| 36 | 3 | 0.460 | 0.35 | 0.66 | 17.2 |
| 43 | 4 | 0.389 | 0.31 | 0.55 | 14.6 |
| 50 | 4 | 0.347 | 0.27 | 0.49 | 13.0 |
| 57 | 5 | 0.322 | 0.23 | 0.45 | 12.1 |
| 64 | 5 | 0.307 | 0.21 | 0.44 | 11.5 |
| 71 | 6 | 0.298 | 0.18 | 0.44 | 11.2 |
| 78 | 6 | 0.293 | 0.16 | 0.44 | 11.0 |
value_pts rescales win_shares to pick 1 = 100 (Jimmy-Johnson convention).
Note the floor ≈ 11 pts: the model says even the last pick of a 14-team, 6-round
draft is worth a non-trivial baseline (a marginal rotation buzzer), so deep drafts
still have a flat but positive tail.
Loser's-Curse / flattening diagnostics
(a) No top flattening — the curve is convex (classic JJ shape).
- Round-to-round retention: R1→R2 0.46, R2→R3 0.72, R3→R4 0.67, R4→R5 0.61,
R5→R6 0.53. The biggest single drop is off the top, the opposite of a shallow
early premium.
- corr(observed WS, linear-rank) = 0.381 vs corr(observed WS, exp-curve) = 0.615
— the exponential dominates a linear chart, so paying linear prices for early picks
undervalues them.
- Quadratic value ~ frac: coeffs (a₂, a₁, a₀) = (+3.51, −5.19, 2.10). a₂ > 0 =
convex = steep top, flat tail.
(b) The genuine curse is risk, not return. Variance/bust by round:
| round | mean WS | std | CV | bust rate (WS < 0.25) |
|---|---|---|---|---|
| 1 | 1.715 | 1.35 | 0.78 | 15% |
| 2 | 0.793 | 0.90 | 1.14 | 39% |
| 3 | 0.568 | 0.67 | 1.17 | 44% |
| 4 | 0.380 | 0.55 | 1.44 | 58% |
| 5 | 0.231 | 0.32 | 1.40 | 69% |
| 6 | 0.123 | 0.18 | 1.44 | 73% |
Early picks are reliable (low CV, low bust); later picks are lottery tickets. So the early-pick premium is partly an insurance premium. If your draft strategy is risk-seeking (punting on a known star to accumulate mid picks), the chart overstates what those mid picks return in expectation and understates their variance.
Robustness (the shape holds three ways)
| cut | R1 | R2 | R3 | R4 | R5 | note |
|---|---|---|---|---|---|---|
| primary (nsba2+nsba3, zeros) | 1.72 | 0.79 | 0.57 | 0.38 | 0.23 | the chart |
| nsba2-only (gold, no imputation) | 2.31 | 1.17 | 0.76 | 0.61 | 0.27 | steeper top, same shape |
| observed-only (no imputed zeros) | 1.94 | 1.03 | 0.79 | 0.45 | 0.25 | drops nsba3 zeros |
| toss_points (volume) | 93 | 49 | 34 | 23 | 12 | same monotone decay |
All cuts agree: steep through R3, flattening after. The nsba2-only curve is steeper at the top (first-overall nsba2 pick = 4.78 WS), so the primary chart is a conservative read of the top-pick premium.
nsba1 sensitivity (11 resolvable picks only — directional)
R1 mean 2.73, R2 1.12, R3 2.42, R4 0.08, R5 0.29, R6 0.00. Same broad decay, but the R3 = 2.42 blip is one lucky late hit out of 2 observed picks — pure small-n noise. Do not read nsba1 slot values; only the direction agrees.
Using the chart to judge a trade (and the rules that constrain it)
A pick trade is +EV for the side receiving more total value_pts (or, for a more
robust call, whose package's 95% bands clear the other's). Worked examples:
- Pick 1 (100) for picks 15 + 16 (42 + 40 = 82): pick 1 wins. The top pick's reliability premium means a single elite pick beats two early-2nd-rounders.
- Pick 1 (100) for picks 8 + 22 (64 + 29 = 93): pick 1 still wins, narrowly — inside the noise band, so effectively a coin-flip you'd take for the variance reduction.
- Snake-turn equivalence: in a 14-team snake the last pick of a round and the first of the next are adjacent slots (e.g. slot 14 = 44.5 pts ≈ slot 15 = 42.1 pts). Back-to-back turn picks are worth ~2× a single mid-round pick — the well-known snake-draft "turn" advantage shows up cleanly here.
Constraints that override raw points: 1. 4–6 picks per team (roster rule). You cannot trade down into 7+ picks or strip a roster below 4. The chart values slots, not feasibility — check the count first. 2. Snake order is fixed by standings, so a "trade" is really swapping which slots a team owns; both sides' packages must respect that each team ends with 4–6 picks. 3. Positional/coverage scarcity is not in this chart. A late pick that fills a punted subject (finding 16: don't-leave-a-hole) or a scarce CS answerer (finding 13: CS replacement floor is lowest) can be worth more than its slot points. Use the pick chart for quantity of value and the VORP/coverage boards for which player — they answer different questions.
Limitations (lead with these)
- n is tiny. 3 draft seasons; the curve rests on 144 picks, only 60 of them in a fully-clean season. Bootstrap bands are wide (pick 1: 1.5–3.7 WS). Slot-level numbers are indicative, not precise.
- Imputed zeros drive the nsba3 tail. Coding 31 matched-no-production nsba3 picks as 0 is defensible (they returned nothing observable) but it (a) assumes the master captured all their games and (b) is dented by the 4 team-only nsba3 R1 games. The observed-only and nsba2-only cuts (which avoid this) show the same shape, which is the reassurance — but the level of the late tail is sensitive to it.
- win_shares embeds team context. A pick's win_shares depends on its team's wins, so a great player on a bad team scores low. This is appropriate for a "did the pick help you win" chart but means the metric is not a pure player rating (use VORP, F13, for that).
- No era/difficulty adjustment. PPTF and win_shares are pooled across seasons with no difficulty normalization (F20 shows nsba3 was the easiest packet set). The chart is a cross-season average shape, not a season-specific price.
- Survivorship in matching. nsba1's nickname problem means we observe its resolved picks, which may skew toward players who also showed up in the combine/canonical roster — another reason it is sensitivity-only.
- The chart prices slots, not feasibility or fit. The 4–6 picks/team rule, snake order, and subject-coverage scarcity all sit outside it (see above).
Reproduce
/home/david/code/nsba/.venv/bin/python scripts/pick_value.py
Writes outputs/pick_value_chart.csv and prints the per-round table, the chart,
the loser's-curse diagnostics, all robustness cuts, and the trade examples above.