Methodology

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_context

Each 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 uses

The 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.

2025recency 0.5
24.5PPG
17 games · weight ×8.5
2024recency 0.3
11.9PPG
4 games · weight ×1.2
2023recency 0.2
24.5PPG
16 games · weight ×3.2
v3 projection · κ=2
18.31
PPG (aged)
×
13.3
Games
×
1.00
Team
=
242.9
PPR pts

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.

v1 (legacy)
185.6
recency-weighted total
v2 (current) · κ=2
242.9
+57.3 vs v1

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_recency

Career 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 splitv1 MAEv2 MAEΔ
2020–22 → 2023, all positions50.548.1−4.9%
2020–22 → 2023, top-10067.262.3−7.3%
2021–23 → 2024, all positions51.749.0−5.2%
2021–23 → 2024, top-10071.965.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.