An NFL model is not a spreadsheet that agrees with your favorite side. It is a forecast made from information that existed before the game, tested on games it did not train on, and expressed with enough humility to be wrong in public. Everything else is branding.
That standard applies to a spread model, a totals model, and an NFL player prop model. The targets differ. The discipline does not. Define the prediction, freeze the information set, keep time moving forward, compare with a serious baseline, and grade the probabilities instead of admiring the picks.
Write the forecast contract before the code
Start by naming exactly what the model predicts. A margin model predicts the score difference from a declared team perspective. A totals model predicts combined scoring or a probability around a posted total. A prop model predicts a player's stat distribution, not merely whether the over sounds appealing.
Then define the moment of prediction. A model run before the final injury report cannot use confirmed inactives. A model evaluated against an opening line must not quietly include closing information. Every row needs an as-of time, and every feature needs to be reproducible from data available by that time. This contract is less glamorous than feature engineering and more valuable.
Use the market as a baseline, not a label leak
The posted spread and total summarize a large amount of public and private information. Ignoring them creates a needlessly weak benchmark. Copying the close into a prediction made earlier creates leakage. The right treatment depends on the question.
If the model is designed to find disagreement with an available line, use the price that was actually available at the prediction timestamp. If the goal is to forecast games independent of the market, keep the market out of the feature set and compare against it afterward. In either case, preserve the timestamped price used for evaluation.
Build the smallest credible spread model
A spread model needs team strength, quarterback availability, opponent adjustment, rest and travel context, and a way to keep recent games from overwhelming the longer view. Efficiency measures can help, but only when they are computed from prior games and adjusted for who those games were against.
Begin with a transparent baseline. Regularized linear models are hard to embarrass and easy to inspect. More flexible methods earn their place only if they improve later-season tests without damaging calibration. A model that becomes complicated while matching the baseline has bought maintenance, not edge.
Totals require possession and environment logic
Scoring depends on how many possessions a game creates and how efficient those possessions are likely to be. Pace, neutral situation play selection, quarterback quality, offensive line health, defensive pressure, weather, venue, and late-game behavior all belong in the discussion. They do not all deserve equal weight.
Weather should be joined by location and forecast time, not by stadium folklore. Pace should be measured in comparable game states rather than polluted by endgame clock killing. Divisional familiarity may be a useful hypothesis, but it has to survive a forward test before it becomes a feature with authority.
Props begin with opportunity
Player props are distributions built from playing time and role. For receivers, routes and targets establish opportunity before catch rate and yards after the catch shape the result. For running backs, snaps, carries, routes, and goal-line work matter more than last week's box score. For quarterbacks, dropbacks and game environment frame the volume before efficiency enters.
When the lineup changes
Injury news changes the entire allocation, not just one player's mean. When a teammate leaves the lineup, recompute the offense rather than adding a vague bump. If the replacement role is unclear, widen uncertainty or decline the projection. A precise number built on an invented depth chart is not precision.
Keep time moving in one direction
Random train-test splits are a trap for sports data. They let future seasons teach the model about past seasons and blur rule changes, coaching shifts, and market adaptation. Train on earlier windows, tune on the next window, and reserve a later period for the final test.
Rolling features must be shifted so the current game never enters its own inputs. Injury status, depth charts, weather, and prices need the same care. Leakage usually arrives through a convenient join, not a dramatic coding error. Audit the timestamp of every table before trusting the result.
Calibration is the honesty test
A model that says a side is more likely should be right more often in those higher-confidence buckets. Group predictions by stated probability and compare the claim with the observed ATS win rate. Each published bucket should include wins, losses, percentage, window, and sample. Thin buckets should be labeled thin, not celebrated.
Accuracy alone is not enough. A model can rank games well while overstating certainty. That overconfidence becomes expensive the moment probabilities influence stake size. Repair calibration before adding complexity.
Evaluate the process, not the anecdote
- Compare against a market or simple statistical baseline.
- Use forward-only validation and a final untouched window.
- Report error, calibration, and ATS win rate with the full window and sample.
- Separate model quality from the price available at the time.
- Monitor missing features and distribution drift after deployment.
- Stop publishing a number when the required pregame data is unavailable.
The analyst's advantage is not secret math. It is refusing to let the story outrun the evidence. A modest model with clean timestamps and honest probabilities can be improved. A flashy model built on leakage can only be exposed.

