← Back to Projectionsnflsim-0.2.2

How the NFL projections work

This page documents the projection engine behind the numbers on the NFL Projections tab — what it is, how it was rebuilt and validated, and the one thing we want to be unmissable: these are context, not bets. Our own backtests show the betting market prices these stats efficiently.

The model, in one paragraph

Every player line on the Projections tab comes out of nflsim, a market-anchored usage × efficiency model. It starts from the betting market's game total and spread (the best public estimate of game environment), converts them to implied team points and play volume, splits that volume into official pass attempts and designed rushes, distributes the attempts/targets/carries across the roster using trailing usage shares gated by the current depth chart, and finally applies per-player efficiency rates (yards per target/carry/attempt, catch rate, TD rates) blended toward league priors. Because the anchor is the market line, the projections inherit the market's view of each game — by design. They answer "who gets the volume and what does it turn into?", not "is the line wrong?".

Where the data comes from

FeedSource
Play-by-play, weekly player stats, snap countsnflverse (2016–present)
Depth chartsWeekly snapshots; current-season charts refreshed year-round
Market lines (total, spread), cross-bookTheOddsAPI capture — featured markets 2020+, props 2023+
Game results + schedule spinenflverse schedules/results

The projection chain

  1. Market anchor. Game total + spread → implied team points for each side. No market line, no projection — upcoming weeks populate as lines post.
  2. Team volume. Regressions from team points and tendencies to offensive plays, then to official-unit pools: official pass attempts, scrambles, and sacks are separated so player pass attempts reconcile to the box score (dropbacks ≠ attempts — that conflation was the old engine's biggest error).
  3. Usage shares. Trailing target/carry shares, regressed and blended, distributed over the depth-chart-gated active set (not the 90-man roster). The starting QB is arbitrated explicitly and takes a fitted share of the team attempt pool; backups project zero rather than diluting the starter.
  4. Efficiency.Per-player yards per target / carry / attempt, catch rate, and TD rates, shrunk toward league priors — with the league baselines re-based so a constants-fit year doesn't leak stale efficiency into later seasons.
  5. Stat lines. Usage × efficiency → the projected attempts, targets, carries, yards, receptions and anytime rush/rec TD probability shown on the tab, plus the team total the projection reconciles to.

The 0.2.2 rebuild — and the receipts

A full accuracy audit (2026-07-01) of the first shipped engine found the share layer was fine but the team-volume level was not: pass-side volume ran ~+23–26% hot because dropbacks were being treated as official attempts and every rostered player diluted the usage pool. The rebuild that followed was run as a pre-registered variant ladder — every change was specified with pass/fail gates before implementation, graded on held-out seasons (2024–2025, constants fit on 2023 only), and every gate-decisive number was independently re-derived by an adversarial verifier with fresh data pulls.

StatPrevious engine bias0.2.2 held-out bias
Targets+26.5%+3.0%
Receptions+24.3%+1.3%
Receiving yards+24.7%+2.1%
Carries−5.4%−1.8%
Rushing yards−10.4%−2.6%
Pass attempts+25.0%+3.7%
Passing yards+22.3%+1.7%

Held-out pooled bias, 2024–2025, matched player-games; aggregate bias = (mean projected − mean actual) / mean actual. All seven stats sit inside ±5% — the pre-registered ship bar. Level accuracy is the claim here, not market-beating ranking: the closing line still out-ranks the engine on every stat it prices (that finding is exactly why these are labeled context, not bets).

Two honest caveats on that table. First, the same 2024–2025 seasons were reused across several rounds of model selection, so ±5% is a selection-conditioned upper bound, not an unbiased forecast — the 2026 live scorecard below is the first truly untouched test. Second, the table grades the retrospective regime (players who actually dressed). We re-ran 2024–2025 under the live forward regime — depth-chart active sets, no knowledge of who dresses — and receiving/pass biases re-inflate to roughly +10–16% (targets +14%, receptions +12%, receiving yards +12%, pass attempts +13%) while the ground game stays near budget (carries +4%, rushing yards +2%).

The mechanism is participation, not skill: about 30% of forward-regime rows are charted players who end up not dressing, and they hold ~21% of projected volume. Expect early-season 2026 weekly bias to look more like the forward numbers than the table above — that is the honest baseline the drift alarm watches.

Retrospective backtest vs live forward — read the badge

Every season on the Projections tab carries one of two labels, and they are not interchangeable:

Retrospective backtest

Seasons 2023–2025. Rebuilt after the fact: anchored to closing lines and graded on players who actually dressed. That removes two real-world uncertainties (line movement, inactives), so accuracy on these seasons is an upper bound on what the live model can do.

Live forward projections

2026 onward. Written before kickoff from current depth charts and the freshest market line, then graded as-is — no re-runs, no hindsight. The live scorecard era starts with 2026 week 1; judge the model on these seasons.

Why these are not bet signals

Projections are context, not bets — our own backtests show the market prices these stats efficiently. We tested it three separate ways before and after the rebuild: model vs closing prop lines across five markets, a dedicated rush/receiving-yards battery, and a full re-test under the de-biased 0.2.2 engine including open-line and line-movement plays. Every one came back no-edge: the closing line ranks player outcomes better than the engine on every market it prices, and the engine adds under half a percent of incremental information over the line.

That result is the norm, not a failure — prop markets are efficient at the level a volume-and-efficiency model operates on. Publishing the projections anyway, with their misses visible next to the actuals, is the point: they explain how a game is expected to distribute, and the report card shows how well that expectation held up.

The model report card, live

These numbers come straight from the accuracy API that powers the Projections tab's report card — recomputed from stored projections vs official stats, not hand-curated. Per-week breakdowns and best/worst calls are on the Projections tab.

Loading live accuracy…

Known limitations

  • No line, no projection.Games without a market total/spread aren't projected; forward weeks fill in as lines post.
  • QB rows are winner-take-all.The arbitrated starter carries the passing projection; an in-game benching or injury rotation isn't modeled.
  • TD grading excludes returns.The anytime-TD probability and its grading cover rushing/receiving TDs only — kick/punt/defensive return TDs don't count either way. The displayed probability is level-calibrated(engine 0.2.3, plan 05): a 2023-fit level constant corrects the ~15% under-projection, validated held-out on 2024 and 2025 (Brier improves in both seasons and the old "runs low in every decile" pattern is gone). A small residual per-decile error remains, within sampling noise. Still treat it as directional ordering, not a market-grade price — do not compare it to sportsbook anytime-TD odds and call the difference value (the market's vig-included price beats the engine).
  • Depth charts are a scrape, not the truth. Offseason and early-week charts can lag real usage decisions; forward projections inherit those errors until charts settle.
  • Residual known biases. QB rushing-yards dispersion is traded off for level accuracy, and the deepest-bench rush shares still run slightly hot; both are documented follow-ups, not silent gaps.
← Back to ProjectionsNFL home