NFL v6 — how the model works.
v6 predicts each NFL game's margin and win probability from a decomposed Elo system: a long-running team-minus-QB rating, a per-player QB Elo that travels with the quarterback, and a situational adjustment layer for rest, weather, primetime, divisional matchups, stadium HFA, and injury aggregates. The QB layer was rebuilt in May 2026 (Phase 9 A.5) to derive each game's QB Elo update from an independent statistical composite — passing EPA, CPOE, and rushing share — rather than as a fraction of the team-margin signal. The rebuild story, including a finding we missed for six weeks until shipping exposed it, is documented below.
1. The team spine
Each team carries an Elo rating that updates after every game based on margin of victory, opponent strength, and home-field advantage. The design follows FiveThirtyEight's published NFL Elo system: a fixed K-factor, an MOV multiplier that grows with the margin but flattens at the tails (so a 40-point blowout doesn't over-credit the winner), and a small constant for home-field. The spine is the long-running league memory: it knows that the Chiefs are a top-tier organization regardless of which specific players started a given Sunday.
Crucially, the team spine is the team minus QB rating. When a quarterback changes teams, his personal Elo (next section) travels with him; the team Elo stays put and reflects the front office, scheme, roster depth, and coaching that don't walk out the door with the starter.
2. The QB layer (rebuilt in A.5)
Each game, every QB's personal Elo is updated by an independent statistical composite computed from that game's play-by-play data:
+ 0.40 × (cpoe / 100)
+ 0.25 × (rushing_epa / carries) × rush_share
adjusted_value = game_value − (opp_def_value_allowed − league_avg)
game_elo_equivalent = adjusted_value × 250
weight = 200 / (career_dropbacks + 400)
qb_shift = clip(weight × (game_elo_equivalent − current_qb_elo), ±25)
The 0.60 EPA / 0.40 CPOE / 0.25 rushing weighting matches the 2019 FiveThirtyEight QB Elo design that Nate Silver published openly and aligns with the modern consensus on passing-value attribution. Opponent adjustment uses a per-team rolling eight-game average of opposing-QB VALUE allowed; weak defenses boost the adjusted value, elite defenses penalize it.
The empirical-Bayes sample-size shrinkage (the weight = 200 / (career_dropbacks + 400) term) means a rookie's first four starts move their Elo aggressively toward whatever they actually did on the field, while a veteran with 1,500 career dropbacks is anchored — one bad game only nudges Aaron Rodgers a few Elo points.
On the offseason, each QB's carried Elo is blended toward their draft-tier baseline (Top-10 / R1 late / Day-2 / Day-3 / UDFA) with a weight that decays exponentially with career dropbacks — true rookies start at the pure tier baseline, established veterans have effectively rolled the prior out of their rating. (See Finding 3 below for why this works and why the alternative of one-time threshold resets crashes Brier.)
3. The situational layer
After the team spine and QB ratings produce a baseline prediction, a situational layer adds a final adjustment for rest disparity, divisional rivalry, primetime games, weather (temperature + wind + precipitation), stadium-specific HFA, and the team's aggregate injury impact for the week. Each situational signal's scale was tuned by a single β coefficient per training fold, so the layer's contribution is calibrated rather than hand-weighted.
4. How accurate is this?
Loading calibration numbers…
Brier score measures probabilistic accuracy: lower is better, 0.25 is what you get from flipping a coin on every game, and a perfect predictor scores zero. FiveThirtyEight's published 2025 NFL Brier was 0.222; we landed within tolerance of that on the walled-off 2025 holdout, which is the only validation that matters for “does the methodology generalize.”
5. Scale interpretation — what do the QB Elo numbers mean?
QB Elo is centered on zero (replacement-level starter) with positive numbers indicating above-replacement play. The scale is calibrated to NFL game outcomes, which means a +30 to +50 Elo QB at peak is the elite tier. Even all-time greats sit roughly in that band when their team Elo is summed in.
A useful set of reference bands, derived from the historical Elo distribution in this system:
- Elite (+30 to +50): the top 5–10 QBs in a given season.
- Above average (+10 to +30): the rest of the top 15 or so.
- Average (−10 to +10): the broad middle of the league's starters.
- Below average (−30 to −10): backup-tier starters.
- Replacement (−100 to −50): practice-squad activations and struggling rookies.
All-time peak Elos in this system: Patrick Mahomes ~+81 (2018 MVP season), Lamar Jackson ~+97 (2019 MVP season), Josh Allen ~+54. Tom Brady's 2021–22 seasons still place him in the all-time top 10. Drake Maye sits at the top of the 2025 leaderboard at +63 as of the most recent snapshot.
6. What we discovered building this
Six findings from Phase 9 are worth publishing publicly. Two are technical results, three are credibility-building “what we couldn't fix and why” notes, and the last is the rebuild story that closed Phase 9.
Finding 1 — Per-fold β calibration absorbs naive-prior errors
Tuning a global scale factor (β) on training-fold data is sufficiently robust that “improving the classifier underneath β” produces almost no measurable Brier change. Phase 4 used a naive injury-out prior (Questionable QB → 75% chance of playing) lifted from FantasyPros. Phase 5 built an empirical-Bayes classifier from 10,344 starter-week records and learned the actual rate is closer to 65%, with real per-position differences. Plumbed into the pipeline, the corrected classifier improved fold-mean Brier by −0.0001 (essentially zero) — β had already compressed the naive prior by ~0.7× when over-weighted.
Finding 2 — Web-search feature pipelines can't be Brier-backtested
Brave Search (and Google, Bing) return the current indexed web. Any LLM scoring of past games will retrieve retrospective coverage that contains the outcome. We built a narrative-signal pipeline (Brave → Claude → JSON score) and verified the infrastructure works — reliability, cost tracking, contract adherence — but the first three-case probe demonstrated the leakage cleanly. NYJ 2023 W1 (Rodgers debut) scored −1.5 citing his Achilles injury, which happened during the game we'd be predicting. The pipeline ships as dormant infrastructure, accumulating data for a forward A/B that can actually be validated.
Finding 3 — Continuous prior decay beats one-time threshold resets
Each QB's offseason starting Elo is blended toward their draft-tier baseline with an exponentially decaying weight on career dropbacks. We arrived at this design by failing first. The Brock Purdy problem (Mr. Irrelevant 2022, initialized at the Day-3 baseline of −100 and unable to climb out) suggested a one-time reset at, say, 100 career dropbacks. That experiment crashed 2025 holdout Brier from 0.2197 to 0.2249 (+0.0052), because the “reset target” (per-game-EPA shrinkage) was a noisier estimator than the carried Bayesian-updated Elo we were overwriting. Bryce Young 2024 crashed to −250 under that scheme.
The fix that worked uses continuous decay toward the stable tier baseline:
blended_elo = (1 − decay_weight) × regressed_carried_elo
+ decay_weight × tier_baseline
At zero dropbacks (true rookie) the decay weight is 1.0, the pure tier baseline. At 500 dropbacks (~3 seasons starting) it drops to 0.29 (moderate pull). At 1,500 dropbacks it's effectively rolled out at 0.02. This design matches the published methodology of nfelo and Nate Silver's QBERT — three independent NFL prediction systems converged on continuous decay, not threshold resets. 2025 Brier improved from 0.2197 to 0.2187 (−0.0010).
Finding 4 — Scale compression in team-derived QB Elo
Pre-A.5, our QB Elo was derived as a fixed fraction of each game's team-margin error. Because the per-game team-Elo shift averages only a few points and the QB collected ~20–30% of that shift, the structural ceiling for in-season movement was about ±30 Elo. An elite QB on a team with strong supporting cast would help win games but only collect a sliver of the credit, then have 40% of those gains rolled off each offseason. The result was visible to anyone reading a leaderboard: elite QBs were compressed into a narrow band that contradicted individual-EPA rankings.
Brock Purdy is the canonical case. His individual EPA puts him in the top tier; his pre-A.5 team-Elo-derived rating was around −14. SF's wins are produced by Shanahan's scheme, Trent Williams' tackle play, a deep WR/RB room, and a top defense, in addition to Purdy. The team-derived rating distributes credit across all of those.
This finding holds today as a published limit: our team Elo is the credit-shared signal, individual EPA tells you something different, and you should use both views together. Finding 6 below describes what we changed to narrow the gap.
Finding 5 — What we couldn't fix: 2021/2022 in-sample misses
We held in 2021 and 2022 in-sample folds during Phase 9 with the hypothesis that aging veteran over-credit was the dominant problem (Rodgers post-MVP 2021 at age 38, Brady post-Super Bowl 2022 at age 45 — both football-correct decline candidates). We fit per-bucket LOWESS curves on 444 QB-seasons and found the elite-bucket curve apparently goes UP from age 36 to 44 — because the elite cohort past age 38 is dominated by Brady, Brees, Rodgers, and Manning, who survived in the elite cohort precisely because they aged well.
We made the conservative call: use the AVG-bucket curve shape for all QBs, flatlined at age 37. The mechanical consequence is that we produce no age-driven decline past 37, so the 2021 and 2022 in-sample fold targets missed (lift +0.0006 and +0.0002 against a +0.001 sub-gate). The walled-off 2025 out-of-sample holdout still improved (0.2218 → 0.2187), which is the validation that matters for whether the methodology generalizes. We did not reverse-engineer a decline parameter to make in-sample numbers look better; the rejected elite-bucket curve is preserved at findings_data/elite_age_curve_rejected.csv so anyone can audit the survivorship-bias finding.
Finding 6 — Independent QB attribution (A.5, the face-validity rebuild)
Finding 4 documented that pre-A.5 the QB Elo was structurally scale-compressed — and six weeks of Brier-based validation showed no measurable penalty for that. But when we shipped the rebuild to the public site and individual QB rankings became visible, the face-validity problem was obvious: Brock Purdy ranked below Bryce Young, every elite QB was compressed into a narrow ±30 band, and the rankings contradicted every published EPA leaderboard.
Phase 9 A.5 rebuilt the QB-update step to derive each game's QB shift from the independent statistical composite shown in section 2 — passing EPA, CPOE, and rushing share, opponent- adjusted — instead of slicing off a fraction of the team's margin signal. The new rankings overlap the 2025 EPA top-10 by 7 of 10 (up from 2–3 of 10 pre-A.5). Drake Maye landed at #1 with +63; Jordan Love and Brock Purdy are now in the top tier where every individual-EPA measure already had them.
2025 holdout Brier moved by +0.0005 (within the ±0.002 tolerance band); the in-sample 6-fold mean improved by 0.0027. The information moved from the team layer to the QB layer; total calibration is preserved; individual QB rankings are now defensible. The team-minus-QB Elo is unchanged.
7. Known limitations
If you're consuming this model's predictions, you should know:
- Scale compression remains (Finding 4 + 6). A.5 narrowed the gap between team-Elo-derived QB rankings and individual EPA, but the two are still distinct objects measuring different things. Use both views together.
- No age-driven decline past 37 (Finding 5). Our model will sometimes carry forward a veteran's Elo with insufficient decline. Survivorship bias in the elite-QB age data prevented us from supporting a falsifiable decline curve past 37.
- Late-week injury news is not captured. Friday-evening news doesn't make it into the Saturday- morning prediction. The AI overlay's forward-validation plan addresses this starting the 2026 season.
- 2021 and 2022 in-sample folds are not fixed. Both seasons had high-impact mid-week roster volatility that no pre-game team-rating signal can capture — the same structural ceiling FiveThirtyEight's 2021 retrospective acknowledges.
8. Why we publish the limitations
A model that publishes only its wins is a marketing exercise. A model that publishes its losses honestly is a research artifact. We chose the second. The findings above (especially 3 and 6 — the rebuild paths where the first attempt broke things and the diagnosis came from production face validity) are the kind of detail that distinguishes a defensible prediction system from a polished demo. Phase 10+ work will add to this list as new things break.
Methodology last refreshed 2026-05-17. Live calibration last updated —.