NCAA men's basketball — Bayesian projection rebuild
D1 men's hoops projections built on a hierarchical NB2 with per-(position × experience) quadratic — the same architecture that drives the NBA player projections, ported to the NCAA experience axis (Fr/So/Jr/Sr) since DOB isn't available in any college source.
Substrate covers 344,319 player-games across 8,417 players and 18,752 games. Smoke validation hit r = 0.972 empirical-vs-posterior at ≥1,500 minutes (n=1,748) and correctly identified Zach Edey, Cooper Flagg, Antoine Davis, Drew Timme, Adama Sanogo, et al. as the top tier by posterior mean.
Pipeline status
phase 2 grid runningMethodology
how it worksWhy this isn't 538-style team Elo: a Bayesian per-player pipeline lets us combine prior strength, per-position aging, and live in-season updates the way the NBA stack does. The pipeline below is the spec being built; subscribe to the changelog in the parent NCAA hub for ship updates.
What's in the model
- 3-level hierarchy:
league → position (G/F/C) → player, with non-centered parameterization on the position and player offsets for clean mixing. - Per-position quadratic:
log_rate = mu_player + beta_exp_pos[k]·(exp - 1.5) - gamma_pos[k]·(exp - peak_exp_pos[k])². Each position carries its own peak experience and curvature;peak_exp_pos ~ N(2.5, 0.7)centers on a Jr/Sr peak. - Substrate aggregation: per-(player, season) rather than per-game — 26× faster than per-game with the same per-36 estimands, matches the empirical curve unit.
- Context features (Phase 4, ready): per-(athlete, season) z-scored pace, team quality, mates' usage, and gravity. v2 folds these into Stan; v1 ships first.
What's not in v1
- No per-player experience tilt (sigma_exp_player not identifiable with NCAA's 1.7-season average career window). WNBA makes the same call.
- No per-row recency weighting yet (deferred to v2 along with the live in-season blend).