Where the data comes from
Every number starts as an official per-game NFL stat line — targets, receptions, yards, touchdowns, carries — from nflverse, the open-source NFL data project used across the analytics community (licensed CC-BY 4.0, pulled via the nflreadpy package). No scraped websites, no hand-entered stats, no expert opinions. The pipeline pulls seasons 2021–2025, verifies them against known references, and caches them locally. Every run is deterministic: the same inputs always produce these exact numbers, byte for byte.
How a projection is built
Is it accurate? The backtest, honestly
Before trusting the model, we made it predict the past: for each season 2022–2025 it projected players using only data available before that season (enforced by automated leakage tests), then was scored against what actually happened. Here is the honest weakness first, then where it holds up.
The floor→ceiling bands should contain ~80% of real outcomes; in backtests they contained ~43%, and the misses skew low — real seasons collapse (injury clusters, benchings, role loss) more often than the model’s independent-game math allows. Trust the order of players more than the width of the bands, and mentally extend floors downward, especially for injury-prone players. The M1 model update targets exactly this.
Update (M1): the over-ranking of aging veterans this section used to flag is largely addressed — projections are age-adjusted along empirical positional curves and weight recent form more heavily (see the steps above), which cut the 30-and-older cohort’s backtest error without hurting rank accuracy. One lever remains: the model does not yet reflect a player’s role or opportunity. Where we still rank a 30+ player well above his market ADP, that gap — flagged with a — may be a role signal the model can’t see yet; the roles update targets it. Band width (the ~43% above) is also still open.
Where it does hold up — draft ordering is strong and consistent across positions:
| Season | Subset | n | Spearman | MAE | 80% cov | 50% cov |
|---|---|---|---|---|---|---|
| 2022 | overall | 504 | 0.725 | 51.8 | 0.42 | 0.23 |
| 2022 | top-100 | 100 | 0.489 | 78.1 | 0.37 | 0.24 |
| 2023 | overall | 485 | 0.721 | 53.1 | 0.41 | 0.25 |
| 2023 | top-100 | 100 | 0.559 | 68.5 | 0.48 | 0.34 |
| 2024 | overall | 499 | 0.728 | 53.0 | 0.40 | 0.22 |
| 2024 | top-100 | 100 | 0.227 | 76.2 | 0.40 | 0.28 |
| 2025 | overall | 503 | 0.747 | 47.0 | 0.47 | 0.27 |
| 2025 | top-100 | 100 | 0.292 | 81.4 | 0.48 | 0.26 |
| POOLED | overall | 1991 | 0.732 | 51.2 | 0.43 | 0.24 |
| POOLED | top-100 | 100 | 0.371 | 85.3 | 0.41 | 0.30 |
| Pos | n | Spearman | MAE | 80% cov | 50% cov |
|---|---|---|---|---|---|
| QB | 270 | 0.673 | 65.3 | 0.32 | 0.21 |
| RB | 512 | 0.727 | 51.1 | 0.43 | 0.26 |
| WR | 762 | 0.751 | 54.1 | 0.44 | 0.25 |
| TE | 447 | 0.751 | 37.8 | 0.46 | 0.23 |
Spearman = rank correlation between projected median and actual total (higher is better). MAE = average absolute error in fantasy points (lower is better). 80% / 50% cov = share of actual totals inside the projected [p10,p90] / [p25,p75] bands (well-calibrated ≈ 0.80 / 0.50; below target = bands too narrow).
What the flags mean
R — rookie prior. No NFL games exist, so the projection is built from historical rookie seasons of players drafted at a similar slot and position. Honest but wide; backtests show these run ~19 points conservative on average.
LS — low sample. Under 16 NFL games since 2021; blended toward a positional archetype so a hot 10-game stretch can’t top the board.
NT — new team. History was produced elsewhere; the model deliberately does not adjust for scheme/team changes yet (M1 will). Apply your own judgment here.
What this model deliberately ignores (for now)
No strength of schedule, no coaching-scheme projections, no preseason hype, no expert consensus, no opponent/matchup logic. That is a feature at this stage: everything in these ranks is traceable to real games and arithmetic you can audit. The roadmap layers context on in stages, each validated by the same backtest before it ships:
M1 — opportunity & context. Team/scheme and opportunity inputs plus a clustered availability model to widen and lower floors — directly targeting the calibration weakness above.
M2 — comparable-player career modeling. Analog-based trajectories for aging curves and breakouts.
M3 — market signals. Draft-market information folded in as a check, never as the projection itself.
Transparency is the brand — the goal is that every number on this site is traceable to real games and arithmetic you can audit.