Results & validation

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.

Plain-English verdict. The market point spread and total are very hard to beat. The combined model (market + football) is statistically indistinguishable from the market alone: marginally better in 2022–24, marginally worse on the untouched 2025 test. The football-only model, which never sees the market, is clearly better than naive baselines but about 0.3 points of margin error worse than the market. Probabilities are well calibrated and the 80%/95% ranges cover close to 80%/95% of outcomes.
2025 locked test · margin error (MAE)9.70combined · market 9.67 · football 9.97 (n=285)
2025 locked test · win-probability log loss0.6327market-only 0.6286 · football 0.6444 (lower is better)
2025 locked test · interval coverage80%of margins inside the 80% range · 95% range: 97%

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

HorizonGamesMargin MAEMarket MAEFootball MAETotal MAELog loss80% coverage
early428.648.618.289.970.788588%
final_pregame598.238.208.3810.210.768085%

Publicly verifiable before kickoff

HorizonGamesMargin MAEMarket MAEFootball MAETotal MAELog loss80% coverage
early428.648.618.289.970.788588%
final_pregame587.937.918.0410.290.763086%

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.

WeekGamesAverage margin error (points)Vs market line
ModelStats-onlyMarketModel pickStats-only
Week 3157.087.857.108–6–15–9–1
Week 4167.266.587.227–8–112–3–1
Week 51510.4210.5510.407–7–18–6–1
Week 6126.767.086.713–8–16–5–1
Season to date587.938.047.9125–29–431–23–4

Cumulative average margin error

ModelStats-onlyMarket
7.007.508.00WeekWeekWeekWeekStats-onlyModelMarket

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.

Retrospective benchmark, not live results. The historical tables below are the original walk-forward benchmark (preserved unchanged). They rest on two approximations that live forecasts do not have: (1) the actual starting QB stands in for the expected starter at the final horizon, and (2) historical market lines are a single untimed line per game, roughly the closing line. Both make the historical numbers somewhat optimistic compared with genuinely prospective forecasting, which is reported separately above.

Point-forecast accuracy (final pregame horizon)

SeasonsModelGamesMargin MAEMargin RMSETotal MAETotal RMSE
2019–21 (tuning)Combined (selected)82110.2313.1310.6413.27
2019–21 (tuning)Market only82110.2213.1210.6313.26
2019–21 (tuning)Football only82110.4113.3410.7913.50
2019–21 (tuning)Naive home average82111.5914.8311.1813.98
2022–24 (development)Combined (selected)8549.4812.4710.1112.90
2022–24 (development)Market only8549.4912.4810.1112.95
2022–24 (development)Football only8549.7512.7210.2713.13
2022–24 (development)Naive home average85410.6313.8010.8013.66
2025 (locked test)Combined (selected)2859.7012.2910.5313.32
2025 (locked test)Market only2859.6712.2410.4213.24
2025 (locked test)Football only2859.9712.7010.5413.28
2025 (locked test)Naive home average28511.0014.1111.0013.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.

Combined (selected)Market onlyFootball onlyNaive home average
10.0011.0012.002019202020212022202320242025Naive home averageFootball onlyCombined (selected)Market only

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.

