Methodology & track record
Model rebuilt Oct 2, 2026, 2:08 PM · numbers below update automatically after every game day.
Every projection on GridironProjector NFL comes from one model, and this page shows how that model would have done on 1615 regular-season games it had never seen (2020–2025), plus every game graded so far this season. The test is walk-forward: each game is projected using only games played before it, and the model's settings were chosen on 2012–2019 and frozen before the test seasons were scored.
Out-of-sample results, 2020–2025
Compared with the closing line and our old model
| Same games | Winners | Margin MAE | Brier | Log loss | Total MAE | Top prob |
|---|---|---|---|---|---|---|
| This model | 64.8% | 10.14 | 0.220 | 0.633 | 10.45 | 94% |
| Market closing line | 66.8% | 9.76 | 0.210 | 0.608 | 10.28 | 93% |
| Previous site model | 60.7% | 11.02 | 0.246 | 0.716 | 11.32 | 100% |
The honest read: the betting market's closing line is still better than this model, by about 1.9 points of winner accuracy and 0.37 points of average margin error. That is normal — closing lines aggregate injury news, team information and a great deal of money, and very few public models beat them. Good public NFL models pick roughly 63–68% of winners; the ceiling is low because roughly a quarter of games are decided by a field goal or less. The model's margin landed closer to the final result than the closing line in 43% of games. We show the closing line only as a benchmark; it is never an input, and no sportsbook numbers appear on our game pages.
The previous version of this site rated teams from the current season's scores alone with almost no regression, so after a week or two it produced numbers like 99% favourites. Over the same games it picked 60.7% of winners with a Brier score of 0.246 and a log loss of 0.716 — worse than calling every game 50/50 (log loss 0.693).
Model, market and blended projection
The blended projection mixes the model with the de-vigged closing market. Its weights were fitted once on 2012–2019 and frozen (23% model / 83% market for the margin). All three are scored on the same 1615 test games.
| 2020–2025 | Winners | Margin MAE | Brier | Log loss | Total MAE |
|---|---|---|---|---|---|
| Model only | 64.8% | 10.14 | 0.220 | 0.633 | 10.45 |
| Market only (closing) | 66.8% | 9.76 | 0.210 | 0.608 | 10.28 |
| Blended projection | 66.5% | 9.81 | 0.211 | 0.613 | 10.29 |
The blend improves on the model everywhere, but it does not beat the closing line: the market already contains most of what the model knows. The site shows all three so you can see where the model disagrees.
2026 backtest graded against recorded closing lines
| Same games | Games | Winners | Margin MAE | Brier | Total MAE |
|---|---|---|---|---|---|
| Model | 16 | 68.8% | 6.41 | 0.204 | 11.29 |
| Closing line | 16 | 50.0% | 7.06 | 0.246 | 11.53 |
| Blended projection | 16 | 50.0% | 6.92 | 0.233 | 11.53 |
Model = the walk-forward backtest number (recomputed each model run, not the frozen pregame number; see the season record above). Closing line = the last line this site recorded before kickoff (consensus across books).
Features we tested
Rule: a feature stays only if it improves the 2012–2019 walk-forward. Kept: pace (offensive plays, totals only): -0.02 total MAE on 2012-2019. Tried and dropped because they made the backtest worse: OL/DL pressure proxy (sacks + QB hits per dropback); 4th-down aggressiveness; NGS receiver separation; short weeks; byes; non-QB injury load by snap share (WR/TE/OL, CB/S/DL/LB); pass / rush / success-rate rating splits.
Are the probabilities honest?
A calibrated model's 70% favourites should win about 70% of the time. Each row groups the test games by the favourite's projected chance and shows how often that favourite actually won.
| Favourite's chance | Games | Projected | Actually won |
|---|---|---|---|
| 50–55% | 369 | 52.5% | 55.1% |
| 55–60% | 280 | 57.3% | 60.4% |
| 60–65% | 293 | 62.3% | 60.8% |
| 65–70% | 200 | 67.5% | 67.5% |
| 70–75% | 194 | 72.3% | 75.3% |
| 75–80% | 143 | 77.2% | 72.7% |
| 80–85% | 85 | 82.2% | 77.6% |
| 85–90% | 40 | 87.2% | 90.0% |
| 90–100% | 11 | 91.7% | 81.8% |
The highest regular-season chance the model gave any team in these six seasons was 94%. It does not hand out 99%: history does not support it.
Season by season
| Season | Games | Winners | Line | Old | MAE | Line MAE | Brier | Line Brier |
|---|---|---|---|---|---|---|---|---|
| 2020 | 256 | 67.1% | 67.5% | 62.7% | 10.10 | 9.83 | 0.216 | 0.201 |
| 2021 | 272 | 63.1% | 62.4% | 57.6% | 11.10 | 10.78 | 0.223 | 0.216 |
| 2022 | 271 | 60.6% | 66.2% | 58.4% | 9.27 | 8.74 | 0.225 | 0.209 |
| 2023 | 272 | 64.0% | 68.0% | 59.2% | 10.29 | 9.90 | 0.226 | 0.219 |
| 2024 | 272 | 69.1% | 71.3% | 65.4% | 10.05 | 9.61 | 0.213 | 0.200 |
| 2025 | 272 | 65.3% | 65.3% | 60.9% | 10.02 | 9.72 | 0.220 | 0.212 |
Early season vs late
Early weeks are where the old model broke. Preseason priors keep the new one steady.
| Weeks | Games | Winners | Old | MAE | Old MAE | Top prob | Old top |
|---|---|---|---|---|---|---|---|
| Weeks 1-2 | 192 | 65.5% | 53.4% | 8.95 | 10.09 | 82% | 87% |
| Weeks 3-4 | 191 | 61.4% | 49.7% | 10.86 | 14.07 | 89% | 100% |
| Weeks 5-8 | 347 | 64.5% | 59.9% | 10.54 | 11.69 | 94% | 100% |
| Weeks 9-13 | 433 | 65.2% | 64.5% | 9.73 | 9.99 | 89% | 97% |
| Weeks 14-18 | 452 | 65.9% | 65.3% | 10.42 | 10.60 | 93% | 98% |
2026 season record
Graded from the last number the site published before each kickoff (snapshotted hourly by a scheduled job, frozen at kickoff), against the final score and the closing line. This is the honest live record. Every game is on the scorecard.
Closing line on the same games: 50.0% winners, 7.1-point margin miss, 11.5-point total miss.
2026 walk-forward backtest (recomputed every model run, not frozen)
Same games, closing line: 65.3% winners, 10.3-point margin miss. Previous site model: 57.1% winners, 13.4-point miss, Brier 0.286. These are backtest numbers: every run re-projects each game with today's model and settings, so they are not what the site showed before kickoff. A few weeks is a small sample; judge the model on the multi-season numbers above.
| Week | Games | Winners | Margin MAE | Brier |
|---|---|---|---|---|
| 1 | 16 | 68.8% | 11.62 | 0.207 |
| 2 | 16 | 56.3% | 12.89 | 0.258 |
| 3 | 16 | 62.5% | 8.04 | 0.223 |
| 4 | 1 | 100.0% | 2.35 | 0.229 |
Every game in the backtest
| Game | Projected | Chance | Final | Winner |
|---|---|---|---|---|
| Wk 4 PIT @ CLE | 19–20 | Browns 52% | 24–27 | ✓ |
| Wk 3 ATL @ GB | 19–26 | Packers 72% | 35–14 | ✗ |
| Wk 3 LAC @ BUF | 20–28 | Bills 75% | 16–24 | ✓ |
| Wk 3 CAR @ CLE | 21–22 | Browns 53% | 18–21 | ✓ |
| Wk 3 NYJ @ DET | 22–30 | Lions 73% | 24–31 | ✓ |
| Wk 3 HOU @ IND | 24–25 | Colts 50% | 17–19 | ✓ |
| Wk 3 NE @ JAX | 21–22 | Jaguars 53% | 6–35 | ✓ |
| Wk 3 KC @ MIA | 26–20 | Chiefs 70% | 24–10 | ✓ |
| Wk 3 TEN @ NYG | 19–23 | Giants 64% | 7–12 | ✓ |
| Wk 3 CIN @ PIT | 22–22 | Bengals 52% | 27–30 | ✗ |
| Wk 3 SEA @ WAS | 26–18 | Seahawks 72% | 31–33 | ✗ |
| Wk 3 ARI @ SF | 18–30 | 49ers 82% | 30–36 | ✓ |
| Wk 3 MIN @ TB | 24–19 | Vikings 66% | 23–16 | ✓ |
| Wk 3 BAL @ DAL | 29–25 | Ravens 63% | 34–31 | ✓ |
| Wk 3 LV @ NO | 21–24 | Saints 59% | 35–27 | ✗ |
| Wk 3 LA @ DEN | 22–22 | Rams 52% | 26–30 | ✗ |
| Wk 3 PHI @ CHI | 23–21 | Eagles 55% | 7–27 | ✗ |
| Wk 2 DET @ BUF | 25–29 | Bills 64% | 31–41 | ✓ |
| Wk 2 CAR @ ATL | 21–29 | Falcons 74% | 34–3 | ✗ |
| Wk 2 NO @ BAL | 20–28 | Ravens 75% | 24–17 | ✗ |
| Wk 2 MIN @ CHI | 23–25 | Bears 57% | 9–3 | ✗ |
| Wk 2 CIN @ HOU | 23–28 | Texans 63% | 20–6 | ✗ |
| Wk 2 PIT @ NE | 19–25 | Patriots 68% | 3–20 | ✓ |
| Wk 2 GB @ NYJ | 25–23 | Packers 56% | 20–17 | ✓ |
| Wk 2 CLE @ TB | 18–24 | Buccaneers 69% | 23–19 | ✗ |
| Wk 2 PHI @ TEN | 26–17 | Eagles 74% | 24–20 | ✓ |
| Wk 2 JAX @ DEN | 23–21 | Jaguars 57% | 13–20 | ✗ |
| Wk 2 LV @ LAC | 21–25 | Chargers 63% | 26–14 | ✗ |
| Wk 2 SEA @ ARI | 25–20 | Seahawks 64% | 31–7 | ✓ |
| Wk 2 WAS @ DAL | 28–29 | Cowboys 53% | 20–37 | ✓ |
| Wk 2 MIA @ SF | 18–29 | 49ers 79% | 13–35 | ✓ |
| Wk 2 IND @ KC | 21–27 | Chiefs 70% | 30–33 | ✓ |
| Wk 2 NYG @ LA | 24–28 | Rams 64% | 6–28 | ✓ |
| Wk 1 NE @ SEA | 20–25 | Seahawks 64% | 10–13 | ✓ |
| Wk 1 SF @ LA | 25–27 | Rams 56% | 27–7 | ✗ |
| Wk 1 CHI @ CAR | 24–22 | Bears 56% | 59–37 | ✓ |
| Wk 1 TB @ CIN | 24–26 | Bengals 59% | 27–33 | ✓ |
| Wk 1 NO @ DET | 21–28 | Lions 71% | 30–31 | ✓ |
| Wk 1 BUF @ HOU | 23–25 | Texans 55% | 36–31 | ✗ |
| Wk 1 BAL @ IND | 26–27 | Colts 51% | 41–23 | ✗ |
| Wk 1 CLE @ JAX | 18–25 | Jaguars 72% | 10–34 | ✓ |
| Wk 1 ATL @ PIT | 18–25 | Steelers 73% | 13–20 | ✓ |
| Wk 1 NYJ @ TEN | 22–23 | Titans 52% | 23–10 | ✗ |
| Wk 1 ARI @ LAC | 20–27 | Chargers 72% | 26–14 | ✗ |
| Wk 1 MIA @ LV | 23–23 | Raiders 50% | 13–27 | ✓ |
| Wk 1 GB @ MIN | 22–26 | Vikings 62% | 22–39 | ✓ |
| Wk 1 WAS @ PHI | 20–27 | Eagles 68% | 22–24 | ✓ |
| Wk 1 DAL @ NYG | 25–26 | Giants 52% | 20–28 | ✓ |
| Wk 1 DEN @ KC | 21–23 | Chiefs 55% | 10–31 | ✓ |
Projections here are the model's pregame numbers computed from games before each week (the same walk-forward rule as the backtest). The scorecard separately grades the numbers the site actually displayed before each kickoff.
How the model works
- Data. Every play since 2009 from nflverse play-by-play (expected points added, success rate, win probability), plus schedules, rest days, stadium roof and surface, weather, starting quarterbacks, injury reports, depth charts, snap counts, Next Gen Stats, team and player stats and PFR pressure data.
- Team ratings. Each team gets an offense and defense rating twice: in points per game and in EPA per play (garbage time removed). Both are opponent adjusted, so a good day against a strong defense counts for more.
- Preseason priors. A new season starts from last season's ratings regressed 30% toward average. The prior counts as 9 games for the points rating and 4 for the EPA rating, so two or three blowouts cannot swing a team to the top of the board.
- Quarterbacks. Every QB has a value in EPA per dropback, shrunk toward replacement level until he has thrown enough and faded across seasons. A game's QB adjustment is the starter's value minus the value of the QBs the team's rating was built on, so a backup starting (or a star returning) moves the number and a normal week does not. Starters come from the schedule, checked against the injury report and depth chart.
- Situation. Home field is worth 2.62 points before travel; the visitor loses 0.66 per 1,000 miles travelled and 0.09 per time zone. Net of travel, the average home edge is close to 2 points, in line with recent seasons. Rest differences count up to 1.37 points for a full week. Totals drop 0.36 per mph of wind above 10 and 1.40 per 10°F below 40; domes add 2.17.
- Margin, total, probability. The weights on each input are fitted on past seasons only (2010–2025, recent seasons counting more). The margin becomes a win probability through a logistic curve fitted on those seasons' out-of-sample projections (slope 0.129 per point): a 3-point favourite wins about 60%, a 7-point favourite about 71% and a 14-point favourite about 86%.
- Updates. The whole pipeline reruns on a schedule after every game day, re-tests itself and publishes new ratings, projections and this page.
Limits
- Final NFL margins scatter about 12.9 points around even a good projection; an 80% range for any game is roughly ±17 points.
- Only quarterbacks are valued individually. Other injuries, coaching changes and late-week news move closing lines but not this model.
- In the backtest, past games use the recorded kickoff weather and the announced starting quarterback; upcoming games use a forecast and the expected starter.
Market data sources
Market lines are shown as neutral data for comparison. The scheduled lines job (never a page view) walks a fallback chain: The Odds API (US books plus Pinnacle, within its monthly credit budget), then ESPN's odds feed, then Action Network's public scoreboard, then the published nflverse line. When a game card still has no line, the site fills that gap from ESPN's scoreboard, Action Network, nflverse closing lines and finally the last stored copy; those scraped fallbacks run only on gaps, are rate-limited and cached, and every use is logged. Each card names its book and source. Kalshi and Polymarket win-probability markets are shown as a separate signal. The line a game had at kickoff is kept as its closing line and graded above.
| Source | Status | Games | Checked |
|---|---|---|---|
| The Odds API | idle (idle this run (called Tue / Sat / Sun mornings to save credits)) | 0 | Oct 3, 2026, 7:28 AM |
| ESPN odds feed | ok | 28 | Oct 3, 2026, 7:28 AM |
| Action Network | idle | 0 | Oct 3, 2026, 7:28 AM |
| nflverse schedules | ok | 30 | Oct 3, 2026, 7:28 AM |
| Kalshi | ok | 30 | Oct 3, 2026, 7:28 AM |
| Polymarket | ok | 30 | Oct 3, 2026, 7:28 AM |
Which source is serving each game card's line this season:
| Served by | Games | Newest read |
|---|---|---|
| ESPN odds feed | 46 | Oct 2, 9:35 PM EDT |
| nflverse closing lines | 33 | Sep 26, 10:34 AM EDT |
Fallback uses logged (lines, schedule, scores, stats, weather): 33 in total — schedule via ESPN CDN mirror 12× · lines via nflverse closing lines 9× · schedule via ESPN (browser agent) 9× · lines via nflverse schedules (lines job) 3×.
- Oct 3, 3:29 AM EDT · lines via nflverse schedules (lines job) (2 games) — no sportsbook source had a line
- Oct 3, 1:51 AM EDT · schedule via ESPN (browser agent) — HTTP 403 with plain agent
- Oct 3, 1:51 AM EDT · schedule via ESPN (browser agent) — HTTP 403 with plain agent
- Oct 3, 1:51 AM EDT · schedule via ESPN (browser agent) — HTTP 403 with plain agent
- Oct 3, 1:51 AM EDT · schedule via ESPN (browser agent) — HTTP 403 with plain agent
- Oct 3, 1:51 AM EDT · schedule via ESPN (browser agent) — HTTP 403 with plain agent
Market data for comparison only, not advice. 21+. Gambling problem? Call 1-800-GAMBLER.
Weather on game cards
Every card shows the kickoff forecast at the stadium, switching to current conditions (“Now”) from three hours before kickoff, “Indoors (dome)” for fixed roofs, and the recorded game-time weather once a game is final. Stadium coordinates and roof types come from our own checked venue table (all 30 NFL stadiums plus the international grounds). US forecasts and observations come from the National Weather Service; international venues use MET Norway. If those have nothing, the card falls back to ESPN's game weather, then nflverse's recorded kickoff weather for finals, then the last stored copy, and each fallback use is logged above. A scheduled job refreshes forecasts every two hours for the next seven days and every 15 minutes around kickoffs; pages only read the stored copy. The model's totals use the same kickoff forecast for wind, cold and roof.
| Served by | Games | Newest read |
|---|---|---|
| nflverse | 13 | — |
| NWS (last stored copy) | 10 | — |
| Indoors (venue table) | 5 | — |
| No data yet | 2 | — |
| NWS | 1 | Sep 27, 1:00 PM EDT |
| MET Norway (last stored copy) | 1 | — |
Last weather run Oct 1, 11:41 PM EDT: NWS ok (1) · MET Norway ok (1) · NWS current ok (1) · MET Norway current ok (1).
Data and credits
- Data: nflverse (nflverse.com), CC-BY 4.0
- Weather: National Weather Service (weather.gov, US public data); MET Norway (api.met.no), CC BY 4.0, for international venues
- nflverse data is licensed under CC BY 4.0; see github.com/nflverse/nflverse-data.
Projections are statistical estimates for entertainment and analysis only. They are not betting advice and nothing here guarantees any result.