Measure the model.
Understand the limits.
Player models v3.0.0 · Winner v1.0.0. Weekly walk-forward testing covers all 18 regular-season weeks in 2024 and 2025. Training and calibration use only earlier weeks. 2024 was development; the results below use the final 2025 retrospective test.
Game winners and underdogs
The v4 yardage, volume, scoring, and correlation results are in the expanded market report →
271 decided games · winner accuracy 65.7%, compared with 65.7% for the moneyline favorite. One tied game is excluded from these binary scores; live forecasts reserve a separate tie probability.
| 2025 measure | Model | Market baseline |
|---|---|---|
| Probability error (Brier, lower is better) | 0.2121 | 0.2121 |
| Log loss (lower is better) | 0.6094 | 0.6094 |
| Underdog ranking (AUC, higher is better) | 0.644 | 0.644 |
| Underdogs estimated at least 40% to win | 35/82 won (42.7%) | 42.7% of 82 |
| Underdogs picked as outright favorites | 0 picks | 0 by definition |
All market underdogs combined won 93/270 games (34.4%). The watch group contains closer matchups; its higher win rate alone does not establish value or profitability. A watch is a competitive underdog, not a predicted winner. Model and market estimates blend using a weight chosen on earlier calibration weeks; some weeks correctly fall back to the market.
Touchdown probabilities
6,964 player-games. Brier error evaluates probability quality, not betting returns. The anytime baseline is the historical position scoring rate; the first-TD baseline distributes historical position first-score rates within each game.
| Market | Model Brier | Baseline Brier | Lower error |
|---|---|---|---|
| Anytime TD | 0.1177 | 0.1326 | 11.3% |
| First TD | 0.0342 | 0.0351 | 2.7% |
The first-TD top player scored first in 11.8% of 272 games, versus 5.9% for the baseline. First-scorer prediction remains difficult; a low per-player Brier score alone is not proof of strong first-pick accuracy.
Receiving, rushing, and passing yards
Mean absolute error (MAE) is measured in yards. The baseline is the player’s previous three-game average. We report regular-usage players separately so backups and zero-yard games cannot hide the harder cases.
| Market | All players MAE / baseline | Regular usage MAE / baseline | 80% range coverage |
|---|---|---|---|
| receiving | 12.9 / 14.7 | 22.4 / 25.5 (2282 rows) | 79.3% |
| rushing | 7.2 / 8.3 | 23.3 / 26.7 (1013 rows) | 78.4% |
| passing | 65.9 / 71.9 | 66.9 / 74.4 (555 rows) | 82.1% |
Regular usage means a prior three-game average of at least 3 targets, 5 carries, or 15 pass attempts respectively. The ranges target 80% coverage across players; actual coverage is shown above.
2024 development results
272 games: winner accuracy 71.7% versus market 71.3%. Anytime-TD Brier 0.1163 versus baseline 0.1328; first-TD Brier 0.0345 versus baseline 0.0354. All three yardage models also beat their recent-average baselines.
Injuries, timing, and what remains unproven
- 2024 was used for development; 2025 is the final retrospective test. No test outcomes select calibration weights.
- Historical schedules contain closing lines; night-before betting profitability is not established.
- Archived 2025 injury reports lack update timestamps. Injury-aware results cannot establish exact night-before performance.
- Player tests condition on recorded participation; they do not measure the accuracy of projected starting lineups.
- Revised historical stats are used; these are retrospective tests, not a capture-time replay.
- 80% yard ranges target marginal coverage, not an 80% guarantee for an individual player.
- No historical player-prop prices: no claim of betting ROI. Underdog watches are probabilities, not guarantees.
Live reports are captured from ESPN, combined with weekly active rosters, and stored with each forecast. Confirmed absences are removed from player projections. Missing teammate usage informs player models; prior snap-weighted injury burdens inform the winner model. Questionable and doubtful players remain conditional forecasts, not confirmed participants.
During the regular season, the scheduler checks for tomorrow’s games each evening at 9:17 PM Eastern daylight time / 8:17 PM standard time, and refreshes again about 25–90 minutes before kickoff. Scheduled jobs and source updates can be delayed. A failed or stale injury refresh blocks publication and leaves the last successful forecast visible with its actual timestamp.
Every successful run stores paired game/player predictions and its injury snapshot in Supabase. Those captures make future evaluation of actual night-before forecasts possible. Source availability · Current injury reports