How we project
AutoDrafters Projection Model v2.0 · live since April 2026
The short version
Most fantasy projection models multiply last year's points by a recency weight and an age curve. That works until a star player misses half a season — then the model either over-projects (averaging a healthy season into the prior) or under-projects (treating an injury-truncated year as evidence of decline).
v2.0 separates the question into three pieces:
projection = per_game_pace × expected_games × team_contextEach piece is modeled independently. A 4-game injury season counts as 4 games of evidence about pace — not as half a season's worth of points dragging the projection down.
Try the model
interactive · runs in your browser using the same projectV2 function the cron usesThe headline injury case. v1 averaged elite 2023 + injury 2024 + back-to-elite 2025 and over-projected. v2 down-weights the 4-game year via shrinkage.
Per-game pace shrunk toward the position baseline of 7.5 PPG with strength κ=2. Lower κ = trust the player's data more. Higher κ = pull harder toward the average.
Per-game pace
For each player, we compute a fantasy-points-per-game estimate from their last three seasons, weighted by recency × games observed. A 17-game season at recency-tier 0.3 gets effective weight 5.1; a 4-game injury at recency-tier 0.5 gets weight 2.0. The longer healthy season dominates.
Each season's pace is then empirically Bayes-shrunk toward the position baseline by an amount that depends on sample size. Seasons with few games get pulled harder toward the position prior. The shrinkage strength is calibrated separately per position because RB and WR distributions are heavier-tailed than QB and TE.
We didn't find any other public projection system that does principled Bayesian shrinkage on per-game pace. Most either weight by raw season totals (and inherit the sample-size noise) or aggressively drop short seasons (and lose the partial-year signal).
Expected games
Independent of pace, we project how many games a player will play next year:
expected_games = career_games_rate × age_curve × injury_recencyCareer rate is the player's lifetime games-per-season average. The age curve reflects position-specific durability decline (RBs decline faster than WRs). Injury-recency multiplies based on what happened recently: a season-ending injury last year discounts expected games more than a soft-tissue partial year, which in turn discounts more than a healthy season.
This is intentionally simpler than what dedicated injury models like Draft Sharks publish (≈300 features, AUC 0.81). v3 will revisit if the gap matters.
Team context (overlay, default 1.0)
Players who switch teams or play under new coordinators don't fit the historical average. v2.0 ships with a thin overlay defaulting to 1.0, with hand-curated overrides for the highest-impact offseason changes. The overlay is opt-in per player; v2.0b will surface it as an editable field for analysts in our CMS.
Rookies
Rookies have no NFL history, so v2.0 uses a position × draft-round table with adepth_chart_openflag for the small list of rookies with a clear path to a starting role. Comparable-player modeling — finding historically similar prospects by combine, college dominator, and landing spot — is on the v3 roadmap.
How we measured it
We backtested v2.0 against actual 2023 and 2024 season totals, training only on data up through the prior season (no leakage). Compared head-to-head against v1 on the same 461 (2023) and 474 (2024) skill-position players who played at least 4 games in those years.
| Backtest split | v1 MAE | v2 MAE | Δ |
|---|---|---|---|
| 2020–22 → 2023, all positions | 50.5 | 48.1 | −4.9% |
| 2020–22 → 2023, top-100 | 67.2 | 62.3 | −7.3% |
| 2021–23 → 2024, all positions | 51.7 | 49.0 | −5.2% |
| 2021–23 → 2024, top-100 | 71.9 | 65.2 | −9.2% |
MAE = mean absolute error in PPR points. v2 also improves Spearman rank correlation (+0.02 to +0.03) and top-12 retention (17% → 25% on the 2024 split).
The headline structural fix: Christian McCaffrey's 2024 backtest. v1 projected him at 348.7 PPR (off by 301 vs his injury-truncated 47.8 actual). v2 projects 315.4 — about 33 PPR closer, primarily because the per-game pace shrinkage doesn't extrapolate his elite 2023 onto a year he played 4 games.
What v2.0 doesn't fix yet
The current model improves on v1 by 5–9% on most metrics — meaningful but not the 10% bar we set as our internal ship gate. Two structural gaps explain most of the remaining error:
- No QB rushing differentiation. Lamar Jackson's 2024 actual was 430 PPR; v2 projected 261 (off by 170 PPR alone). Until we model usage components separately for QBs (rushing share vs passing share), elite rushing QBs are systematically under-projected.
- No team-context overlay. Mahomes after Tyreek left, CMC after the trade-and-injury cycle — these are scheme-context changes the model averages out instead of explicitly weighting.
v2.0b adds a hand-curated team-context overlay (analyst-flagged scheme changes, player-team changes, depth-chart-open rookies). v2.1 decomposes per-game pace into usage × efficiency, which is what addresses the QB rushing gap and most of the remaining MAE.
Where this goes
Projections refresh nightly via /api/cron/run-projections. The previous v1.0 numbers stay in the database for transparency — you can compare side-by-side via the ?model=v1.0 query parameter on the rankings page.
The full design document, including math derivations, hyperparameter calibration, and the v2.0b/v2.1 roadmap, lives in the repo at docs/projection-methodology.md.
Last updated when v2.0 shipped — April 2026. The model is recalibrated annually as new season actuals land.