How good are the forecasts?
Every number here was produced by the evaluation code on real data. There are two kinds of results, reported separately. Retrospective backtests rebuild forecasts for past seasons from team data available before each game, but with two approximations: the quarterback who actually started is used as a stand-in for the expected starter, and historical market lines are untimed (approximately closing lines). This makes them somewhat optimistic. Prospective results are forecasts that were generated before kickoff and archived with timestamps in the 2026 season; only these are genuine live tests.
Live (prospective) results
Each game is scored once per horizon, against the latest valid version generated before the cutoff. "Publicly verifiable" means GitHub's own record shows the forecast file was public before kickoff; forecasts generated before kickoff on this project's machine but published later are reported separately and corrected on their game pages.
All forecasts generated before kickoff
| Horizon | Games | Margin MAE | Market MAE | Football MAE | Total MAE | Log loss | 80% coverage |
|---|---|---|---|---|---|---|---|
| early | 42 | 8.64 | 8.61 | 8.28 | 9.97 | 0.7885 | 88% |
| final_pregame | 59 | 8.23 | 8.20 | 8.38 | 10.21 | 0.7680 | 85% |
Publicly verifiable before kickoff
| Horizon | Games | Margin MAE | Market MAE | Football MAE | Total MAE | Log loss | 80% coverage |
|---|---|---|---|---|---|---|---|
| early | 42 | 8.64 | 8.61 | 8.28 | 9.97 | 0.7885 | 88% |
| final_pregame | 58 | 7.93 | 7.91 | 8.04 | 10.29 | 0.7630 | 86% |
Live head-to-head, 2026
The three forecasts on the same finished games, using only forecasts that were publicly verifiable before kickoff. Margin error uses the last forecast before kickoff (the market forecast is the line's own margin); the record vs the market line uses the locked version of each pick. Lower margin error is better. So far the lowest season-to-date margin error is the market line (7.91 points over 58 games): too few games to separate the forecasts with confidence.
| Week | Games | Average margin error (points) | Vs market line | |||
|---|---|---|---|---|---|---|
| Model | Stats-only | Market | Model pick | Stats-only | ||
| Week 3 | 15 | 7.08 | 7.85 | 7.10 | 8–6–1 | 5–9–1 |
| Week 4 | 16 | 7.26 | 6.58 | 7.22 | 7–8–1 | 12–3–1 |
| Week 5 | 15 | 10.42 | 10.55 | 10.40 | 7–7–1 | 8–6–1 |
| Week 6 | 12 | 6.76 | 7.08 | 6.71 | 3–8–1 | 6–5–1 |
| Season to date | 58 | 7.93 | 8.04 | 7.91 | 25–29–4 | 31–23–4 |
Cumulative average margin error
Record vs market line: wins–losses–level results for the model pick and for the side of the locked line where the stats-only margin fell (a tracking record, not the official model pick). The market line has no record against itself.
Point-forecast accuracy (final pregame horizon)
| Seasons | Model | Games | Margin MAE | Margin RMSE | Total MAE | Total RMSE |
|---|---|---|---|---|---|---|
| 2019–21 (tuning) | Combined (selected) | 821 | 10.23 | 13.13 | 10.64 | 13.27 |
| 2019–21 (tuning) | Market only | 821 | 10.22 | 13.12 | 10.63 | 13.26 |
| 2019–21 (tuning) | Football only | 821 | 10.41 | 13.34 | 10.79 | 13.50 |
| 2019–21 (tuning) | Naive home average | 821 | 11.59 | 14.83 | 11.18 | 13.98 |
| 2022–24 (development) | Combined (selected) | 854 | 9.48 | 12.47 | 10.11 | 12.90 |
| 2022–24 (development) | Market only | 854 | 9.49 | 12.48 | 10.11 | 12.95 |
| 2022–24 (development) | Football only | 854 | 9.75 | 12.72 | 10.27 | 13.13 |
| 2022–24 (development) | Naive home average | 854 | 10.63 | 13.80 | 10.80 | 13.66 |
| 2025 (locked test) | Combined (selected) | 285 | 9.70 | 12.29 | 10.53 | 13.32 |
| 2025 (locked test) | Market only | 285 | 9.67 | 12.24 | 10.42 | 13.24 |
| 2025 (locked test) | Football only | 285 | 9.97 | 12.70 | 10.54 | 13.28 |
| 2025 (locked test) | Naive home average | 285 | 11.00 | 14.11 | 11.00 | 13.83 |
Walk-forward: each season is predicted by models trained only on earlier seasons. Historical market lines are a single untimed line per game (approximately closing), so market comparisons apply to the final-pregame horizon. The early (72-hour) horizon can only be evaluated for the football-only model historically; the table in the full report covers it.
Cumulative margin error, 2019–2025
Running mean absolute margin error across all retrospective walk-forward forecasts (lower is better), shown once at least 100 games have accumulated.
Paired comparison with the market-only benchmark
Difference in mean absolute error on the same games (model minus market; negative = better than the market), with 95% intervals from a season-week block bootstrap. Intervals that include zero mean no demonstrated difference.
| Seasons | Model | Target | Games | Difference | 95% interval |
|---|---|---|---|---|---|
| 2022–24 (development) | Football only | margin | 854 | +0.258 | [0.119, 0.397] |
| 2022–24 (development) | Football only | total | 854 | +0.162 | [0.021, 0.315] |
| 2022–24 (development) | Combined (direct) | margin | 854 | +0.068 | [-0.004, 0.138] |
| 2022–24 (development) | Combined (direct) | total | 854 | +0.095 | [-0.020, 0.202] |
| 2022–24 (development) | Combined + injuries | margin | 854 | -0.005 | [-0.024, 0.014] |
| 2022–24 (development) | Combined + injuries | total | 854 | +0.004 | [-0.081, 0.093] |
| 2022–24 (development) | Combined (boosting) | margin | 854 | +0.095 | [-0.031, 0.215] |
| 2022–24 (development) | Combined (boosting) | total | 854 | -0.047 | [-0.174, 0.091] |
| 2022–24 (development) | Combined (selected) | margin | 854 | -0.008 | [-0.035, 0.019] |
| 2022–24 (development) | Combined (selected) | total | 854 | -0.004 | [-0.092, 0.083] |
| 2025 (locked test) | Football only | margin | 285 | +0.301 | [-0.029, 0.593] |
| 2025 (locked test) | Football only | total | 285 | +0.122 | [-0.178, 0.442] |
| 2025 (locked test) | Combined (direct) | margin | 285 | +0.066 | [-0.081, 0.200] |
| 2025 (locked test) | Combined (direct) | total | 285 | -0.029 | [-0.215, 0.151] |
| 2025 (locked test) | Combined + injuries | margin | 285 | +0.014 | [-0.073, 0.103] |
| 2025 (locked test) | Combined + injuries | total | 285 | +0.087 | [-0.102, 0.271] |
| 2025 (locked test) | Combined (boosting) | margin | 285 | -0.014 | [-0.192, 0.149] |
| 2025 (locked test) | Combined (boosting) | total | 285 | +0.290 | [0.007, 0.573] |
| 2025 (locked test) | Combined (selected) | margin | 285 | +0.026 | [-0.113, 0.163] |
| 2025 (locked test) | Combined (selected) | total | 285 | +0.106 | [-0.082, 0.292] |
Probability calibration
Combined model, final horizon. Dots on the dashed line mean the probabilities meant what they said; dot size grows with the number of games.
2025 locked test
2022–24 development
Win-probability scores
| Seasons | Model | n | Log loss | Brier |
|---|---|---|---|---|
| 2019–21 (tuning) | Combined (selected) | 554 | 0.6291 | 0.4232 |
| 2022–24 (development) | Combined (selected) | 854 | 0.6225 | 0.4219 |
| 2019–21 (tuning) | Market only | 554 | 0.6286 | 0.4232 |
| 2022–24 (development) | Market only | 854 | 0.6234 | 0.4228 |
| 2019–21 (tuning) | Football only | 554 | 0.6424 | 0.4327 |
| 2022–24 (development) | Football only | 854 | 0.6466 | 0.4434 |
| 2025 (locked test) | Combined (selected) | 285 | 0.6327 | 0.4307 |
| 2025 (locked test) | Market only | 285 | 0.6286 | 0.4269 |
| 2025 (locked test) | Football only | 285 | 0.6444 | 0.4387 |
Interval coverage (combined model)
| Seasons | Target | Nominal | Actual | Mean width (pts) |
|---|---|---|---|---|
| 2022–24 (development) | margin | 80% | 79.7% | 31.8 |
| 2022–24 (development) | margin | 95% | 95.3% | 52.1 |
| 2022–24 (development) | total | 80% | 82.0% | 33.5 |
| 2022–24 (development) | total | 95% | 94.7% | 51.1 |
| 2025 (locked test) | margin | 80% | 80.0% | 32.5 |
| 2025 (locked test) | margin | 95% | 97.2% | 52.0 |
| 2025 (locked test) | total | 80% | 78.2% | 32.7 |
| 2025 (locked test) | total | 95% | 94.0% | 51.4 |
Candidate feature groups (evaluated separately before promotion)
Promotion rule, fixed before results were seen: the combined model must improve the group's target loss in the development seasons with a 95% interval entirely below zero, and also improve it in the tuning seasons. The 2025 locked season is not used. Negative differences mean the group helped.
non-QB injuries (final weekly report; expected lost snap share by unit): not promoted (rule not met)
Inputs: final weekly injury report (strictly available before the final horizon). Early horizon: not evaluable: mid-week report versions are not retained historically (now being collected).
| Model | Seasons | Games | Loss difference | 95% interval | Total RMSE without → with |
|---|---|---|---|---|---|
| Combined | tuning | 821 | 0.035 | [-0.221, 0.307] | 13.269 → 13.269 |
| Combined | development | 854 | 0.271 | [-0.473, 0.936] | 12.896 → 12.902 |
| Football only | tuning | 821 | -0.560 | [-1.885, 0.774] | 13.505 → 13.483 |
| Football only | development | 854 | -0.495 | [-1.833, 0.916] | 13.128 → 13.139 |
weather (exposure-weighted wind, gusts, cold, precipitation): not promoted (rule not met)
Inputs: RETROSPECTIVE: Open-Meteo Historical Forecast API (stitched short-lead forecasts), 2019+.
| Model | Seasons | Games | Loss difference | 95% interval | Total RMSE without → with |
|---|---|---|---|---|---|
| Combined | tuning | 285 | -2.843 | [-5.970, 0.252] | 13.358 → 13.251 |
| Combined | development | 854 | -0.465 | [-1.467, 0.557] | 12.940 → 12.922 |
| Football only | tuning | 285 | -3.167 | [-6.726, 0.094] | 13.540 → 13.423 |
| Football only | development | 854 | -2.017 | [-4.571, 0.287] | 13.106 → 13.029 |
Coaching changes are deferred (no dated source). Weather forecasts and every injury-report version are now collected before each game, so both groups can later be re-evaluated on strictly as-of data.
Quarterback start-probability audit
What the historical rates measure: whether the depth-chart QB1 started. That is not the same as playing or being active. Rates carry 90% intervals, and each test season is predicted from earlier seasons only.
| Final status | Final practice | Cases | Started | Played, not started | Declared inactive | P(start), 90% interval |
|---|---|---|---|---|---|---|
| Doubtful | DNP | 20 | 0 | 0 | 12 | 0.02 (0.00–0.09) |
| Doubtful | Limited | 9 | 0 | 0 | 7 | 0.05 (0.00–0.19) |
| Doubtful | Full | 2 | 0 | 0 | 2 | 0.17 (0.00–0.57) |
| Questionable | Limited | 131 | 68 | 5 | 39 | 0.52 (0.45–0.59) |
| Questionable | Full | 41 | 36 | 1 | 3 | 0.87 (0.78–0.94) |
| Questionable | DNP | 21 | 8 | 0 | 11 | 0.39 (0.23–0.56) |
| Estimator | Cases | Log loss | Brier | Mean predicted | Observed |
|---|---|---|---|---|---|
| status beta11 | Questionable + Doubtful (162) | 0.6246 | 0.2245 | 0.565 | 0.475 |
| status jeffreys | Questionable + Doubtful (162) | 0.6216 | 0.2244 | 0.563 | 0.475 |
| status x practice | Questionable + Doubtful (162) | 0.6019 | 0.2143 | 0.535 | 0.475 |
The practice-aware estimator (highlighted) is used. Across all QB1 games it is better with a 95% interval excluding zero; on the 162 Questionable/Doubtful cases the gain is not statistically established. All estimators over-predict starts for listed QBs in recent seasons (the rate has drifted down); this is reported, not adjusted.
Archive: 2025 retrospective forecasts
Retrospective walk-forward backtest (not published before games). Combined model shown; these were not published before the games.
Show 285 games
| Wk | Game | Forecast | P(home) | Final | Margin error |
|---|---|---|---|---|---|
| 1 | ARI @ NO | 25.9–18.9 | 25% | 20–13 | 0.0 |
| 1 | BAL @ BUF | 26.1–25.6 | 47% | 40–41 | 1.4 |
| 1 | CAR @ JAX | 20.4–23.5 | 60% | 10–26 | 12.9 |
| 1 | CIN @ CLE | 27.1–20.0 | 25% | 17–16 | 6.1 |
| 1 | DAL @ PHI | 20.6–30.7 | 81% | 20–24 | 6.1 |
| 1 | DET @ GB | 23.7–25.2 | 54% | 13–27 | 12.5 |
| 1 | HOU @ LA | 20.7–25.4 | 65% | 9–14 | 0.3 |
| 1 | KC @ LAC | 25.2–22.4 | 39% | 21–27 | 8.7 |
| 1 | LV @ NE | 20.6–24.7 | 64% | 20–13 | 11.2 |
| 1 | MIA @ IND | 22.9–25.0 | 56% | 8–33 | 22.9 |
| 1 | MIN @ CHI | 23.8–22.9 | 45% | 27–24 | 2.1 |
| 1 | NYG @ WAS | 19.9–26.7 | 72% | 6–21 | 8.3 |
| 1 | PIT @ NYJ | 19.8–18.1 | 42% | 34–32 | 0.4 |
| 1 | SF @ SEA | 22.9–20.0 | 38% | 17–13 | 1.1 |
| 1 | TB @ ATL | 24.4–22.3 | 41% | 23–20 | 1.0 |
| 1 | TEN @ DEN | 17.7–27.5 | 80% | 12–20 | 1.8 |
| 2 | ATL @ MIN | 20.6–23.3 | 58% | 22–6 | 18.7 |
| 2 | BUF @ NYJ | 27.4–19.6 | 23% | 30–10 | 12.2 |
| 2 | CAR @ ARI | 20.0–26.3 | 71% | 22–27 | 1.4 |
| 2 | CHI @ DET | 21.3–27.8 | 71% | 21–52 | 24.4 |
| 2 | CLE @ BAL | 17.5–31.5 | 88% | 17–41 | 9.9 |
| 2 | DEN @ IND | 23.5–21.6 | 42% | 28–29 | 2.9 |
| 2 | JAX @ CIN | 22.5–26.7 | 64% | 27–31 | 0.2 |
| 2 | LAC @ LV | 25.4–21.4 | 34% | 20–9 | 7.0 |
| 2 | LA @ TEN | 22.9–17.9 | 31% | 33–19 | 9.0 |
| 2 | NE @ MIA | 21.0–23.7 | 58% | 33–27 | 8.7 |
| 2 | NYG @ DAL | 20.1–24.9 | 66% | 37–40 | 1.8 |
| 2 | PHI @ KC | 23.5–22.6 | 45% | 20–17 | 2.1 |
| 2 | SEA @ PIT | 19.2–23.2 | 63% | 31–17 | 18.0 |
| 2 | SF @ NO | 21.8–19.5 | 40% | 26–21 | 2.7 |
| 2 | TB @ HOU | 20.0–22.1 | 56% | 20–19 | 3.1 |
| 2 | WAS @ GB | 23.8–27.5 | 62% | 18–27 | 5.4 |
| 3 | ARI @ SF | 21.2–22.7 | 54% | 15–16 | 0.6 |
| 3 | ATL @ CAR | 24.7–19.2 | 29% | 0–30 | 35.5 |
| 3 | CIN @ MIN | 19.9–22.7 | 59% | 10–48 | 35.2 |
| 3 | DAL @ CHI | 26.3–23.6 | 39% | 14–31 | 19.6 |
| 3 | DEN @ LAC | 22.2–24.2 | 56% | 20–23 | 1.0 |
| 3 | DET @ BAL | 25.1–28.8 | 62% | 38–30 | 11.7 |
| 3 | GB @ CLE | 24.3–15.1 | 19% | 10–13 | 12.2 |
| 3 | HOU @ JAX | 20.8–23.6 | 59% | 10–17 | 4.2 |
| 3 | IND @ TEN | 24.4–18.4 | 28% | 41–20 | 15.1 |
| 3 | KC @ NYG | 25.3–19.1 | 27% | 22–9 | 6.8 |
| 3 | LA @ PHI | 21.7–26.1 | 65% | 26–33 | 2.5 |
| 3 | LV @ WAS | 20.0–23.4 | 61% | 24–41 | 13.6 |
| 3 | MIA @ BUF | 20.3–32.5 | 85% | 21–31 | 2.2 |
| 3 | NO @ SEA | 16.6–24.8 | 76% | 13–44 | 22.8 |
| 3 | NYJ @ TB | 18.5–25.6 | 73% | 27–29 | 5.2 |
| 3 | PIT @ NE | 22.5–21.5 | 45% | 21–14 | 6.0 |
| 4 | BAL @ KC | 25.1–22.7 | 40% | 20–37 | 19.4 |
| 4 | CAR @ NE | 17.3–23.4 | 70% | 13–42 | 22.9 |
| 4 | CHI @ LV | 24.4–25.0 | 51% | 25–24 | 1.7 |
| 4 | CIN @ DEN | 19.1–27.4 | 76% | 3–28 | 16.7 |
| 4 | CLE @ DET | 17.6–29.0 | 83% | 10–34 | 12.6 |
| 4 | GB @ DAL | 26.2–20.0 | 28% | 40–40 | 6.1 |
| 4 | IND @ LA | 23.6–27.6 | 63% | 20–27 | 3.0 |
| 4 | JAX @ SF | 20.1–24.6 | 65% | 26–21 | 9.6 |
| 4 | LAC @ NYG | 23.7–18.4 | 30% | 18–21 | 8.3 |
| 4 | MIN @ PIT | 22.5–21.6 | 45% | 21–24 | 3.9 |
| 4 | NO @ BUF | 17.0–33.1 | 91% | 19–31 | 4.1 |
| 4 | NYJ @ MIA | 21.3–24.3 | 59% | 21–27 | 3.0 |
| 4 | PHI @ TB | 23.8–20.8 | 37% | 31–25 | 2.9 |
| 4 | SEA @ ARI | 22.9–21.7 | 44% | 23–20 | 1.8 |
| 4 | TEN @ HOU | 16.5–24.9 | 76% | 0–26 | 17.7 |
| 4 | WAS @ ATL | 20.5–22.5 | 56% | 27–34 | 4.9 |
| 5 | DAL @ NYJ | 23.3–24.5 | 53% | 37–22 | 16.3 |
| 5 | DEN @ PHI | 21.2–25.4 | 64% | 21–17 | 8.2 |
| 5 | DET @ CIN | 29.3–17.7 | 14% | 37–24 | 1.4 |
| 5 | HOU @ BAL | 21.1–20.6 | 46% | 44–10 | 33.4 |
| 5 | KC @ JAX | 23.6–21.4 | 40% | 28–31 | 5.2 |
| 5 | LV @ IND | 19.8–27.7 | 75% | 6–40 | 26.0 |
| 5 | MIA @ CAR | 23.1–20.7 | 40% | 24–27 | 5.5 |
| 5 | MIN @ CLE | 17.9–15.3 | 39% | 21–17 | 1.4 |
| 5 | NE @ BUF | 22.0–30.2 | 76% | 23–20 | 11.2 |
| 5 | NYG @ NO | 19.6–21.9 | 57% | 14–26 | 9.8 |
| 5 | SF @ LA | 18.4–27.6 | 78% | 26–23 | 12.2 |
| 5 | TB @ SEA | 20.3–24.3 | 63% | 38–35 | 7.0 |
| 5 | TEN @ ARI | 17.5–26.0 | 77% | 22–21 | 9.5 |
| 5 | WAS @ LAC | 23.6–24.9 | 53% | 27–10 | 18.3 |
| 6 | ARI @ IND | 19.6–29.1 | 79% | 27–31 | 5.4 |
| 6 | BUF @ ATL | 27.1–21.9 | 30% | 14–24 | 15.2 |
| 6 | CHI @ WAS | 22.5–28.7 | 70% | 25–24 | 7.2 |
| 6 | CIN @ GB | 16.1–30.9 | 89% | 18–27 | 5.8 |
| 6 | CLE @ PIT | 17.4–23.8 | 71% | 9–23 | 7.5 |
| 6 | DAL @ CAR | 25.2–20.9 | 33% | 27–30 | 7.3 |
| 6 | DEN @ NYJ | 23.8–17.9 | 28% | 13–11 | 3.9 |
| 6 | DET @ KC | 24.0–26.1 | 56% | 17–30 | 10.9 |
| 6 | LAC @ MIA | 24.9–22.1 | 38% | 29–27 | 0.8 |
| 6 | LA @ BAL | 24.7–18.1 | 26% | 17–3 | 7.4 |
| 6 | NE @ NO | 25.3–22.7 | 39% | 25–19 | 3.4 |
| 6 | PHI @ NYG | 23.6–16.6 | 25% | 17–34 | 24.1 |
| 6 | SEA @ JAX | 23.5–22.7 | 46% | 20–12 | 7.3 |
| 6 | SF @ TB | 21.0–24.6 | 61% | 19–30 | 7.4 |
| 6 | TEN @ LV | 19.7–23.1 | 61% | 10–20 | 6.6 |
| 7 | ATL @ SF | 21.6–24.0 | 57% | 10–20 | 7.7 |
| 7 | CAR @ NYJ | 18.7–20.3 | 54% | 13–6 | 8.6 |
| 7 | GB @ ARI | 25.1–18.3 | 25% | 27–23 | 2.8 |
| 7 | HOU @ SEA | 18.8–23.5 | 65% | 19–27 | 3.3 |
| 7 | IND @ LAC | 23.2–24.8 | 54% | 38–24 | 15.6 |
| 7 | LA @ JAX | 22.8–20.5 | 40% | 35–7 | 25.7 |
| 7 | LV @ KC | 15.0–29.9 | 89% | 0–31 | 16.1 |
| 7 | MIA @ CLE | 15.8–16.8 | 52% | 6–31 | 24.1 |
| 7 | NE @ TEN | 23.4–17.1 | 27% | 31–13 | 11.7 |
| 7 | NO @ CHI | 20.0–24.5 | 65% | 14–26 | 7.5 |
| 7 | NYG @ DEN | 15.8–24.0 | 76% | 32–33 | 7.2 |
| 7 | PHI @ MIN | 24.5–21.0 | 36% | 28–22 | 2.5 |
| 7 | PIT @ CIN | 25.4–19.2 | 27% | 31–33 | 8.2 |
| 7 | TB @ DET | 24.5–30.2 | 69% | 9–24 | 9.3 |
| 7 | WAS @ DAL | 27.4–27.6 | 49% | 22–44 | 21.8 |
| 8 | BUF @ CAR | 26.5–18.4 | 22% | 40–9 | 22.8 |
| 8 | CHI @ BAL | 22.0–24.1 | 56% | 16–30 | 11.9 |
| 8 | CLE @ NE | 16.7–25.6 | 78% | 13–32 | 10.1 |
| 8 | DAL @ DEN | 24.3–26.9 | 58% | 24–44 | 17.3 |
| 8 | GB @ PIT | 24.9–22.2 | 39% | 35–25 | 7.3 |
| 8 | MIA @ ATL | 18.5–24.9 | 71% | 34–10 | 30.3 |
| 8 | MIN @ LAC | 22.5–25.1 | 58% | 10–37 | 24.5 |
| 8 | NYG @ PHI | 18.8–25.9 | 73% | 20–38 | 10.9 |
| 8 | NYJ @ CIN | 18.7–24.5 | 69% | 39–38 | 6.8 |
| 8 | SF @ HOU | 19.9–22.9 | 59% | 15–26 | 8.0 |
| 8 | TB @ NO | 25.4–21.4 | 34% | 23–3 | 16.0 |
| 8 | TEN @ IND | 16.7–33.7 | 92% | 14–38 | 7.1 |
| 8 | WAS @ KC | 19.2–30.0 | 82% | 7–28 | 10.2 |
| 9 | ARI @ DAL | 25.2–28.1 | 59% | 27–17 | 13.0 |
| 9 | ATL @ NE | 19.7–26.8 | 73% | 23–24 | 6.0 |
| 9 | BAL @ MIA | 30.6–22.4 | 22% | 28–6 | 13.8 |
| 9 | CAR @ GB | 15.8–29.5 | 87% | 16–13 | 16.7 |
| 9 | CHI @ CIN | 27.7–24.4 | 37% | 47–42 | 1.7 |
| 9 | DEN @ HOU | 19.2–21.6 | 58% | 18–15 | 5.5 |
| 9 | IND @ PIT | 28.0–23.8 | 34% | 20–27 | 11.2 |
| 9 | JAX @ LV | 23.1–20.3 | 38% | 30–29 | 1.8 |
| 9 | KC @ BUF | 28.8–26.9 | 42% | 21–28 | 8.8 |
| 9 | LAC @ TEN | 26.9–16.9 | 18% | 27–20 | 3.0 |
| 9 | MIN @ DET | 20.8–30.7 | 80% | 27–24 | 12.9 |
| 9 | NO @ LA | 17.3–31.9 | 89% | 10–34 | 9.4 |
| 9 | SEA @ WAS | 23.7–21.5 | 40% | 38–14 | 21.8 |
| 9 | SF @ NYG | 25.4–21.7 | 35% | 34–24 | 6.3 |
| 10 | ARI @ SEA | 19.5–26.5 | 73% | 22–44 | 14.9 |
| 10 | ATL @ IND | 20.2–28.2 | 75% | 25–31 | 2.0 |
| 10 | BAL @ MIN | 27.2–21.5 | 29% | 27–19 | 2.4 |
| 10 | BUF @ MIA | 30.4–20.6 | 18% | 13–30 | 26.8 |
| 10 | CLE @ NYJ | 19.9–19.0 | 45% | 20–27 | 7.9 |
| 10 | DET @ WAS | 28.1–19.1 | 20% | 44–22 | 13.0 |
| 10 | JAX @ HOU | 18.2–17.6 | 46% | 29–36 | 7.6 |
| 10 | LA @ SF | 27.4–22.5 | 31% | 42–26 | 11.1 |
| 10 | LV @ DEN | 16.9–26.8 | 80% | 7–10 | 6.9 |
| 10 | NE @ TB | 23.7–26.6 | 59% | 28–23 | 7.9 |
| 10 | NO @ CAR | 16.7–22.6 | 69% | 17–7 | 15.9 |
| 10 | NYG @ CHI | 20.3–25.2 | 66% | 20–24 | 0.9 |
| 10 | PHI @ GB | 21.7–24.1 | 57% | 10–7 | 5.4 |
| 10 | PIT @ LAC | 21.6–23.5 | 55% | 10–25 | 13.1 |
| 11 | BAL @ CLE | 22.5–14.2 | 21% | 23–16 | 1.4 |
| 11 | CAR @ ATL | 19.1–23.7 | 65% | 30–27 | 7.7 |
| 11 | CHI @ MIN | 23.9–25.2 | 53% | 19–17 | 3.3 |
| 11 | CIN @ PIT | 21.9–26.6 | 65% | 12–34 | 17.3 |
| 11 | DAL @ LV | 26.7–21.5 | 30% | 33–16 | 11.8 |
| 11 | DET @ PHI | 22.9–24.9 | 56% | 9–16 | 5.0 |
| 11 | GB @ NYG | 24.4–16.0 | 21% | 27–20 | 1.5 |
| 11 | HOU @ TEN | 21.6–16.8 | 32% | 16–13 | 1.8 |
| 11 | KC @ DEN | 23.6–20.7 | 38% | 19–22 | 6.0 |
| 11 | LAC @ JAX | 22.8–20.8 | 41% | 6–35 | 31.0 |
| 11 | NYJ @ NE | 16.4–28.2 | 84% | 14–27 | 1.1 |
| 11 | SEA @ LA | 23.6–27.7 | 63% | 19–21 | 2.1 |
| 11 | SF @ ARI | 26.1–22.3 | 35% | 41–22 | 15.3 |
| 11 | TB @ BUF | 20.6–27.1 | 71% | 32–44 | 5.5 |
| 11 | WAS @ MIA | 22.5–24.3 | 55% | 13–16 | 1.2 |
| 12 | ATL @ NO | 20.3–22.2 | 55% | 24–10 | 15.8 |
| 12 | BUF @ HOU | 25.5–19.0 | 27% | 19–23 | 10.5 |
| 12 | CAR @ SF | 20.2–28.8 | 77% | 9–20 | 2.3 |
| 12 | CLE @ LV | 17.4–21.6 | 64% | 24–10 | 18.2 |
| 12 | IND @ KC | 23.0–26.2 | 60% | 20–23 | 0.2 |
| 12 | JAX @ ARI | 24.3–22.4 | 42% | 27–24 | 1.1 |
| 12 | MIN @ GB | 17.9–26.1 | 76% | 6–23 | 8.8 |
| 12 | NE @ CIN | 28.4–21.6 | 26% | 26–20 | 0.8 |
| 12 | NYG @ DET | 19.1–32.5 | 87% | 27–34 | 6.4 |
| 12 | NYJ @ BAL | 16.0–30.7 | 89% | 10–23 | 1.7 |
| 12 | PHI @ DAL | 25.2–22.6 | 39% | 21–24 | 5.6 |
| 12 | PIT @ CHI | 21.6–25.7 | 63% | 28–31 | 1.1 |
| 12 | SEA @ TEN | 26.2–13.7 | 13% | 30–24 | 6.5 |
| 12 | TB @ LA | 21.4–30.1 | 77% | 7–34 | 18.4 |
| 13 | ARI @ TB | 20.3–24.9 | 65% | 17–20 | 1.6 |
| 13 | ATL @ NYJ | 20.6–18.0 | 39% | 24–27 | 5.6 |
| 13 | BUF @ PIT | 24.0–20.8 | 37% | 26–7 | 15.8 |
| 13 | CHI @ PHI | 20.4–26.5 | 70% | 24–15 | 15.1 |
| 13 | CIN @ BAL | 24.0–30.4 | 71% | 32–14 | 24.4 |
| 13 | DEN @ WAS | 23.9–17.9 | 28% | 27–26 | 5.0 |
| 13 | GB @ DET | 24.3–26.2 | 56% | 31–24 | 8.9 |
| 13 | HOU @ IND | 20.8–26.6 | 69% | 20–16 | 9.7 |
| 13 | JAX @ TEN | 23.3–17.3 | 28% | 25–3 | 16.0 |
| 13 | KC @ DAL | 28.9–25.2 | 35% | 28–31 | 6.7 |
| 13 | LA @ CAR | 26.9–17.6 | 19% | 28–31 | 12.3 |
| 13 | LV @ LAC | 16.4–26.6 | 81% | 14–31 | 6.8 |
| 13 | MIN @ SEA | 15.6–29.2 | 87% | 0–26 | 12.4 |
| 13 | NO @ MIA | 19.5–25.2 | 69% | 17–21 | 1.7 |
| 13 | NYG @ NE | 19.7–27.3 | 74% | 15–33 | 10.4 |
| 13 | SF @ CLE | 20.2–13.9 | 27% | 26–8 | 11.7 |
| 14 | CHI @ GB | 19.9–27.3 | 74% | 21–28 | 0.4 |
| 14 | CIN @ BUF | 25.4–30.2 | 66% | 34–39 | 0.2 |
| 14 | DAL @ DET | 27.2–29.5 | 57% | 30–44 | 11.7 |
| 14 | DEN @ LV | 24.4–16.2 | 22% | 24–17 | 1.2 |
| 14 | HOU @ KC | 18.1–24.1 | 69% | 20–10 | 16.0 |
| 14 | IND @ JAX | 23.6–20.2 | 36% | 19–36 | 20.4 |
| 14 | LA @ ARI | 29.5–19.8 | 18% | 45–17 | 18.2 |
| 14 | MIA @ NYJ | 22.6–19.7 | 38% | 34–10 | 21.1 |
| 14 | NO @ TB | 17.2–25.6 | 76% | 24–20 | 12.4 |
| 14 | PHI @ LAC | 21.9–20.7 | 44% | 19–22 | 4.3 |
| 14 | PIT @ BAL | 19.3–25.5 | 70% | 27–22 | 11.3 |
| 14 | SEA @ ATL | 25.9–20.0 | 28% | 37–9 | 22.1 |
| 14 | TEN @ CLE | 14.8–20.2 | 68% | 31–29 | 7.5 |
| 14 | WAS @ MIN | 22.9–20.3 | 39% | 0–31 | 33.6 |
| 15 | ARI @ HOU | 17.1–27.6 | 82% | 20–40 | 9.4 |
| 15 | ATL @ TB | 18.6–24.6 | 69% | 29–28 | 6.9 |
| 15 | BAL @ CIN | 26.9–24.7 | 40% | 24–0 | 21.8 |
| 15 | BUF @ NE | 27.3–24.0 | 37% | 35–31 | 0.7 |
| 15 | CAR @ NO | 21.4–20.0 | 43% | 17–20 | 4.4 |
| 15 | CLE @ CHI | 15.4–25.5 | 81% | 3–31 | 17.9 |
| 15 | DET @ LA | 24.8–31.1 | 70% | 34–41 | 0.8 |
| 15 | GB @ DEN | 21.6–20.5 | 44% | 26–34 | 9.1 |
| 15 | IND @ SEA | 14.2–28.1 | 88% | 16–18 | 11.9 |
| 15 | LAC @ KC | 17.7–24.5 | 72% | 16–13 | 9.8 |
| 15 | LV @ PHI | 13.1–27.7 | 89% | 0–31 | 16.4 |
| 15 | MIA @ PIT | 20.3–23.7 | 61% | 15–28 | 9.6 |
| 15 | MIN @ DAL | 21.3–27.1 | 69% | 34–26 | 13.8 |
| 15 | NYJ @ JAX | 13.7–28.0 | 88% | 20–48 | 13.7 |
| 15 | TEN @ SF | 16.3–30.5 | 88% | 24–37 | 1.1 |
| 15 | WAS @ NYG | 23.3–23.5 | 49% | 29–21 | 8.3 |
| 16 | ATL @ ARI | 24.9–22.1 | 38% | 26–19 | 4.2 |
| 16 | BUF @ CLE | 26.6–15.2 | 15% | 23–20 | 8.5 |
| 16 | CIN @ MIA | 26.0–21.6 | 33% | 45–21 | 19.7 |
| 16 | GB @ CHI | 21.9–24.0 | 56% | 16–22 | 4.0 |
| 16 | JAX @ DEN | 20.5–25.3 | 66% | 34–20 | 18.8 |
| 16 | KC @ TEN | 19.5–17.7 | 42% | 9–26 | 18.8 |
| 16 | LAC @ DAL | 24.3–26.9 | 58% | 34–17 | 19.6 |
| 16 | LA @ SEA | 21.2–22.2 | 52% | 37–38 | 0.0 |
| 16 | LV @ HOU | 12.7–29.6 | 92% | 21–23 | 14.9 |
| 16 | MIN @ NYG | 22.8–19.9 | 38% | 16–13 | 0.1 |
| 16 | NE @ BAL | 22.7–27.5 | 66% | 28–24 | 8.8 |
| 16 | NYJ @ NO | 16.9–23.8 | 72% | 6–29 | 16.1 |
| 16 | PHI @ WAS | 24.6–18.5 | 28% | 29–18 | 5.0 |
| 16 | PIT @ DET | 23.5–30.6 | 73% | 29–24 | 12.1 |
| 16 | SF @ IND | 25.2–21.2 | 34% | 48–27 | 17.0 |
| 16 | TB @ CAR | 23.1–20.9 | 40% | 20–23 | 5.2 |
| 17 | ARI @ CIN | 23.3–29.8 | 71% | 14–37 | 16.5 |
| 17 | BAL @ GB | 17.3–21.5 | 64% | 41–24 | 21.3 |
| 17 | CHI @ SF | 24.1–28.6 | 65% | 38–42 | 0.5 |
| 17 | DAL @ WAS | 29.0–18.8 | 17% | 30–23 | 3.3 |
| 17 | DEN @ KC | 23.6–10.5 | 12% | 20–13 | 6.1 |
| 17 | DET @ MIN | 26.8–18.4 | 21% | 10–23 | 21.4 |
| 17 | HOU @ LAC | 19.6–22.8 | 60% | 20–16 | 7.2 |
| 17 | JAX @ IND | 25.4–23.4 | 41% | 23–17 | 4.0 |
| 17 | LA @ ATL | 28.1–20.3 | 23% | 24–27 | 10.8 |
| 17 | NE @ NYJ | 27.3–15.4 | 14% | 42–10 | 20.1 |
| 17 | NO @ TEN | 20.9–20.4 | 47% | 34–26 | 7.6 |
| 17 | NYG @ LV | 22.9–18.7 | 34% | 34–10 | 19.8 |
| 17 | PHI @ BUF | 21.5–25.7 | 64% | 13–12 | 5.2 |
| 17 | PIT @ CLE | 20.1–15.1 | 31% | 6–13 | 12.0 |
| 17 | SEA @ CAR | 23.9–18.9 | 31% | 27–10 | 12.0 |
| 17 | TB @ MIA | 24.4–19.4 | 31% | 17–20 | 8.1 |
| 18 | ARI @ LA | 18.4–33.3 | 89% | 20–37 | 2.1 |
| 18 | BAL @ PIT | 23.1–19.6 | 36% | 24–26 | 5.5 |
| 18 | CAR @ TB | 20.3–23.3 | 59% | 14–16 | 1.0 |
| 18 | CLE @ CIN | 19.1–30.4 | 83% | 20–18 | 13.3 |
| 18 | DAL @ NYG | 27.2–22.8 | 33% | 17–34 | 21.5 |
| 18 | DET @ CHI | 23.8–28.1 | 64% | 19–16 | 7.3 |
| 18 | GB @ MIN | 13.8–26.3 | 86% | 3–16 | 0.5 |
| 18 | IND @ HOU | 14.2–24.1 | 80% | 30–38 | 1.9 |
| 18 | KC @ LV | 20.2–16.0 | 33% | 12–14 | 6.2 |
| 18 | LAC @ DEN | 11.1–27.6 | 91% | 3–19 | 0.5 |
| 18 | MIA @ NE | 16.1–29.8 | 87% | 10–38 | 14.3 |
| 18 | NO @ ATL | 20.2–25.7 | 68% | 17–19 | 3.6 |
| 18 | NYJ @ BUF | 13.4–25.6 | 85% | 8–35 | 14.8 |
| 18 | SEA @ SF | 24.5–23.9 | 46% | 13–3 | 9.4 |
| 18 | TEN @ JAX | 17.3–30.2 | 86% | 7–41 | 21.1 |
| 18 | WAS @ PHI | 17.8–19.8 | 56% | 24–17 | 9.1 |
| 19 | BUF @ JAX | 25.1–27.7 | 58% | 27–24 | 5.6 |
| 19 | GB @ CHI | 23.6–23.0 | 46% | 27–31 | 4.7 |
| 19 | HOU @ PIT | 19.8–19.9 | 49% | 30–6 | 24.1 |
| 19 | LAC @ NE | 21.2–27.8 | 72% | 3–16 | 6.4 |
| 19 | LA @ CAR | 26.4–17.8 | 21% | 34–31 | 5.6 |
| 19 | SF @ PHI | 18.8–24.9 | 70% | 23–19 | 10.1 |
| 20 | BUF @ DEN | 21.9–23.9 | 56% | 30–33 | 1.1 |
| 20 | HOU @ NE | 18.8–24.4 | 69% | 16–28 | 6.4 |
| 20 | LA @ CHI | 25.9–23.4 | 39% | 20–17 | 0.5 |
| 20 | SF @ SEA | 18.6–26.0 | 74% | 6–41 | 27.5 |
| 21 | LA @ SEA | 21.1–25.7 | 65% | 27–31 | 0.6 |
| 21 | NE @ DEN | 22.2–20.6 | 43% | 10–7 | 1.5 |
| 22 | SEA @ NE | 24.4–21.6 | 38% | 29–13 | 13.1 |
The 2025 locked test was run once, on 2026-09-24, after the production model was frozen. Later changes (quarterback availability, validation and publication handling in releases) affect live forecasts only; the evaluated model itself is unchanged. Any future evaluation of a revised model on 2025 will be labelled a re-evaluation, not an untouched test.
Evaluation runs: walk-forward bt_20260924T234801Z · locked test locked_20260924T234835Z (code 39e057cbc51b). Full reports: reports/backtest/LATEST.md and reports/locked_test/LATEST.md in the repository.