Skip to content
Back to guides
NFL 16 min read

Modeling NFL Like an Analyst: Spread, Total, and Player Props from Scratch

Read the price, role, and market first

Build NFL player-prop, spread, and total models from scratch: what stats to feed them, how to keep confidence honest, removing the vig, and sizing bets — all in your browser.
17 sections
Modeling NFL Like an Analyst: Spread, Total, and Player Props from Scratch cover art

The phrase "NFL model" gets thrown around loosely. To a tout it means "today's pick." To a system bettor it means "any team off a loss covers." To an analyst it means a real projection with honest win-odds attached, tested against the closing line on old games it never saw while training, and bet in disciplined unit sizes. This guide walks the analyst path end to end — spread, total, and an nfl player prop model — using only public data and a browser. You can run every step in the Shark Snip Workshop while reading.

What a model actually is (and what it isn't)

A model is a function that maps inputs to a probability or expected value. It is not a pick, a system, or a vibe. The distinction matters because each of those three competing things gets called a "model" in betting Twitter, and they fail in different ways.

  • A pick is a single output without a probability. "Take the Eagles -3" tells you nothing about confidence, sample, or edge. Picks are unfalsifiable in any rigorous sense.
  • A system is a hard rule applied to every game that fits the criteria. "Home dogs after a road loss" is a system. Systems are testable but rigid — they ignore context that a continuous model captures naturally.
  • A model outputs a number — predicted margin, predicted total, predicted prop, or a win probability. You can grade it on how often it actually wins and how much it returns. It updates when new data arrives. It is wrong in measurable ways and improvable through measurable changes.

If you compare your output to the line and decide whether to bet, you have something model-like. If you also put a real number on the odds, check that the odds hold up, and size your bets to your bankroll, you have a model. That is the bar the rest of this article assumes. For market mechanics that the model has to beat, the spread mechanics primer covers the half-point key numbers, and the sharp vs public guide covers how lines move.

Building a baseline NFL spread model

Spread models predict either game margin or cover probability against the posted line. The cleanest target is margin — home final score minus away final score — because everything downstream (cover probability, expected value, Kelly stake) is a deterministic function of that one number plus a noise estimate.

Step 1: Set up the target and the split

Pull NFL play-by-play from the public nflverse data (2018-2024 gives you about 1,800 regular-season games, enough to train without overfitting). Aggregate to one row per game with home and away final scores, the closing spread, and the closing total. Set margin = home_score - away_score as your target.

Train on old seasons, then test on newer ones the model never saw — never shuffle games at random. A typical split is 2018-2022 to train, 2023 to tune, 2024 to test. Random shuffling lets the model peek at the future, because the league shifts each season — pass rates, kicker accuracy, rule tweaks — and a shuffle hands the model outcomes it would never have known at the moment you'd actually place the bet.

Step 2: Compute opponent-adjusted Elo and EPA

Three stats carry most of the predictive weight beyond the closing line itself:

  1. Net yards per play differential. Offensive yards per play minus defensive yards per play allowed, last eight games, opponent-adjusted. Yards is noisier than EPA but more transparent and almost as predictive.
  2. Net EPA per play. Expected Points Added on offense minus EPA allowed on defense. Pull from nflverse pre-computed for free. Trailing eight games, opponent-adjusted, dropping garbage time (win probability inside 5-95%).
  3. Opponent-adjusted Elo. Start each team at 1500, add a home-field bump of about 2 to 2.5 points (~50-65 Elo via the ratio below), update after each game with K = 20. Convert the Elo gap to a point-spread expectation with the standard 25-point ratio (a 25 Elo gap implies a 1-point spread).

These three plus the closing spread, starting QB availability, rest differential, and travel distance form a seven-stat baseline that closes most of the gap to a sharp number. The closing line itself is the dominant input — it already bakes in everyone else's work. Your job is to find the small extra edge that comes from the other six. Open the Shark Snip builder to wire these stats into a model with a few clicks.

Step 3: Train and evaluate

Train any of: a ridge regression, a gradient-boosted tree, or a small neural net. For 1,800 games and seven stats, ridge wins on simplicity and rarely loses on accuracy versus a properly regularized GBM. Evaluate on RMSE and on against-the-spread cover rate. Healthy numbers for an NFL margin model on a recent test season:

  • Validation RMSE: 12.5 to 14 points
  • ATS cover rate: 51% to 54% on a 200-game test season
  • Mean absolute error vs closing line: under 4 points

If your test cover rate is above 56% on a small sample, get suspicious before you celebrate — odds are the model accidentally saw the answer. The most common slip is rolling stats that include the current game in the average — use only the prior eight games, shifted back by one. The injury impact study covers another classic trap: knowing who's inactive before the line you're betting was posted.

Building a totals model

Totals models look easier because both teams contribute, but they are sneakier. Pace, neutral pass rate, and weather drive totals more than raw scoring efficiency, and the closing total is a softer number than the closing spread — fewer sharp dollars sharpen it. That makes the totals market both more beatable and more punishing when you are wrong.

Pace and neutral pass rate

Pace is plays per minute when the game is competitive — exclude two-minute drills and garbage time. Neutral pass rate is the share of plays that are passes when win probability sits between 25% and 75%. These two stats capture how much volume each offense will generate, separate from how efficient that volume is. The same offense at 70 plays per game produces dramatically more variance in totals than at 60.

Weather and venue

Weather is binary-ish: dome games are weatherproof, outdoor games face wind first, then rain, then temperature. Wind above 15 mph drops expected total points by roughly 3-5 depending on the matchup. Rain shifts run-pass mix and lowers efficiency. Cold under 25°F has a smaller measurable effect than the popular narrative suggests. Pull current conditions from a free weather API at bet time, not the historical average for the venue.

Divisional dampening

Divisional rematches in November and December tend to score under their projection by 1-3 points. The simple explanation is film: both coordinators have studied each other twice, surprise plays disappear, and execution gets cleaner on defense than on offense. Code this as a flag: is_divisional AND week >= 10, then let the model decide the magnitude. The totals deep dive walks through the historical splits in detail.

Building a player prop model

Props are where the modeling work pays off most. The book posts hundreds of lines per week, the soft ones get shaded but rarely killed, and an honest projection beats a feel pick by a wider margin than on game lines. The trick is building up from the inputs that drive the stat rather than guessing at the final number.

Start with usage

Stat projections are usage times efficiency. Both halves matter, but usage is more stable week to week and is what you should anchor your model on. The four core usage stats for skill-position props:

  • Snap percentage — share of offensive snaps the player is on the field. The ceiling on every counting stat.
  • Route share — share of pass plays where the player ran a route. For receivers and tight ends.
  • Target share — share of team targets the player drew. Combine with team pass volume for a target projection.
  • Carry share — for running backs, share of team rush attempts. Combine with red-zone carry share for TD modeling.

The target share vs air yards study walks through which of these stabilizes fastest after a role change — usage stats can shift by 15+ percentage points in the first three games after an injury or trade, so freshness matters.

Layer aDOT and route mix on top

Average Depth of Target (aDOT) and route mix turn target volume into yardage. A 7-target receiver running deep posts (aDOT 18) projects to ~120 yards; a 7-target slot receiver running drags (aDOT 5) projects to ~50. The nflverse weekly receiver charts publish per-game aDOT and route distribution for free.

Build the projection

For receiving yards, the simple model is: projected_yards = team_pass_attempts * target_share * catch_rate * yards_per_reception. Train each multiplier separately on rolling samples — team pass attempts is a function of opponent pace and game script, target share is a player rate, catch rate and yards-per-reception are matchup-adjusted player rates. Then combine and add a residual normal distribution for variance. This separates which part of the model is wrong when the projection misses, instead of leaving you with a single opaque output.

From margin to cover probability — the math that matters

A margin prediction is not a bet recommendation until it becomes a probability. The standard move:

  1. Predict margin as a number, e.g., predicted_margin = +5.2 means home wins by 5.2 on average.
  2. Compute the residual: edge = predicted_margin - closing_spread. If the closing spread is +3 (home favored by 3) and you predict +5.2, your edge is 2.2 points.
  3. Treat that edge as the mean of a normal distribution with standard deviation matching the empirical residual RMSE — about 13.5 points for NFL game margins on a well-built model.
  4. Cover probability = 1 - normalCdf(0, mean=edge, sd=13.5). For an edge of 2.2 points: cover probability is 56.5%.

That feels small. The reason it feels small is that the public sees a 5.2 prediction against a 3 line and assumes a huge edge. The actual edge is 56.5% — meaningful, but not enough for a max bet. The standard deviation of NFL game margins is wide because football is high-variance. A two-point projection edge becomes roughly a 4-6 percentage point cover edge, not the 10+ that an unrigorous gut would assume.

When the model says 60%, does it hit 60%?

The most important test of a model is whether its confidence is honest. A bet the model rates 60% should win about 60% of the time over a big sample. Two ways to check it:

  • A single accuracy number. Score every pick on how close its stated odds were to what actually happened, then average it. Lower is better. A blind coin flip scores 0.25; anything under 0.245 on NFL spreads means you're beating chance for real.
  • The confidence-vs-results chart. Group your picks by how confident the model was (50-52%, 52-55%, 55-58%, 58-62%, 62%+) and look at the actual cover rate in each group. An honest model wins at the rate it claimed in every group.

The chart above shows what a healthy spread model produces — stated odds and real cover rate within a percentage point at every confidence level, with enough bets behind each point to trust it. When the gap runs three-plus points the same direction across the board, the model is biased; when it blows out at one confidence level only, that group of inputs is broken. Either way, fix the confidence before adding new stats.

From model to bet: vig removal, Kelly, and line shopping

An honest win probability is still not a bet. Three more steps separate a number from a sized wager.

Vig removal

Books post both sides with built-in margin. A standard NFL spread is -110/-110, which converts to implied probabilities of 52.38% and 52.38% — sum 104.76%, with the 4.76% being the hold. To get the no-vig probability, divide each implied probability by the sum: 52.38 / 104.76 = 50% on each side. The fair line is 50/50. Your edge is your model's probability minus the no-vig probability — not minus the raw implied probability, which would overstate your edge by the hold percentage.

Player props carry more vig — 4-8% on standard yardage and reception props, and over 10% on alternate lines. The sharp vs public guide walks through why prop hold is higher and how it varies by book.

Kelly fraction

The full Kelly formula for a -110 bet with probability p: stake_fraction = (p * 110 - (1 - p) * 100) / 110. For a 54% true probability, full Kelly is about 3.6% of bankroll. Almost no one bets full Kelly — variance is brutal, and any error in the probability estimate compounds. Quarter Kelly (0.9% of bankroll for a 54% bet) gives most of the long-run growth with much less drawdown.

The discipline trap: a model that claims 60% on every bet but really hits 53% will recommend stakes that bankrupt you. Honest confidence matters more than raw cover rate when you're deciding how much to bet — see the FAQ entry on confidence above.

Line shopping

The same NFL spread varies across legal books by a half to a full point. On key numbers (3, 7, 10) a half-point of line value is worth 1.5-2% on win rate. Three or four legal books in your state captures most available shopping value. ESPN's scoreboard shows consensus lines for free; the actual best price requires checking the books themselves at peak market hours (Wednesday afternoon and Saturday morning are typical inflection points).

Testing on past seasons honestly

The most common way to fool yourself is making the model look great on history it secretly trained on. Three rules to keep yourself honest:

  1. Always go forward in time. Train on weeks 1-8, predict weeks 9-16, slide one week, repeat. Shuffling games at random lets the model see the future.
  2. Keep one season locked away until the very end. Pick the 2025 season, run it once. The moment you start tweaking the model to win on it, it stops being an honest test.
  3. Charge yourself the real juice. -110 on standard sides, -115 to -120 on alt lines, 5-8% on props. A test that ignores the vig is a fantasy.

The sharp vs public piece is worth re-reading after your first season of testing — sharp money tends to hit the market mid-week, and a model that beat the opening line has a thinner edge than its cover rate against the closing line suggests.

Building all of this in your browser

Every step above runs in the Shark Snip Workshop. The builder lets you drag the seven baseline spread stats into a model, train it right in your browser (no server, no GPU bill), test it against past seasons, see whether its confidence holds up on the results chart, and publish it to the live picks pages. Specific entry points:

  • Open the Workshop for the guided builder with ready-made starting points for NFL spread, NFL total, and NFL player props.
  • Open /build for the hands-on editor where you can add your own stats.
  • Compare your model to other published models on the leaderboards — same data, same fair test, real live cover rates out in the open.
  • Once you trust your model, list it on the marketplace so other users can follow its picks.
  • For the live feed of NFL picks generated by published models, check /gridiron for the current week's slate with each model's edge shown.

What good looks like after one season

A first NFL spread model trained on the seven baseline stats should land near these numbers after a full season of live betting:

  • Live ATS cover rate: 51-53% over 200+ bets
  • An accuracy score under 0.245 on the same sample — proof you're beating chance
  • Stated confidence within three percentage points of real results at every confidence level
  • ROI per bet between -1% and +3% at standard juice

Those numbers feel modest because they are. Sustained 53% ATS at -110 is roughly a 1.2% edge per bet, which compounds to meaningful returns over thousands of bets but never produces the 60%+ headline results that tout services advertise. The honest number is the durable one. If your live cover rate trails what the past-season test promised by three or more percentage points after 100 bets, retrain on the most recent season — the market or the league has shifted under you.

Where to go next

Once a baseline NFL spread model is live, the most valuable extensions are:

  1. A totals model with the pace, neutral pass rate, weather, and divisional stats described above. Cross-check it against your spread model — if both like the home team to score 30, your projection is consistent.
  2. A player prop model anchored on snap, route, target, and carry share. Player props are higher variance per bet but lower correlation across bets, so they diversify a portfolio that already has spread and total exposure.
  3. Fractional Kelly sizing applied to all three model outputs, with a portfolio-level cap so no single game exceeds a chosen percentage of bankroll.

The target share study is the right next read for prop modeling depth. The injury impact study is essential for handling late-week status changes that move markets and your model. The spread mechanics primer and the totals deep dive are companion pieces in this NFL markets cluster.

A note on responsibility

Modeling does not eliminate variance. A 53% true edge can produce a 100-bet drawdown of 15+ units. Bankroll sizing matters more than which stats you picked. Set a hard maximum stake, never chase, and treat any month where you exceed your limits as a loss regardless of P&L. The model is a tool; the bettor is the risk manager. Bet only what you can afford to lose, and use legal regulated books in your state.

Props and DFS example board

For props, DFS, and PrizePicks-style decisions, the names should reveal the input. Jokic assists, Shai points, Wembanyama blocks, Josh Allen rushing, Ja'Marr Chase receptions, and Christian McCaffrey touchdown equity all require different checks. Treat each player as a role-and-price puzzle rather than a logo on a pick card.

  • Fixed-line check: compare the app line to sportsbook consensus before calling it an edge.
  • Correlation check: do not pair legs that require opposite game scripts.
  • DFS check: salary, ownership, and late-swap flexibility can matter as much as median projection.
  • Tracking check: grade closing value and result separately so a lucky hit does not hide a bad line.

Use PrizePicks basics, NFL player props, and correlation math as the internal loop from projection to price to risk control.

Prop, DFS, and contest examples

Use names as evidence, not decoration. The useful SEO win is that Josh Allen, Ja'Marr Chase, Bijan Robinson and Puka Nacua and Eagles, Chiefs, Bills and Lions appear inside decisions, thresholds, and internal links instead of being dumped into a keyword list.

  • Prop EV example: if Amon-Ra St. Brown receptions are 6.5 at -120, a model median of 7.1 with a 56% over probability creates a fair threshold near -127; pass if the market jumps to 7.5 without a projection change.
  • DFS value example: projection divided by salary times 1,000 keeps the slate honest. A 20.4-point projection at $7,200 is 2.83x median value; tournaments need ceiling, leverage, and correlation on top of that.
  • Stack example: Patrick Mahomes with Travis Kelce and Xavier Worthy needs a bring-back plan from the opponent; Josh Allen with Keon Coleman and Dalton Kincaid needs rushing-TD cannibalization in the script notes.
  • PrizePicks example: Nikola Jokic rebounds, Devin Booker points, and Stephen Curry threes should not be treated as one generic “More” card; legs need hit rate, payout, and correlation checks.

The next step should be a tool, not another opinion: compare the line on NFL player props, pressure-test salary in DFS tools, and log the close with bet tracking.

Research note board

Use this board before clicking a prop, DFS build, or same-game entry. The table is intentionally about thresholds, not fake certainty.

StepInputExample applicationCancel rule
Project the roleSnaps, routes, targets, carries, minutes, or usageJosh Allen volume against the posted lineThe player loses the role that created the projection
Price the marketBreak-even odds, line shopping, hold, payout structurevig compared with sportsbook consensusJuice or line movement removes the edge
Check correlationGame script, teammate overlap, ownership, late newsJa'Marr Chase paired with Eagles script notesThe legs need different games to happen

Model calibration: predicted vs observed

Predicted win probability bucket vs the empirical win rate inside that bucket on the test set. Points on the y=x reference line are perfectly calibrated; points below mean the model is overconfident in that bucket.

Prop OVER hit rate vs line distance from median

Empirical hit rate of OVER bets as the prop line moves away from the player projection median, measured in standard deviations. A line set 1sd below the median hits ~84% of the time — but books price the juice to match.

Frequently asked questions

What is an NFL player prop model and why build one?
An NFL player prop model predicts a stat — passing yards, receptions, rush attempts — from the inputs that drive it, like target share, route share, snap percentage, and opponent strength. You build one because the prop market posts hundreds of lines per week, books shade the soft ones, and an honest projection plus a vig-free line gives you a real edge instead of a feel pick.
Do I need to know Python to build a spread or total model?
No. The Shark Snip Workshop runs entirely in the browser, so you pick what stats feed the model, train it, test it on past seasons, and publish it without writing code. Python helps if you want to scrape custom data — but for a baseline NFL margin model on free public stats, the in-browser builder gets you to a working model in under an hour, tested honestly against old games it never saw while training.
How many stats should a first NFL spread model use?
Five to seven. The closing spread carries roughly 60% of the predictive weight on its own. Net EPA per play, starting QB availability, rest differential, and travel distance add the marginal lift. Stacking 30 stats on a 1,800-game training set produces noise, not signal — every extra stat has to actually improve results on games the model never trained on before it earns a slot.
What is vig removal and why does it matter for prop models?
Books post both sides of a prop with built-in margin (the vig or hold) — typically 4-8% on NFL props versus ~4.5% on standard -110 spreads. To compare your projection against the implied probability, divide each side by the sum of both implied probabilities. A 53% projection against a 51% no-vig line is an edge; against the raw 50% with vig baked in it looks even bigger and would mislead your bet sizing.
How do I turn a margin prediction into a cover probability?
Treat the residual (your predicted margin minus the closing spread) as the mean of a normal distribution with standard deviation around 13.5 points — that is the empirical RMSE of NFL game margins on 2018-2024 data. The cover probability is one minus the cumulative normal at zero. A two-point edge through that math comes out near 55.9%, not the 60%+ a beginner often assumes.
How do I know if my model's confidence is honest?
Ask whether the stated odds match reality. When the model says 55%, do those bets actually cover 55% of the time? You check it by grouping your past picks by confidence level and seeing if each group hit at the rate it claimed. A model with a 53% cover rate but inflated confidence will still bleed money — staking real units on edges that aren't really there is the fastest way to go broke.
Should I bet every model edge or filter to the biggest ones?
Filter, but with a tested threshold. Sort your past bets by how big the edge was and check the cover rate at each level — a healthy model wins more as the edge grows (around 51% on tiny 0-1 point edges, 57%+ on 5+ point edges). Bet the levels where the bigger edge actually pays off. Firing on every thin edge just adds volume, pays more juice, and waters down the bankroll growth that disciplined bet sizing is meant to capture.
How is NFL totals modeling different from spread modeling?
Totals weight pace, neutral pass rate, and weather more heavily and care less about clutch-time efficiency. Wind above 15 mph drags expected points by roughly 3-5 depending on dome status; rain shifts the run-pass mix; divisional rematches in December dampen totals because both coordinators have film. Re-fit your totals model with these stats rather than reusing the spread inputs unchanged.
What is line shopping and how much edge does it add?
Line shopping means checking multiple sportsbooks for the same market and taking the most favorable price. On NFL spreads a half-point of line value is worth roughly 1.5-2% on win rate at the key numbers (3, 7, 10), and on player props the spread between books at peak market hours can hit a full unit. Three to four legal books in your state typically capture most of the available edge without operational overhead.
Where can I publish my NFL model and track its live performance?
Trained models in the Shark Snip Workshop publish straight to the picks pages and the leaderboards. Live cover rate, edge per bet, sample size, and rolling accuracy update after each game. If your live results trail what the past-season test promised by more than three percentage points across a 100-bet stretch, the market has likely caught up — retrain on the most recent season and check which stats stopped pulling their weight.

Build a free model in 60 seconds →

Go →
16m read time
29 players/teams
12 key angles
Angles in this read 6 angles
Target heat fantasy
Tier stack fantasy
Snap meter fantasy
Ownership leverage dfs
Correlation web correlation
Edge meter edge

NFL 2026 market context

NFL betting examples work best when quarterback, team, and market context stay attached: Chiefs/Bills/Ravens/Eagles/Lions angles should connect to price, schedule, injuries, and game environment.
Patrick MahomesJosh AllenLamar JacksonJoe BurrowJalen HurtsJustin HerbertC.J. StroudTua TagovailoaChiefsBillsRavensEaglesLionsBengalsclosing line valuetarget shareair yardsred-zone roleroute participation
Modeling NFL Like an Analyst: Spread, Total, and Player Props from Scratch data infographic
Chart view of the article's core numbers. Source: inline-nfl-modeling-calibration.

Start free — pick NFL

Go →

We use cookies for essential site functionality. With your consent, we also use cookies for analytics and performance monitoring. See our Privacy Policy.