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
-
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_trustworthycolumn flags this; all headline numbers use nsba2 + nsba3 only. -
Tiny n. Trustworthy universe = 144 matched picks (nsba2=60, nsba3=84, incl. 14 nsba3 captains). The
availability_flagcross-reference rests on 16 picks across 3 buckets. Magnitudes are soft; directions are the signal. -
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. -
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:
- CS-mains show NO availability penalty: 0.71 vs 0.70 (n=7 CS-mains). Reassuring for the F17 "reach for a CS answerer" rule — CS specialists are not flakier.
- Production correlates with availability (spearman(pptf, avail) = +0.47, p<0.001). Partly mechanical (good players get fielded more; more games stabilize the rate), but consistent with "available and productive" being the same desirable cluster.
- "Specialists (subject-HHI > 0.5) are less available" (0.60 vs 0.80) is an ARTIFACT — do not use it. Player subject-HHI is mechanically tied to games-played (spearman(games, HHI) = −0.41): a player who plays 1 game cannot show subject breadth, so low availability forces high HHI. The arrow runs availability→HHI, not archetype→availability.
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).