SeasonsModelTargetGamesDifference95% interval
2022–24 (development)Football onlymargin854+0.258[0.119, 0.397]
2022–24 (development)Football onlytotal854+0.162[0.021, 0.315]
2022–24 (development)Combined (direct)margin854+0.068[-0.004, 0.138]
2022–24 (development)Combined (direct)total854+0.095[-0.020, 0.202]
2022–24 (development)Combined + injuriesmargin854-0.005[-0.024, 0.014]
2022–24 (development)Combined + injuriestotal854+0.004[-0.081, 0.093]
2022–24 (development)Combined (boosting)margin854+0.095[-0.031, 0.215]
2022–24 (development)Combined (boosting)total854-0.047[-0.174, 0.091]
2022–24 (development)Combined (selected)margin854-0.008[-0.035, 0.019]
2022–24 (development)Combined (selected)total854-0.004[-0.092, 0.083]
2025 (locked test)Football onlymargin285+0.301[-0.029, 0.593]
2025 (locked test)Football onlytotal285+0.122[-0.178, 0.442]
2025 (locked test)Combined (direct)margin285+0.066[-0.081, 0.200]
2025 (locked test)Combined (direct)total285-0.029[-0.215, 0.151]
2025 (locked test)Combined + injuriesmargin285+0.014[-0.073, 0.103]
2025 (locked test)Combined + injuriestotal285+0.087[-0.102, 0.271]
2025 (locked test)Combined (boosting)margin285-0.014[-0.192, 0.149]
2025 (locked test)Combined (boosting)total285+0.290[0.007, 0.573]
2025 (locked test)Combined (selected)margin285+0.026[-0.113, 0.163]
2025 (locked test)Combined (selected)total285+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

0%0%25%25%50%50%75%75%100%100%Predicted P(home win)Observed home-win rate
2022–24 development
0%0%25%25%50%50%75%75%100%100%Predicted P(home win)Observed home-win rate

Win-probability scores

SeasonsModelnLog lossBrier
2019–21 (tuning)Combined (selected)5540.62910.4232
2022–24 (development)Combined (selected)8540.62250.4219
2019–21 (tuning)Market only5540.62860.4232
2022–24 (development)Market only8540.62340.4228
2019–21 (tuning)Football only5540.64240.4327
2022–24 (development)Football only8540.64660.4434
2025 (locked test)Combined (selected)2850.63270.4307
2025 (locked test)Market only2850.62860.4269
2025 (locked test)Football only2850.64440.4387

Interval coverage (combined model)

SeasonsTargetNominalActualMean width (pts)
2022–24 (development)margin80%79.7%31.8
2022–24 (development)margin95%95.3%52.1
2022–24 (development)total80%82.0%33.5
2022–24 (development)total95%94.7%51.1
2025 (locked test)margin80%80.0%32.5
2025 (locked test)margin95%97.2%52.0
2025 (locked test)total80%78.2%32.7
2025 (locked test)total95%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).

ModelSeasonsGamesLoss difference95% intervalTotal RMSE without → with
Combinedtuning8210.035[-0.221, 0.307]13.269 → 13.269
Combineddevelopment8540.271[-0.473, 0.936]12.896 → 12.902
Football onlytuning821-0.560[-1.885, 0.774]13.505 → 13.483
Football onlydevelopment854-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+.

