NSBA Draft Analytics
📍 This page is the live hub — bookmark share.djiang.xyz/nsba. It updates as new analysis lands; newest items are listed right here at the top.
🆕 Latest updates
- Live draft tool — built & tested: a stateful engine for draft day (14-team × 6-round snake). Plug in your slot, feed it picks as they happen, and it recommends by roster-aware marginal value (your open subjects weighted up, depth in your best subject once covered) with a "won't last" slide flag (the field drafts the raw combine, so we predict who's gone before your next pick) and honest floor/ceiling. One-command data pipeline ingests new combine + intros. → Live Draft runbook
- Joint hierarchical model — the big modeling rebuild (honest result): replaced the stitched combine-IRT + game-rate pipeline with one Bayesian model — a per-player 6-subject ability vector, combine + game as two views, biking auto-down-weighted, scibowl difficulty as a prior, full posterior uncertainty. It fixes the specialist dilution (William Wang's chem surfaces, etc.). But out-of-sample it's only combine-grade on raw ranking — n is the wall. Its real value is per-subject fit + honest floor/ceiling, not a predictive miracle. → 43 joint model
- Backtest scoreboard — every model is now falsifiable: a harness that replays the nsba2/3 drafts and scores any ranking by realized win-shares. The bar (combine-greedy) and ceiling (oracle) are fixed; nothing gets trusted until it beats the bar out-of-sample. → 42 backtest · 41 scibowl anchor
- Draft Strategy v3 — we red-teamed our own "generalist bias": David & Anurag pushed that the engine over-favors generalists. They're partly right. PPTF dilutes a specialist's rate ~3× (it charges them for 4 cycling categories teammates cover) — but the bias bites the mid-board, not the elite tier (top-10 unchanged), and the under-priced specialists are bio/ESS, not CS (CS is over-supplied at the top — this refutes "reach for CS"). The D14 playoff rule also rewards depth in your best subject (thin→stripped loses 24% vs 9% with a 2nd body). → 40 strategy v3
- Kian & Vishnu fades, re-litigated (Anurag is half-right): Kian downgraded fade→neutral — a genuine bio/chem specialist & top-25 producer, just not the #1-overall his combine implies (don't pay #1, do take as a 2nd-round specialist). Vishnu fade STANDS (high conf): 27 games of average-plus behind a +20 combine climb, and his self-claimed "CS" is his worst in-game subject (net −8). → 40
- NSBA4 #introductions intel — parsed: the live pool self-reports (40 draftable; 34 combine rows, 12 with game tape). Pool is thin-but-better-than-feared — the marquee names all showed up. Confirms the buy-low board (Rohan G self-fades "washed" = bullish) and starts the eligibility/captain list. Combine-skippers with game tape = the field can't price them (a structural steal). → 39
- Identity-gap fix (the bug David flagged) — done: draft→game link rate jumped nsba1 19%→43%, nsba3 65%→77% (43 same-person IDs that were split across sources, merged via combine-sheet "Rosetta" bridges). A 52-row worklist is ready for David to confirm — start with 4 ID collisions (e.g. "evan" = 5.59 WS, must split into Evan Zhang + Evan L). → 37
- Anurag's "cleanup get" idea — tested, a wash: a get after the opponent negs (15% of all gets) is conceptually "cleaning up, not out-buzzing," but cleanup-rate is uncorrelated with skill (−0.006), isn't a stable trait, and discounting it doesn't move the board (top-20 unchanged) or predict better out-of-sample. Raw PPTF already absorbs it. → 38
- Buzz-rank vs difficulty-weighting — settled on REAL pyramidal quizbowl data: none of the smart buzzpoint features beat opponent-adjusted outcome-only out-of-sample. thedoge's buzz-rank bet actually loses (it throws away conversion volume — buries elite high-volume players); Radius's difficulty-weighting is a wash. The ranking ceiling holds. → 36
- Usage / empty-stats bias — tested & resolved: the "lone star on a bad team gets over-credited" worry is real but small and two-sided; the teammate-adjusted model gains nothing out-of-sample, so raw PPTF is vindicated as the draft currency. → 32 measure · 33 adjusted · 93 skeptic
- Player reports — new section in the sidebar (thedoge42, Anurag Sodhi, arolakiv, Jonathan Huang, Sanjay), plus a
/player-reportskill to generate a card for anyone. - NSBA1 draft analysis + win-shares — incl. the Vishwa Reddy Akkati / "Vish" answer (biggest steal of the draft). → 34
- Draft Strategy v2 + Bonus value — bonuses are 55–61% of scoring but carry no per-player signal; strategy unchanged. → 26 strategy · 27 bonus
- Plackett-Luce / buzzpoints test — done: dan's own ranking model uses no buzzpoints at all — the ranking signal is opponent-adjustment, not buzz position (adding buzzpoints moved the scibowl ranking by ρ=0.978, i.e. nothing). Radius's skepticism holds, but the load-bearing ingredient is a model, not raw stats. → 35
An analytics engine for the NSBA draft — built overnight from 4 combine seasons, 3 game seasons (181 clean games), 3 historical drafts, the scibowl.live natural-roster baseline, and the NSBA4 Discord. Parsed, adversarially audited, modeled, red-teamed twice, synthesized. Every number comes from a re-runnable Python script.
~40 agent runsIRT · ridge CV · bootstrap · WLS+FE9/11 findings red-team-vetted
🎯 Draft Day Plan — Pick #2 (read this tomorrow) →
The live decision doc: trade #2 to Connor for Rohan + a pick, take Akhil at #3. Akhil is model #1 but field #7–8 — the night's biggest mispricing. Top tier, trade mechanics, MSJ buy-lows, mid-round plan, caveats.
✨ Cool Findings — the highlights reel →
The most surprising results, curated for quiz-bowl / science-bowl folks. Best place to start — and the one to share.
📋 Read: Draft Strategy v3 (specialist-corrected) →
The current strategy. We red-teamed our own generalist bias — it's real but localized to the mid-board, and the under-priced specialists are bio/ESS, not CS (refutes "reach for CS"). Kian downgraded fade→neutral; Vishnu fade stands. Combine-absence steal angle added.
⚠️ Embargoed until after the SSB draft. The draft slot "#9" some pages mention is a placeholder — the real slot is known ~6/6.
The headline (skeptic's version)
- Value = production rate (PPTF). corr with win% ≈ +0.62, survives every control. How points are spread across a roster barely matters.
- The combine is a gameable r≈0.6 seed — and the field drafts it almost mechanically (ρ≈0.7), leaving ~13 toss-points/slot of edge for a value-based GM.
- Coverage is table-stakes the draft auto-provides (teams cover all 6 ~96%); "don't punt" does not survive a design rebuild.
- CS is modest, not 3.5× (~2× on toss-ups, 1.2–1.4× with controls). Secure one good CS body via theta_cs; don't reach.
- Pick value is steeply convex — never trade your R1 down for volume. The NSBA2 1st-for-two-2nds trade was −2.73 win-shares (gave up Daniel Sun, a star; finished 9th while his new team finished 2nd).
Everything is ±a lot (n=41 team-seasons). Trust directions; read the methodology and causal red-teams for where magnitudes are soft. Full detail in the Synthesis.
Charts
Growth / aging
CS value
Buy-low board
Buy-low scatter
Combine IRT ability
Combine → game
Difficulty factors
nsba1_winshares.pngAll documents
Start here
26 — DRAFT STRATEGY (DRAFT v2) — NSBA4
Status: v2 WORKING DRAFT. Written for David (GM) to read, 2026-05-30.
27 — Bonus Value: Are Knowledgeable-but-Slow Players Undervalued?
Question (GM critique): Bonuses are worth 10 pts vs 4 for toss-ups, so bonuses
40 — Draft Strategy v3 (specialist-corrected)
Date: 2026-06-02. Supersedes the strategy in 26_draft_strategy_preliminary.md (v1)
Decisions Log
Settled decisions and their rationale. Append-only; date everything. (Today = 2026-05-30.)
🎯 Draft Day Plan — Pick #2
Prepared 2026-06-06 for the 06-07 draft. You (xpoes) are the non-playing GM, drafting 2nd overall. Snake, 14 teams × 6 rounds. Embargoed until after the SSB draft.
Live Intel (Discord)
Hand-fed by David from the NSBA server. Opponent behavior + domain hypotheses we can exploit/test.
Key Findings (canonical)
Date: 2026-05-30. Lead analyst synthesis (now incl. second wave F27–F31 + skeptic
Live Draft Tool — runbook
Two tools: an ingestion pipeline (scripts/refresh.py) to keep the board
Open Questions (for David)
David has several years of science-bowl knowledge — use it. Questions are grouped by how
Synthesis — Master Narrative
Lead analyst, A30 synthesis pass. Date: 2026-05-30.
Cool Findings — the highlights reel
A curated tour of the most surprising results, for people who actually know quiz bowl / science bowl. All of it is real code on 3 seasons of game data + 4 combines + 216 draft picks. Sm…
Player reports
Player Report — Anurag Sodhi
P0093 · handles: a new rag#0464, a.new.rag · seen as: Anurag, Anurag Sodhi, a new rag#0464, a.new.rag, a_new_rag
Player Report — arolakiv
nsba1_2022: raw PPTF 1.21 → adjusted 1.90 (Δ -1.21; 77 buzz-wins / 186 contests; reliable)
Player Report — Jonathan Huang
P0310 · seen as: Jonathan Huang
Player Report — Sanjay (likely the same person across NSBA2 + NSBA3, unlinked)
P0521 · handles: sanj#0606 · seen as: Sanjay, sanj#0606
Player Report — thedoge
P0593 · handles: thedoge#1189 · seen as: thedoge#1189
Findings
NSBA Processed-Data Integrity Audit
Auditor role: adversarial data-integrity reviewer (tried to break the parsers).
Spine build: player_season_master.csv + team_season.csv
Script: scripts/build_master.py (idempotent; re-run reproduces byte-identical output)
10 — Combine Ability Model (latent IRT, de-biked)
Goal. Estimate a latent per-player combine ability (theta) that is robust
11 — Reliability & Stabilization of Game Rate Stats
Question. For the key game rate stats — overall PPTF (toss-up points per
12 — Combine → Game Validation
Goal. For players linked combine↔game, quantify how well the combine (raw,
13 — Player Value / VORP for the NSBA4 14-team Draft
Script: scripts/player_value.py (reproducible; reads the game-only spine + combine_ability)
A14 — Growth / Aging + Gideon's Roster-Composition Hypothesis
Inputs: data/processed/player_season_master.csv (207 player-seasons, games nsba1/2/3),
14b — Growth NET of mean-reversion (R3 revision of F14, red-team T1)
Supersedes the development half of 14_growth_aging.md (the Gideon roster
15 — North-Star Metric Discovery (the value currency)
Goal. Define the single team-level quantity that best predicts NSBA standings
15b — SOS-Adjusted Win% + Factual Fixes (REVISION R4)
Date: 2026-05-30. Revision of F15/F16/F17/F13/F19 in response to red-team T6, T8, M3, M2.
A16 — Generalist vs Specialist + Roster Coverage (HEADLINE)
Question. Is a player who is strong across all subjects worth more win-share
A16b (R2) — Coverage, rebuilt from roster DESIGN (not realized production)
Revision of A16 / F16 in response to red-team T2 (91_causal_redteam.md, also
17 — CS Scarcity & Draft Value (falsify-first)
Question: Should the NSBA4 draft reach for a Computer-Science specialist? CS
17b — CS Draft Value, REVISED (R1)
Status: Revision of 17_cs_value.md. The red-team reviews
18 — Natural vs Drafted Rosters: Does Drafting Create Subject-Coverage Gaps?
Question. Real Science Bowl school teams form organically and reach near-universal
19 — Tanking Detection / Buy-Low Board (NSBA4 draft)
Goal. Find players whose real (game / external) ability far exceeds what their
20 — Difficulty Normalization ("Park Factors")
Goal: quantify how question difficulty differs across contexts and produce
21 — ADP & Market (In)Efficiency
Script: scripts/adp_market.py (reproducible; tidy tables only)
22 — Snake-Draft Pick-Value Chart (Jimmy-Johnson analog)
Script: scripts/pick_value.py (reproducible)
23 — Draft → Team Outcome (D4): does the draft *matter*?
Question. This is the end-to-end validation of the whole thesis. Link drafted rosters
24 — Realized Availability of Drafted Players (D3 / D13)
Question. For each historically drafted player, did they actually play?
25 — Pick-Trading Strategy (price the picks, trade up vs down)
Inputs: outputs/pick_value_chart.csv (F22/D2), data/processed/draft_picks.csv,
28 — Player Subject-Ability Profiles + Archetypes
Date: 2026-05-30. Status: exploratory (Task A). Lead with the caveats.
29 — Duo / Pair Synergy: does coverage work as DUOS?
Date: 2026-05-30. Status: exploratory (Task B). LEAD WITH THE CAVEAT.
30 — Undervaluation-vs-Field Metric (value over the market)
Date: 2026-05-30. Status: Task C. Script: scripts/A30_undervaluation.py
31 — Field Depth Under Difficulty (Task D)
Date: 2026-05-30. Env: /home/david/code/nsba/.venv/bin/python.
F32 — The usage / empty-stats bias in PPTF and the value board
Date: 2026-05-30. Question (from David): PPTF = toss_points / tossups_faced, and
F33 — Contestation-Adjusted Individual Ability (teammate-invariant)
Date: 2026-05-30. Task 2 of the player-value audit. David's concern (the
34 — NSBA1 (2022) Draft Analysis & Win-Shares Board
Season: nsba1_2022 · Source: full competition (actual game results, not combine)
35 — Plackett-Luce & the buzzpoint claim
Claim under test (Radius): "There's nothing noticeably better than the
36 — Buzz RANK vs DIFFICULTY-WEIGHTED vs raw celerity vs outcome-only
Follow-up to finding 35. Finding 35 showed raw celerity barely improves an
37 — Identity Reconciliation Fix (draft → game link rate)
Scripts: scripts/reconcile_identities_v2.py (merge engine) and
38 — Cleanup Gets vs Clean First-Buzz Wins
Idea (Anurag): A toss-up "get" (+4) that comes after the opposing team has
39 — NSBA4 #introductions intel (live-pool self-reports)
Goal. Parse the #introductions Discord export (intros.txt, captured 2026-06-02 —
41 — scibowl.live Difficulty Anchor (transferable priors for the joint model)
Goal. Fit subject/question difficulty on the LARGE external scibowl.live corpus
42 — Backtest Scoreboard: the bar a new ranking must clear
Script: scripts/backtest_scoreboard.py (reusable; score_ranking(ranking, season) entrypoint)
43 — Joint Hierarchical Bayesian Value Model (the centerpiece)
Date: 2026-06-03. Replaces the stitched pipeline (per-season combine GRM in
92 — Skeptic Audit: Archetypes / Duo Synergy / Undervaluation / Field Depth (F28–F31)
Date: 2026-05-30. Role: methodology adversary. Scope: re-read F28–F31 and
F93 — Skeptic audit of the usage / empty-stats bias work (F32, F33)
Date: 2026-05-30. Role: adversarial red-team of 32_usage_bias.md and
Science Bowl Coverage Baseline (SSB-2026)
Natural-roster (school-formed team) baseline for subject coverage, breadth, and
Adversarial red-teams
90 — Methodology Red-Team (adversarial review of findings 10–20)
Date: 2026-05-30. Reviewer role: methodology adversary.
91 — Causal / Selection-Bias Red-Team
Role. Adversarial review of findings 10–20 for causal interpretation and
Research briefs
A5 — Discord Qualitative Intel (NSBA4 Draft)
Analyst role: GM-side qualitative scout.
A6 — Sports-Analytics Methodologies Portable to the NSBA Draft Engine
What this is. A research brief mapping established sports-analytics methods onto the
A7 — ML / Statistics Methodology for NSBA Player Projection
Project: NSBA (science-bowl league drafted like the NBA)
A8 — Prior Art: Quiz Bowl & Academic-Competition Analytics
Purpose: Survey existing analytics in the quiz-bowl / academic-competition world before NSBA invents its own draft/combine metrics. Goal: adopt established terminology where it exists, …
A9 — The CS Specialist: A Draft-Strategy Framework for Cornering a Scarce Category
Agent: A9 (CS draft-strategy, conceptual/strategic)
Project docs
Data Dictionary — raw
Processed-table schemas live in DATA_DICTIONARY_PROCESSED.md (written by parser agents).
Data Dictionary — processed
Tidy tables written by scripts/parse_games.py to data/processed/.
Agent Architecture & Plan
Phased by dependency. Status tracked in PROGRESS.md. Research briefs in docs/research/.
Progress & Resume State
Last updated: 2026-05-30 (overnight build). Update this whenever phase status changes.