03 β Predicting Totals (Over / Under)
TL;DR. A total is volume Γ efficiency: roughly
(drives per team Γ 2) Γ points per drive, blended across both offenses and defenses. Pace sets the volume, efficiency (EPA/play, points per drive) sets the scoring rate, and wind is the single biggest weather lever (~2.7 fewer points at 20+ mph). Totals and spreads are jointly determined through game script β blowout scripts truncate possessions and suppress totals.
1. The structure of a total
Total β (drives_per_team Γ 2) Γ points_per_drive(blended off & def)
- Drives / possessions = the volume multiplier. NFL teams average ~11β12 drives each (~22β24 combined). Pace controls how many scoring chances exist.
- Points per drive = the efficiency term. The biggest predictor of points on a single drive is starting field position β nearly linear, ~0.03 expected points per yard, average start ~65β75 yards out.
Pace is measured as seconds per play (situation-neutral β stripped of hurry-up and clock-kill) and plays per game. Faster pace β more plays β more drives β more scoring opportunities. Crucially, pace multiplies efficiency: a fast and efficient offense inflates totals far more than a fast but inefficient one. Situation-neutral pace is more stable/predictive than raw pace (raw pace is contaminated by game script β see Β§4).
Sources: the33rdteam β special teams / field position value, StampedeBlue β points per drive.
2. Efficiency metrics that drive scoring (ranked for totals)
- Points per drive (PPD) β most direct scoring-rate measure; better than points per game because it normalizes for pace/possessions.
- EPA per play (off & def) β strongest play-level efficiency metric; passing EPA dominates rushing EPA.
- Success rate β the stability anchor (binary per play β less noisy than EPA, stabilizes faster; great early-season signal).
- Yards per play β common but weaker; raw YPP has little relationship to wins once you account for finishing drives. Use as a component, not a headline.
- Red-zone efficiency β matters for converting yards to points but regresses hard (78% of top RZ-TD teams decline next year, avg β11.5%).
- Pass rate / PROE β passing is structurally more efficient per play, so pass-heavy offenses trend to higher EPA and higher totals.
3. Weather β wind is king
Wind degrades the highest-EPA plays (passing, kicking) and matters more than rain/snow/cold. (Cash-rate figures are from handicapping outlets β directional, not rigorous, and the market prices known forecasts into the close.)
| Condition | Effect |
|---|---|
| ~7 mph avg | negligible |
| >10 mph | Under cashes ~55.9% |
| 15 mph | ~3% drop in FG success; the "log it" threshold |
| 20+ mph | completion % β~10%, INT rate +~8%, deep attempts plummet; ~2.7 fewer points/game; ~20 fewer passing yds/team; Under ~54% since 2015 |
Precipitation & temperature:
- Light rain/snow β β2 pts; moderate rain β β4; moderate snow/heavy rain β β6; heavy snow β β10 pts (~25% scoring drop).
- Rain: QB completion % β~12%; FG accuracy at 40 yds 82% (vs 86%), at 50 yds 65% (vs 71%); snow FG ~76% (vs ~83%).
- Temp >85Β°F or <25Β°F β β8% scoring; 25β50Β°F β β5%.
Dome vs. outdoor: indoor games go Over 52.4% vs. 47.8% for outdoor
cold-weather games. Domed/neutral games carry no weather discount β which is
exactly why the engine maintains DOMED_TEAMS to zero out weather.
Our engine: a
weather_capof 0.12 means weather can move the total by at most Β±12%, applied only when the home team is not domed. The cap is reasonable, but the driver matters: make sure the weather model weights wind most heavily and treats 15/20 mph as threshold step-changes, not a smooth linear effect. Heavy snow (~β10 pts on a ~45-pt total β β22%) can exceed the 12% cap β consider raising the cap for extreme wind/snow specifically.
Sources: Sharp Football β weather impact, ParlaySavant β weather, theScore β dome vs outdoor / Unders.
4. Game script: totals and spreads are not independent
Score state drives play-calling, which feeds back into pace and the total:
- Trailing teams pass more and faster; leading teams run and kill clock, and the effect intensifies each quarter (late, trailing teams pass ~90% on early downs; leaders run ~75% when up two scores).
- The spread is the best single predictor of game script (7+ favorites win ~79%). Large spreads create tension: the favorite builds a lead and kills clock (suppressing plays), while the dog passes fast (adding plays). Net effect: blowout scripts usually truncate the trailing team's possession count, so large-spread games often stay Under expectation despite garbage-time passing.
Model spread and total jointly, not separately. A total module should take the projected spread as an input (expected game script), not treat the two as independent. Our engine currently derives both from the same additive score but never lets the projected margin reshape the total via script. Worth adding.
Update: the scheme-adjustment step already does a rush/pass matchup off defensive EPA ranks + offensive pass rate, and emits shootout / grind / blowout bullets from the projected total β a good start on scoring-environment reads. Two next steps: (a) consume EPA values (in the profiles) not just ranks, and (b) actually feed the projected spread back into the total so blowout scripts trim possessions (the feedback above), rather than only narrating it after the fact.
Sources: FantasyPoints β game script.
5. Scoring environment shifts over time
The league is structurally higher-scoring than decades past, by design:
- 1977 trough: 17.2 points/team/game β prompted reform.
- 1978: "Mel Blount Rule" (no contact >5 yds) + extended-arm pass blocking β opened passing.
- 2004 & 2013: renewed illegal-contact / defensive-holding crackdowns β more offense.
- 2013: highest-scoring season ever (narrowly over 2012); 2018 nearly matched it.
Recent windows swing: through Week 6 of 2023, 61.3% of games went Under β the highest such start since 1991 β but this is a sample-window artifact, not a persistent edge; the market corrects.
Implication: scoring priors must be era/season-current. A baseline trained on stale seasons will misprice totals. Re-anchor the league-average points-per-drive / per-game prior each season (Doc 4 Β§recency, Doc 5 priors).
Sources: FootballPerspective β scoring distribution, PFR season scoring.
6. Putting a total together (worked sketch)
- Estimate each team's expected points = f(its offense efficiency, opponent defense efficiency), scaled to the expected number of drives (pace of both teams).
- Apply field-position / special-teams adjustments (small).
- Apply weather (wind first; thresholds at 15/20 mph; heavy snow large).
- Apply game-script reshaping from the projected spread (blowout β trim).
- Compare projected total
TΜto market totalL; the over probability isΞ¦((TΜ β L) / 10)(Ο_total β 10, Doc 5).
7. Implications for our engine
- Move from "scored + allowed average" to drives Γ points-per-drive. The
current total =
home_score + away_score, where each score is a blended-average baseline. A volumeΓefficiency total is more principled and reacts correctly to pace. - Weight wind heaviest in the weather model, with step-changes at 15 and 20 mph; allow heavy snow / extreme wind to exceed the 12% cap.
- Feed the projected spread into the total to model game script (blowout suppression / trailing-team pace).
- Re-anchor scoring priors per season so totals track the current offensive environment.
- Add the over/under probability
Ξ¦((TΜ β L)/10)and surface it on tickets, instead of only a point estimate.
β Continue to Doc 4 β Variable Catalog.