Model methodology
A deterministic, documented model
The production model (gs-baseline-v1) is deliberately simple and fully documented. The same inputs always produce the same outputs. There is no black box and no fabricated machine-learning sophistication.
The factors
- Elo-style team rating — all teams start at 1500; completed games update ratings with margin-of-victory damping. Blended with recent form (last four weeks).
- Efficiency differentials — offensive and defensive EPA per play, success rate, explosive-play rate, pressure rate, sack rate.
- Turnover regression — raw turnover margin is regressed 65% toward zero before it earns points, because turnover luck does not persist.
- Quarterbacks — rating gap plus explicit availability penalties (questionable / doubtful / out).
- Injuries — position-weighted estimated impact in points.
- Rest, bye, short week — capped rest-day advantage, bye bonus, Thursday penalty.
- Travel — distance and time zones crossed penalize the traveling team.
- Weather — wind, cold, and precipitation reduce the projected total (not the margin) at outdoor venues.
- Home field — a fixed, conservative adjustment.
Every weight lives in a versioned configuration file. Changing a weight requires a new model version — historical projections keep the version that produced them.
From margin to probability
The summed factor margin passes through a logistic function to become a win probability, clamped to [2%, 98%] because certainty does not exist in football.
Data quality and uncertainty
Each projection carries a data-quality score (statistics freshness, injury freshness, QB certainty, weather freshness, sample size, missing fields). Insufficient data is disclosed, never hidden.
Backtesting honestly
Backtests are strictly chronological: ratings are rebuilt game by game using only information available before each kickoff. We test for lookahead bias in CI. See the accuracy page for limitations: small samples, overfitting risk, and why past performance never guarantees future results.