19 — Tanking Detection / Buy-Low Board (NSBA4 draft)


19 — Tanking Detection / Buy-Low Board (NSBA4 draft)
Goal. Find players whose real (game / external) ability far exceeds what their combine score implies — i.e. tankers / sandbaggers who are underpriced going into the NSBA4 snake draft. Quantify the size of each mispricing. Flag the reverse — combine-inflated players (likely bikers) to fade. Exclude confirmed cheats and staff-tier non-draftables.
- Env:
/home/david/code/nsba/.venv/bin/python - Inputs:
player_season_master.csv(game value, standard-SB scoring),combine_ability.csv(de-biked IRT combine ability),team_season.csv,discord_player_signals.csv(qualitative tank flags),docs/INTEL.md,canonical_players.csv(identity). - Outputs:
outputs/buylow_board.csv,outputs/buylow_board.png,outputs/buylow_scatter.png.
Two scoring worlds, never mixed. Game value = standard Science-Bowl PPTF (
toss_points / tossups_faced, +4/−4). Combine = pyramidal, gameable tryout (theta/rawfrom the IRT model in finding 10). The combine is the price; game data is the true value. Mispricing = value − price. Per prior D7 we trust game data over combine.
Method
The mispricing definition
For every player we compute, on a within-pool z-scale:
mispricing = z(demonstrated ability) − z(combine-implied ability)
Positive = ability beats the combine signal → buy-low (tank candidate). Negative = combine beats demonstrated ability → fade (combine-inflated / biker).
Two tracks, because the NSBA4 draft pool splits cleanly:
-
Track A — returning players (18 of the 52 nsba4 combine entrants have prior NSBA1–3 game history). Here both terms are real numbers.
z(value)= z of career game PPTF (toss-up points / tossups-faced, pooled over all their clean games, all seasons);z(price)= z of their nsba4 combinetheta_overall(the raw IRT ability — see correction below). The two correlate r = 0.74 across these 18 — so the residual off that line is a genuine, mostly-orthogonal mispricing signal. Each player carries a confidence =sqrt(career tossups-faced / max), so a 27-game Vishnu read is trusted far more than a 1-game Ethan read. -
Track B — nsba4-only pool with a Discord tank flag (no game data). The IRT model can't be residualized (no game anchor), so these rest on qualitative intel only:
z(price)= nsba4 combine theta;z(value)= a conservative expectation prior fromdiscord_player_signals.tanking_risk(med-tank returning vet → +0.8z, low-tank → +0.3z). Confidence is fixed low (0.40) — these are intel reads, not measured value. This is where the named INTEL tanks (Ziang, nocombomomento) live.
Exclusions (hard)
- Cheat:
santhosh_b.(Santhosh V, nsba4 raw ≈ 15) — staff caught him **biking - leaking answers. His combine is inflated, not tanked**; discount entirely. Removed from the board, listed in the EXCLUDE block.
- Staff / non-draftable:
eagle_student, a.new.rag, auride0, jhuang25, xpoes (our GM), thecryolite, isobowldev. None of these appear in the nsba4 combine pool anyway — they self-exclude — but they are listed for completeness.
Results
Buy-low board — top tank candidates (mispricing > 0)
| # | player | handle | track | tank flag | nsba4 combine (raw / rank-of-52) | game evidence | mispricing | conf |
|---|---|---|---|---|---|---|---|---|
| 1 | Riyan N | nocombomomento | B (intel) | med | 6 / 45th | none (CS, "cs is unbikable") | +2.02 | 0.40 |
| 2 | Ziang Z | deasert_willow | B (intel) | med | 7 / 43rd | none (bio/cs, "genuinely sandbagging") | +1.90 | 0.40 |
| 3 | Mihir K | modernnewton | A (game) | med | 4 / 48th | 13 games, 0.24 PPTF | +1.21 | 0.71 |
| 4 | Rohan G | — | A (game) | — | 22 / 10th | 16 games, 0.56 PPTF | +1.00 | 0.79 |
| 5 | Chris W | — | A (game) | — | 14 / 36th | 4 games, 0.32 PPTF | +0.61 | 0.40 |
| 6 | Daniel Lu | dannyridel44 | B (intel) | low | 16 / 25th | none (returning vet) | +0.59 | 0.40 |
| 7 | Charles H | — | A (game) | — | 9 / 42nd | 3 games, 0.21 PPTF | +0.47 | 0.35 |
| 8 | Uddip K | uscgak | B (intel) | low | 15 / 28th | none (returning, phys) | +0.44 | 0.40 |
| 9 | Akhil B | abat48 | A (game) | low | 35 / 3rd | 6 games, 0.67 PPTF | +0.41 | 0.49 |
| 10 | Ethan W | — | A (game) | — | 10 / 41st | 1 game, 0.16 PPTF | +0.27 | 0.20 |
| 11 | Kensuke O | — | A (game) | — | 6 / 45th | 2 games, 0.08 PPTF | +0.14 | 0.28 |
The headline buys. Both top Track-A and Track-B signals agree on the same story.
- Riyan N (nocombomomento) & Ziang Z (deasert_willow) are the two largest mispricings on the board, and they are the two CS-leaning players the INTEL flags as tanks. Both posted near-bottom combines (raw 6–7, ranks 43–45 of 52) yet are returning officers/veterans, both self-describe as CS-capable in a pool where CS is the scarcest, hardest-to-fake category ("CS is unbikable"). The combine is understating them by ~2 z. These are the marquee buy-lows — but on intel only (conf 0.40); they have no NSBA game tape to confirm. Ziang is also a likely captain, which complicates "buying" him.
- Mihir K (modernnewton) is the strongest game-backed tank: a
medtank flag, a bottom-of-pool combine (raw 4, 48th of 52), but 13 real games of NSBA play at a respectable 0.24 PPTF. Intel: "college made me know nothing except bio," i.e. rusty/disengaged on the tryout but with real floor. Highest-confidence buy-low (0.71). - Rohan G — no tank flag, just a quiet undervalue: 16 games, 0.56 career PPTF (top-tier real production, peaked 0.88 in a season) but only a mid combine (raw 22, 10th). High confidence (0.79). The kind of player a vibe-drafting field lets slide.
- Akhil B (abat48) is a special case: he is both a top-3 combine (raw 35) and a top game producer (0.67 PPTF), so his mispricing is small-positive — the combine roughly fairly prices an already-elite player. Not a steal, but not a trap.
Fade board — combine-inflated, likely bikers (mispricing < 0, game-backed)
These have real game data that undershoots their combine — pay the combine price and you overpay. Sorted most-overpriced first:
| player | handle | nsba4 combine (raw / rank) | game | mispricing | conf | read |
|---|---|---|---|---|---|---|
| Vishnu M | oof7373 | 34 / 4th | 27 games, 0.37 PPTF | −1.20 | 1.00 | most data on the board; elite combine, only-good game |
| Varyan J | varnite | 15 / 28th | 6 games, 0.08 PPTF | −1.11 | 0.49 | |
| Shannon I | shamp0 | 18 / 18th | 4 games, 0.08 PPTF | −1.10 | 0.40 | |
| Roshan A | monoionic | 21 / 11th | 7 games, 0.18 PPTF | −0.93 | 0.53 | |
| Kian D | pine2359 | 38 / 1st | 9 games, 0.53 PPTF | −0.76 | 0.60 | combine #1 overall, real but not #1 |
| Aldric B | — | 20 / 13th | 18 games, 0.23 PPTF | −0.66 | 0.79 | |
| Edward C | mathfan2020 | 18 / 18th | 4 games, 0.16 PPTF | −0.71 | 0.40 | |
| Edwin H | draoethar | 30 / 5th | 11 games, 0.41 PPTF | −0.38 | 0.66 | "the goat" by rep; combine > game here |
Caveat on the fades. Negative mispricing means the combine over-states relative to game PPTF, not that the player is bad. Vishnu (−1.20) and Kian (−0.76) are the cleanest "don't pay the combine sticker" flags: both are top-4 combines whose real game tape, while good, doesn't match a top-4 billing — exactly the biking-inflation pattern (D7). Edwin (draoethar) is the cautionary fade: INTEL calls him "the goat" who got better after college and biked chem on his combine; his combine (5th) modestly out-runs his measured nsba2/3 game rate, so he prices high but is plausibly still good — treat his −0.38 as "fairly-to-slightly-over priced," not a true fade.
Cross-checks against the named INTEL cases
- Ziang / deasert_willow → surfaced #2 buy-low (largest game-less mispricing). ✓
- santhosh_b. → excluded as cheat (combine inflated, not tanked). ✓
- nocombomomento → #1 buy-low (the "CS is unbikable" tell + bottom combine). ✓
- Edwin (draoethar) → INTEL "returning star," but his game tape mildly underruns his combine, so he lands on the fade side (−0.38, low magnitude). The model and the hype disagree slightly — flagged, not resolved.
Limitations / caveats
- Very small n. Track A is 18 players; the buy-low > 0 set is 11. Track-A
game reads range from 1 game (Ethan W) to 27 (Vishnu) — read
mispricingwith theconfidencecolumn, which issqrt(career-TUH/max). The 1–4 game reads (Ethan, Kensuke, Charles, Chris, Edward, Shannon) are barely better than noise. - Track B is intel, not measurement. Ziang and nocombomomento's #1–#2 ranks rest entirely on Discord chatter ("genuinely sandbagging," "cs is unbikable") plus a low combine — there is no NSBA game tape for them (conf fixed 0.40). The direction is well-motivated by D7 (low combine + returning officer + unbikable CS), but the magnitude (+1.9–2.0) is a placed prior, not data. Don't over-trust the exact size.
- Within-pool z-scaling. Both terms are standardized within the nsba4-returning pool (Track A) / full nsba4 pool (Track B), so mispricing is a relative draft-board quantity, not an absolute points number. Cross-season combine→game commensurability is itself only "roughly" established (finding 10).
- PPTF for nsba3 is a rate proxy (no per-player TUH in the paired layout — see data dictionary); the denominator is estimated for nsba3-only careers. Affects most Track-A players, who are nsba3-heavy.
- Eligibility / captaincy not modeled. Several top buys are likely captains
(Ziang, Akhil per INTEL) — a captain can't be "bought low." Only 5 of 52 nsba4
combine entrants are currently
paid & eligible; many buy-low names are not yet confirmed draft-eligible. This board prices ability vs combine; cross it with the eligibility/captain list before acting. - De-biking is partial (finding 10): we never see MC-vs-short-answer per question,
so
thetaonly down-weights the gameable signal. The fade flags (esp. Vishnu, Kian) lean on the same partial correction. - CORRECTION (2026-05-30, red-team M2): the Track-A price anchor is
theta_overall(raw IRT), not the de-biked column. Confirmed by recomputation on the 18 returning nsba4 entrants:corr(career PPTF, theta_overall) = 0.740(the cited anchor),corr(career PPTF, debiked_overall) = 0.669,corr(career PPTF, raw_overall) = 0.759. The 0.74 in this finding is therefore the raw-theta correlation; the "de-biked" framing for Track A was mislabeled. Implication: if you re-price Track A on the de-biked column the anchor drops to r=0.67 and every residual (mispricing) shifts modestly — the ordering of the buy-low/fade boards is unlikely to flip materially (raw and de-biked theta correlate highly for this 18-player nsba4 pool), but the exact mispricing magnitudes are anchor-dependent and should be read as ordinal. See finding 15b for the verification.
Reproduce
Inputs are the just-built combine_ability.csv + player_season_master.csv. The
board is outputs/buylow_board.csv (32 rows: 11 buy-low, 13 fade, 8 EXCLUDE);
plots outputs/buylow_board.png (ranked mispricing) and outputs/buylow_scatter.png
(combine vs game for the 18 returning players, with the fair-value diagonal).