ModelSeasonsGamesLoss difference95% intervalTotal RMSE without → with
Combinedtuning285-2.843[-5.970, 0.252]13.358 → 13.251
Combineddevelopment854-0.465[-1.467, 0.557]12.940 → 12.922
Football onlytuning285-3.167[-6.726, 0.094]13.540 → 13.423
Football onlydevelopment854-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 statusFinal practiceCasesStartedPlayed, not startedDeclared inactiveP(start), 90% interval
DoubtfulDNP2000120.02 (0.00–0.09)
DoubtfulLimited90070.05 (0.00–0.19)
DoubtfulFull20020.17 (0.00–0.57)
QuestionableLimited131685390.52 (0.45–0.59)
QuestionableFull4136130.87 (0.78–0.94)
QuestionableDNP2180110.39 (0.23–0.56)
EstimatorCasesLog lossBrierMean predictedObserved
status beta11Questionable + Doubtful (162)0.62460.22450.5650.475
status jeffreysQuestionable + Doubtful (162)0.62160.22440.5630.475
status x practiceQuestionable + Doubtful (162)0.60190.21430.5350.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
WkGameForecastP(home)FinalMargin error
1ARI @ NO25.9–18.925%20–130.0
1BAL @ BUF26.1–25.647%40–411.4
1CAR @ JAX20.4–23.560%10–2612.9
1CIN @ CLE27.1–20.025%17–166.1
1DAL @ PHI20.6–30.781%20–246.1
1DET @ GB23.7–25.254%13–2712.5
1HOU @ LA20.7–25.465%9–140.3
1KC @ LAC25.2–22.439%21–278.7
1LV @ NE20.6–24.764%20–1311.2
1MIA @ IND22.9–25.056%8–3322.9
1MIN @ CHI23.8–22.945%27–242.1
1NYG @ WAS19.9–26.772%6–218.3
1PIT @ NYJ19.8–18.142%34–320.4
1SF @ SEA22.9–20.038%17–131.1
1TB @ ATL24.4–22.341%23–201.0
1TEN @ DEN17.7–27.580%12–201.8
2ATL @ MIN20.6–23.358%22–618.7
2BUF @ NYJ27.4–19.623%30–1012.2
2CAR @ ARI20.0–26.371%22–271.4
2CHI @ DET21.3–27.871%21–5224.4
2CLE @ BAL17.5–31.588%17–419.9
2DEN @ IND23.5–21.642%28–292.9
2JAX @ CIN22.5–26.764%27–310.2
2LAC @ LV25.4–21.434%20–97.0
2LA @ TEN22.9–17.931%33–199.0
2NE @ MIA21.0–23.758%33–278.7
2NYG @ DAL20.1–24.966%37–401.8
2PHI @ KC23.5–22.645%20–172.1
2SEA @ PIT19.2–23.263%31–1718.0
2SF @ NO21.8–19.540%26–212.7
2TB @ HOU20.0–22.156%20–193.1
2WAS @ GB23.8–27.562%18–275.4
3ARI @ SF21.2–22.754%15–160.6
3ATL @ CAR24.7–19.229%0–3035.5
3CIN @ MIN19.9–22.759%10–4835.2
3DAL @ CHI26.3–23.639%14–3119.6
3DEN @ LAC22.2–24.256%20–231.0
3DET @ BAL25.1–28.862%38–3011.7
3GB @ CLE24.3–15.119%10–1312.2
3HOU @ JAX20.8–23.659%10–174.2
3IND @ TEN24.4–18.428%41–2015.1
3KC @ NYG25.3–19.127%22–96.8
3LA @ PHI21.7–26.165%26–332.5
3LV @ WAS20.0–23.461%24–4113.6
3MIA @ BUF20.3–32.585%21–312.2
3NO @ SEA16.6–24.876%13–4422.8
3NYJ @ TB18.5–25.673%27–295.2
3PIT @ NE22.5–21.545%21–146.0
4BAL @ KC25.1–22.740%20–3719.4
4CAR @ NE17.3–23.470%13–4222.9
4CHI @ LV24.4–25.051%25–241.7
4CIN @ DEN19.1–27.476%3–2816.7
4CLE @ DET17.6–29.083%10–3412.6
4GB @ DAL26.2–20.028%40–406.1
4IND @ LA23.6–27.663%20–273.0
4JAX @ SF20.1–24.665%26–219.6
4LAC @ NYG23.7–18.430%18–218.3
4MIN @ PIT22.5–21.645%21–243.9
4NO @ BUF17.0–33.191%19–314.1
4NYJ @ MIA21.3–24.359%21–273.0
4PHI @ TB23.8–20.837%31–252.9
4SEA @ ARI22.9–21.744%23–201.8
4TEN @ HOU16.5–24.976%0–2617.7
4WAS @ ATL20.5–22.556%27–344.9
5DAL @ NYJ23.3–24.553%37–2216.3
5DEN @ PHI21.2–25.464%21–178.2
5DET @ CIN29.3–17.714%37–241.4
5HOU @ BAL21.1–20.646%44–1033.4
5KC @ JAX23.6–21.440%28–315.2
5LV @ IND19.8–27.775%6–4026.0
5MIA @ CAR23.1–20.740%24–275.5
5MIN @ CLE17.9–15.339%21–171.4
5NE @ BUF22.0–30.276%23–2011.2
5NYG @ NO19.6–21.957%14–269.8
5SF @ LA18.4–27.678%26–2312.2
5TB @ SEA20.3–24.363%38–357.0
5TEN @ ARI17.5–26.077%22–219.5
5WAS @ LAC23.6–24.953%27–1018.3
6ARI @ IND19.6–29.179%27–315.4
6BUF @ ATL27.1–21.930%14–2415.2
6CHI @ WAS22.5–28.770%25–247.2
6CIN @ GB16.1–30.989%18–275.8
6CLE @ PIT17.4–23.871%9–237.5
6DAL @ CAR25.2–20.933%27–307.3
6DEN @ NYJ23.8–17.928%13–113.9
6DET @ KC24.0–26.156%17–3010.9
6LAC @ MIA24.9–22.138%29–270.8
6LA @ BAL24.7–18.126%17–37.4
6NE @ NO25.3–22.739%25–193.4
6PHI @ NYG23.6–16.625%17–3424.1
6SEA @ JAX23.5–22.746%20–127.3
6SF @ TB21.0–24.661%19–307.4
6TEN @ LV19.7–23.161%10–206.6
7ATL @ SF21.6–24.057%10–207.7
7CAR @ NYJ18.7–20.354%13–68.6
7GB @ ARI25.1–18.325%27–232.8
7HOU @ SEA18.8–23.565%19–273.3
7IND @ LAC23.2–24.854%38–2415.6
7LA @ JAX22.8–20.540%35–725.7
7LV @ KC15.0–29.989%0–3116.1
7MIA @ CLE15.8–16.852%6–3124.1
7NE @ TEN23.4–17.127%31–1311.7
7NO @ CHI20.0–24.565%14–267.5
7NYG @ DEN15.8–24.076%32–337.2
7PHI @ MIN24.5–21.036%28–222.5
7PIT @ CIN25.4–19.227%31–338.2
7TB @ DET24.5–30.269%9–249.3
7WAS @ DAL27.4–27.649%22–4421.8
8BUF @ CAR26.5–18.422%40–922.8
8CHI @ BAL22.0–24.156%16–3011.9
8CLE @ NE16.7–25.678%13–3210.1
8DAL @ DEN24.3–26.958%24–4417.3
8GB @ PIT24.9–22.239%35–257.3
8MIA @ ATL18.5–24.971%34–1030.3
8MIN @ LAC22.5–25.158%10–3724.5
8NYG @ PHI18.8–25.973%20–3810.9
8NYJ @ CIN18.7–24.569%39–386.8
8SF @ HOU19.9–22.959%15–268.0
8TB @ NO25.4–21.434%23–316.0
8TEN @ IND16.7–33.792%14–387.1
8WAS @ KC19.2–30.082%7–2810.2
9ARI @ DAL25.2–28.159%27–1713.0
9ATL @ NE19.7–26.873%23–246.0
9BAL @ MIA30.6–22.422%28–613.8
9CAR @ GB15.8–29.587%16–1316.7
9CHI @ CIN27.7–24.437%47–421.7
9DEN @ HOU19.2–21.658%18–155.5
9IND @ PIT28.0–23.834%20–2711.2
9JAX @ LV23.1–20.338%30–291.8
9KC @ BUF28.8–26.942%21–288.8
9LAC @ TEN26.9–16.918%27–203.0
9MIN @ DET20.8–30.780%27–2412.9
9NO @ LA17.3–31.989%10–349.4
9SEA @ WAS23.7–21.540%38–1421.8
9SF @ NYG25.4–21.735%34–246.3
10ARI @ SEA19.5–26.573%22–4414.9
10ATL @ IND20.2–28.275%25–312.0
10BAL @ MIN27.2–21.529%27–192.4
10BUF @ MIA30.4–20.618%13–3026.8
10CLE @ NYJ19.9–19.045%20–277.9
10DET @ WAS28.1–19.120%44–2213.0
10JAX @ HOU18.2–17.646%29–367.6
10LA @ SF27.4–22.531%42–2611.1
10LV @ DEN16.9–26.880%7–106.9
10NE @ TB23.7–26.659%28–237.9
10NO @ CAR16.7–22.669%17–715.9
10NYG @ CHI20.3–25.266%20–240.9
10PHI @ GB21.7–24.157%10–75.4
10PIT @ LAC21.6–23.555%10–2513.1
11BAL @ CLE22.5–14.221%23–161.4
11CAR @ ATL19.1–23.765%30–277.7
11CHI @ MIN23.9–25.253%19–173.3
11CIN @ PIT21.9–26.665%12–3417.3
11DAL @ LV26.7–21.530%33–1611.8
11DET @ PHI22.9–24.956%9–165.0
11GB @ NYG24.4–16.021%27–201.5
11HOU @ TEN21.6–16.832%16–131.8
11KC @ DEN23.6–20.738%19–226.0
11LAC @ JAX22.8–20.841%6–3531.0
11NYJ @ NE16.4–28.284%14–271.1
11SEA @ LA23.6–27.763%19–212.1
11SF @ ARI26.1–22.335%41–2215.3
11TB @ BUF20.6–27.171%32–445.5
11WAS @ MIA22.5–24.355%13–161.2
12ATL @ NO20.3–22.255%24–1015.8
12BUF @ HOU25.5–19.027%19–2310.5
12CAR @ SF20.2–28.877%9–202.3
12CLE @ LV17.4–21.664%24–1018.2
12IND @ KC23.0–26.260%20–230.2
12JAX @ ARI24.3–22.442%27–241.1
12MIN @ GB17.9–26.176%6–238.8
12NE @ CIN28.4–21.626%26–200.8
12NYG @ DET19.1–32.587%27–346.4
12NYJ @ BAL16.0–30.789%10–231.7
12PHI @ DAL25.2–22.639%21–245.6
12PIT @ CHI21.6–25.763%28–311.1
12SEA @ TEN26.2–13.713%30–246.5
12TB @ LA21.4–30.177%7–3418.4
13ARI @ TB20.3–24.965%17–201.6
13ATL @ NYJ20.6–18.039%24–275.6
13BUF @ PIT24.0–20.837%26–715.8
13CHI @ PHI20.4–26.570%24–1515.1
13CIN @ BAL24.0–30.471%32–1424.4
13DEN @ WAS23.9–17.928%27–265.0
13GB @ DET24.3–26.256%31–248.9
13HOU @ IND20.8–26.669%20–169.7
13JAX @ TEN23.3–17.328%25–316.0
13KC @ DAL28.9–25.235%28–316.7
13LA @ CAR26.9–17.619%28–3112.3
13LV @ LAC16.4–26.681%14–316.8
13MIN @ SEA15.6–29.287%0–2612.4
13NO @ MIA19.5–25.269%17–211.7
13NYG @ NE19.7–27.374%15–3310.4
13SF @ CLE20.2–13.927%26–811.7
14CHI @ GB19.9–27.374%21–280.4
14CIN @ BUF25.4–30.266%34–390.2
14DAL @ DET27.2–29.557%30–4411.7
14DEN @ LV24.4–16.222%24–171.2
14HOU @ KC18.1–24.169%20–1016.0
14IND @ JAX23.6–20.236%19–3620.4
14LA @ ARI29.5–19.818%45–1718.2
14MIA @ NYJ22.6–19.738%34–1021.1
14NO @ TB17.2–25.676%24–2012.4
14PHI @ LAC21.9–20.744%19–224.3
14PIT @ BAL19.3–25.570%27–2211.3
14SEA @ ATL25.9–20.028%37–922.1
14TEN @ CLE14.8–20.268%31–297.5
14WAS @ MIN22.9–20.339%0–3133.6
15ARI @ HOU17.1–27.682%20–409.4
15ATL @ TB18.6–24.669%29–286.9
15BAL @ CIN26.9–24.740%24–021.8
15BUF @ NE27.3–24.037%35–310.7
15CAR @ NO21.4–20.043%17–204.4
15CLE @ CHI15.4–25.581%3–3117.9
15DET @ LA24.8–31.170%34–410.8
15GB @ DEN21.6–20.544%26–349.1
15IND @ SEA14.2–28.188%16–1811.9
15LAC @ KC17.7–24.572%16–139.8
15LV @ PHI13.1–27.789%0–3116.4
15MIA @ PIT20.3–23.761%15–289.6
15MIN @ DAL21.3–27.169%34–2613.8
15NYJ @ JAX13.7–28.088%20–4813.7
15TEN @ SF16.3–30.588%24–371.1
15WAS @ NYG23.3–23.549%29–218.3
16ATL @ ARI24.9–22.138%26–194.2
16BUF @ CLE26.6–15.215%23–208.5
16CIN @ MIA26.0–21.633%45–2119.7
16GB @ CHI21.9–24.056%16–224.0
16JAX @ DEN20.5–25.366%34–2018.8
16KC @ TEN19.5–17.742%9–2618.8
16LAC @ DAL24.3–26.958%34–1719.6
16LA @ SEA21.2–22.252%37–380.0
16LV @ HOU12.7–29.692%21–2314.9
16MIN @ NYG22.8–19.938%16–130.1
16NE @ BAL22.7–27.566%28–248.8
16NYJ @ NO16.9–23.872%6–2916.1
16PHI @ WAS24.6–18.528%29–185.0
16PIT @ DET23.5–30.673%29–2412.1
16SF @ IND25.2–21.234%48–2717.0
16TB @ CAR23.1–20.940%20–235.2
17ARI @ CIN23.3–29.871%14–3716.5
17BAL @ GB17.3–21.564%41–2421.3
17CHI @ SF24.1–28.665%38–420.5
17DAL @ WAS29.0–18.817%30–233.3
17DEN @ KC23.6–10.512%20–136.1
17DET @ MIN26.8–18.421%10–2321.4
17HOU @ LAC19.6–22.860%20–167.2
17JAX @ IND25.4–23.441%23–174.0
17LA @ ATL28.1–20.323%24–2710.8
17NE @ NYJ27.3–15.414%42–1020.1
17NO @ TEN20.9–20.447%34–267.6
17NYG @ LV22.9–18.734%34–1019.8
17PHI @ BUF21.5–25.764%13–125.2
17PIT @ CLE20.1–15.131%6–1312.0
17SEA @ CAR23.9–18.931%27–1012.0
17TB @ MIA24.4–19.431%17–208.1
18ARI @ LA18.4–33.389%20–372.1
18BAL @ PIT23.1–19.636%24–265.5
18CAR @ TB20.3–23.359%14–161.0
18CLE @ CIN19.1–30.483%20–1813.3
18DAL @ NYG27.2–22.833%17–3421.5
18DET @ CHI23.8–28.164%19–167.3
18GB @ MIN13.8–26.386%3–160.5
18IND @ HOU14.2–24.180%30–381.9
18KC @ LV20.2–16.033%12–146.2
18LAC @ DEN11.1–27.691%3–190.5
18MIA @ NE16.1–29.887%10–3814.3
18NO @ ATL20.2–25.768%17–193.6
18NYJ @ BUF13.4–25.685%8–3514.8
18SEA @ SF24.5–23.946%13–39.4
18TEN @ JAX17.3–30.286%7–4121.1
18WAS @ PHI17.8–19.856%24–179.1
19BUF @ JAX25.1–27.758%27–245.6
19GB @ CHI23.6–23.046%27–314.7
19HOU @ PIT19.8–19.949%30–624.1
19LAC @ NE21.2–27.872%3–166.4
19LA @ CAR26.4–17.821%34–315.6
19SF @ PHI18.8–24.970%23–1910.1
20BUF @ DEN21.9–23.956%30–331.1
20HOU @ NE18.8–24.469%16–286.4
20LA @ CHI25.9–23.439%20–170.5
20SF @ SEA18.6–26.074%6–4127.5
21LA @ SEA21.1–25.765%27–310.6
21NE @ DEN22.2–20.643%10–71.5
22SEA @ NE24.4–21.638%29–1313.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.