NSBA Draft Analyticsembargoed · 2026-06-06

24_realized_availability.md

24 — Realized Availability of Drafted Players (D3 / D13)

24 — Realized Availability of Drafted Players (D3 / D13)

Question. For each historically drafted player, did they actually play? Compute games_played / team_games_possible per drafted player-season — a realized-availability rate — then ask: how common are availability busts (drafted but barely played)? Do early picks have better availability? Does the discord availability_flag predict it? Does availability track draft position or archetype? Goal: a reliability prior for the nsba4 draft board.

Artifacts: outputs/realized_availability.csv (216 rows, one per draft pick), builder scripts/realized_availability.py.


LEAD WITH THE CAVEATS

  1. nsba1 availability is NOT measurable — it is excluded from every rate below. nsba1 game sheets record nicknames; the draft sheet records real names; there are no discord tags in nsba1. So the draft→game canonical link is name-fuzzy only (confidence 0.85–0.9), and 48 of 59 nsba1 picks (81%) fail to link to a same-season game row for measurement reasons, not real absence. The 11 that do link are the lucky nickname collisions. Treating nsba1 "zeros" as busts would be pure artifact. The avail_trustworthy column flags this; all headline numbers use nsba2 + nsba3 only.

  2. Tiny n. Trustworthy universe = 144 matched picks (nsba2=60, nsba3=84, incl. 14 nsba3 captains). The availability_flag cross-reference rests on 16 picks across 3 buckets. Magnitudes are soft; directions are the signal.

  3. The denominator is honest about subs/trades. team_games_possible = distinct clean games played by the union of every team the player suited up for (not just their primary team), so the rate never exceeds 1 even for players who switched teams. Zero-game ("full bust") players get the season-median schedule as a fallback denom — irrelevant since their numerator is 0.

  4. One archetype result is a known artifact (specialists "less available") — see §4.


1. How common are availability busts?

Across the trustworthy seasons (144 matched picks):

metric count rate
full bust (drafted, 0 clean games) 31 21.5%
availability bust (avail_rate < 0.25, barely played) 45 31.2%

But the rate is entirely a season/format story:

season matched picks full-bust rate mean avail (matched)
nsba2_2023 60 0% 0.67
nsba3_2025 84 36.9% 0.35

In nsba2 every single drafted player played ≥1 clean game (mean 6.8 games). In nsba3, 31 of 84 drafted players never appeared in any clean game — and 29 of those 31 never appear in any clean game in any season (and they are exact discord-tag matches at confidence 1.0, so these are not mismatches — they are genuine drafted-but-never-played players). Even 3 of 14 nsba3 captains never fielded.

Interpretation. nsba3's draft over-rostered relative to turnout: teams drafted 6 players but typically fielded ~3–4. nsba2 did not. So "availability bust" is real and common in the most recent draft-format edition — exactly the format nsba4 inherits. This is the D13 availability signal we thought we lost: it survives at the roster-construction level even though per-game lineups (TUH) don't for nsba3.


2. Do early picks have better availability? Yes — robustly.

avail_rate vs pick number (non-captain matched picks):

sample spearman(overall_pick, avail) spearman(round, avail)
nsba2 (n=60) −0.46 (p<0.001) −0.49 (p<0.001)
nsba3 (n=70) −0.22 (p=0.07) −0.21 (p=0.08)
pooled (n=130) −0.36 (p<0.001) −0.43 (p<0.001)

Mean availability by draft round (pooled):

round 1 2 3 4 5 6
mean avail 0.85 0.62 0.50 0.50 0.34 0.23

Round-1 picks showed up ~85% of the time; late-round picks ~23–34%. The relationship is present in both trustworthy seasons (stronger and significant in nsba2, directional in nsba3). Late-round picks are availability lottery tickets as much as talent lottery tickets — the bust risk compounds the talent risk.


3. Does the discord availability_flag predict realized availability? Yes, monotonically (but n=16).

The qualitative availability_flag (nsba4-era discord signal, lands on a player's every season via canonical_id) tracks realized game availability in the right order:

flag realized mean avail n
none (no concern) 0.86 6
some 0.77 5
concern 0.49 5

Only 16 picks carry a flag, so this is suggestive, not conclusive — but the clean monotonic ordering validates the discord signal as a usable availability prior, independent of, and complementary to, draft position.


4. Availability vs archetype

Among the 101 nsba2/3 drafted players who played ≥1 game:


5. The reliability prior (for the nsba4 board)

outputs/realized_availability.csv ships a reliability_prior column: the raw rate shrunk toward the season-mean availability with K=4 pseudo-games ((games_played + 4·μ_season)/(team_games_possible + 4)), computed for trustworthy seasons only. It ranges 0.18–0.90 (median 0.56). Use it to discount a returning player's projected value by their availability prior — a high-VORP player who only showed up 30% of the time is a part-time asset, and the board should price that.

Recommended board rule. Multiply projected per-season contribution by max(reliability_prior, flag_prior), where flag_prior ∈ {none:0.85, some:0.77, concern:0.49} from the discord signal when present. For a brand-new nsba4 entrant with no history, fall back to the round-conditional base rate from §2 (R1≈0.85 … R6≈0.23) as the availability prior.


Output schema (outputs/realized_availability.csv)

One row per draft pick (216). Key columns: season, overall_pick, round, draft_team, player_raw, canonical_id, match_confidence, is_captain, matched, games_played, team_games_possible, avail_rate, pptf, points_per_game, player_avail_flag, avail_trustworthy, full_bust, availability_bust, reliability_prior. Always filter avail_trustworthy == True before computing rates (drops nsba1).


NSBA Draft Analytics · embargoed until after the SSB draft · ← hub