THE spread
WK 03 · 2026 · 47 games in

Football Win Probability: How to Build an NFL Win Probability Model From Play-by-Play Data (Part 1)

Every win-probability chart on a broadcast reduces a football game to a single number between 0 and 1 — this is the first of four parts on how that number gets built from raw play-by-play data.

Updated 12 min read
Illustration: Football Win Probability: Building the NFL Model (Part 1)

A football win probability model takes the state of a game in progress — score, clock, field position, down, distance, timeouts, and usually the pregame point spread — and turns it into a single number between 0 and 1: the estimated chance the team with the ball wins. Building an NFL win probability model starts with the same play-by-play data every public model uses, a small set of features that carry almost all of the signal, and a first algorithm simple enough to inspect by hand — the same feature set behind the NFL win probability calculator. This is Part 1 of a four-part series.

What a Win Probability Number Actually Predicts

A win probability estimate answers a narrow question: given everything known about the game right now, what fraction of similar situations, historically, ended with this team winning? That is different from a pregame prediction, which only has team strength and a matchup to go on. It is also different from a power rating, which scores a team across a season rather than a single possession. A football win probability model is scoped to one game, re-evaluated after every play, and it is explicitly probabilistic — it does not claim to know who wins, only how often teams in that exact spot have gone on to win.

The distinction matters for how the number should be read. An 80% win probability is not a prediction that the favored team wins; it is a statement that in a large enough sample of comparable game states, roughly four out of five ended that way. The team behind still wins the other one time in five, and that outcome does not make the estimate wrong — a theme this series returns to in Part 3, when it asks what actually counts as a “good” model.

A pregame prediction and an in-game win probability answer two different questions, even though both get expressed as a percentage. A pregame prediction has nothing to work with except team strength, injuries, rest, travel and home-field advantage — everything knowable before kickoff, folded into one static number that does not move again until the next game. A win probability model keeps that pregame estimate only as a starting point, then discards it play by play as the actual state of the game — the score, the clock, who has the ball and where — becomes more informative than anything that was knowable in advance. By the fourth quarter of a decided game, the pregame number is close to irrelevant; the score and clock alone are doing almost all of the work.

A two-level decision tree on 346
A two-level decision tree on 346,689 NFL plays from 2016 to 2024: the share of plays whose offense went on to win, split by score and time left.

The Play-by-Play Data Behind the Model

Every public win probability model, and every one built from scratch, starts from play-by-play data: one row per play, with the down, distance, yard line, quarter, game clock, score, and timeouts remaining for both teams, plus the eventual outcome of the game. The nflverse-data project publishes a season-by-season play-by-play file for every NFL season back to 1999 (play_by_play_{season}.csv, also available as Parquet), released under a CC-BY-4.0 license, with the columns a win probability model needs — including pre-computed wp and home_wp columns from nflfastR’s own model — already present (nflverse-data releases). That makes it possible to both study an existing win probability model’s output and refit one from the underlying features.

A single NFL season runs to roughly 45,000–48,000 plays across around 285 games, which is enough rows to fit a model with dozens of parameters without running out of data — though, as Part 4 covers, how those rows get split into training and evaluation sets matters as much as how many there are.

College football supplies a comparable data source through a different pipeline: sportsdataverse-data, a keyless, MIT-licensed-code repository that has effectively succeeded the older cfbfastR-data releases, publishes season-by-season college schedules and results and, through a separate release tag, play-by-play sourced from ESPN’s public data. A win probability model built for the college game draws on the same categories of column — down, distance, yard line, score, clock — even though the underlying repository and file format differ from the NFL side.

Six Features That Carry Almost All the Signal

A surprisingly small feature set explains most of the variation in win probability across a game. The nflfastR win probability model — one of the most widely used public implementations — is built on this set: seconds remaining in the half, seconds remaining in the game, yard line, score differential, down, yards to go, timeouts remaining for each team, whether the team about to receive the second-half kickoff has already done so, whether the possession team is at home, and, in its spread-aware variant, the pregame point spread (Open Source Football, nflfastR EP/WP models). Building a football win probability model from scratch means engineering the same handful of signals.

Score differential

The gap between the two scores is the single strongest input to any win probability model, because it directly measures how many scoring possessions separate the teams. A 3-point game and a 21-point game imply completely different distributions of likely outcomes before anything else is considered. Most implementations use the signed differential from the perspective of the team with possession, so the same feature column serves every play in the game without needing a separate “home differential” and “away differential” pair.

Time remaining

Score differential means little without a clock attached to it. A 10-point lead is close to decisive with two minutes left and almost meaningless with three quarters to play, because time remaining bounds how many more possessions either team can realistically get. Models typically combine time and score into a single interaction term rather than feeding them in separately, so the model can learn that a given point gap matters more as the clock runs down. Some implementations track seconds remaining in the current half separately from seconds remaining in the full game, since a two-score deficit with two minutes left in the first half is recoverable in a way the same deficit with two minutes left in the game is not.

Field position

Yard line measures how many yards a team needs to score, and it interacts with both down and distance to describe field-goal range, scoring urgency, and how much a turnover would cost the team that commits it. A team at its own 5-yard line carries meaningfully more downside risk than the same team facing the same down and distance at midfield, because a turnover there hands the opponent a short field and a correspondingly higher chance of an immediate score.

Down and distance

Down and distance describe how likely the current drive is to continue. First-and-10 and third-and-15 imply very different odds of the current possession producing points, even holding score, clock and field position constant, so a complete football win probability model includes both as separate inputs rather than folding them into a single “possession quality” proxy. Their marginal effect on the final win probability number is often small relative to score and time — small enough that it is easy to underestimate how much they matter, a question this series returns to directly in a later piece on usability.

Timeouts remaining

Timeouts control a team’s ability to manage the clock, which matters most in the closing minutes of either half. A trailing team with three timeouts left has meaningfully more paths back into a game than a trailing team with none, because it can stop the clock and extend the number of possessions it realistically gets. A leading team’s timeout count matters too, in the opposite direction — it determines how effectively that team can run the clock out rather than being forced to give the ball back with time still on it.

The spread-adjusted pregame prior

Before the opening kickoff, none of the five features above exist yet — there is no score, no elapsed time, no field position to measure. A spread-adjusted pregame prior fills that gap by using the closing point spread, a public number that already reflects team strength, injuries, and home-field advantage, as the model’s starting estimate. Its influence is built to fade: nflfastR’s spread-aware model applies the term spread_time = posteam_spread * e^(-4*(3600-game_seconds_remaining)/3600), which weights the spread heavily in the first quarter and lets it decay smoothly as the in-game state becomes informative in its own right. Folding the spread in this way “substantially improved… cross-validation classification accuracy (reduced error rate from 27% to 23%) and log loss (reduced from .52 to .44)” over a model that ignores the pregame line entirely (Open Source Football, cited above).

Encoding a Single Play Into a Feature Vector

The six features above are abstract until they are attached to an actual play. Consider a hypothetical, purely illustrative example: a team trailing by 4 points, facing second-and-7 from its own 38-yard line, with 6 minutes 40 seconds left in the fourth quarter and two timeouts remaining, receiving the ball as a 3-point pregame underdog. Encoded as a feature row, that becomes: score differential −4, game seconds remaining 400, yard line 38 (distance to the opponent’s end zone measured on a 0–100 scale), down 2, yards to go 7, timeouts remaining 2, and a pregame spread term already decayed to a small fraction of its opening weight since three quarters of the game have been played. None of those six numbers means much in isolation — a −4 score differential could belong to a game in the first minute or the last, a wide-open contest or a near-certain outcome — which is exactly why a win probability model is fit on the full combination rather than on any single column.

The same encoding process repeats for every play in a game and every game in a season, which is why play-by-play data arrives as one row per play rather than one row per game: a model trained on game-level summaries would never see the sequence of intermediate states that make in-game win probability possible at all.

From Features to a Football Win Probability Model

With the six features assembled into a row per play, the next step is choosing an algorithm to map them to a probability. Logistic regression is the natural starting point for a football win probability model: it fits a linear combination of the features, passes the result through the logistic function, and outputs a number that is guaranteed to sit between 0 and 1 — exactly the shape a win probability needs. It is also easy to inspect, since each feature gets a single coefficient whose sign and size can be read directly.

A simplified, purely hypothetical example illustrates the mechanics. Suppose a fitted logistic model assigns a coefficient of roughly 0.05 per point of score differential on its own, plus a second term that grows as the game clock runs out: 0.5 times the score differential, times the fraction of the game clock already elapsed. A team leading by 7 points with only 300 seconds left in a 3,600-second game (55 minutes elapsed of 60, an elapsed fraction of about 0.92) combines to a raw score of about 0.05 × 7 + 0.5 × 7 × 0.92 ≈ 3.56, which the logistic function converts to roughly 97% (1 / (1 + e^-3.56) ≈ 0.97). The same 7-point lead with 1,800 seconds remaining (elapsed fraction 0.5, halfway through the game) produces a smaller raw score of about 0.05 × 7 + 0.5 × 7 × 0.5 ≈ 2.10, converting to roughly 89% — still favored, but far less lopsided. The arithmetic is invented for illustration, but the shape of the relationship (the same lead pushing the probability closer to the extremes as time runs out, rather than staying fixed) matches how real win probability models behave.

Logistic regression is not the only option — Part 2 of this series compares it against random forest and gradient-boosted tree models, which can capture nonlinear interactions between features (like the exact way field position modifies the value of a turnover) that a linear model has to be told about explicitly.

What a Win Probability Model Deliberately Leaves Out

The six-feature list is notable as much for what it excludes as for what it includes. A win probability model built on score, time, field position, down, distance, timeouts and a spread-adjusted prior does not need weather, individual player statistics for that game, or a team’s head-to-head history against this specific opponent as separate inputs — not because those factors are irrelevant to football, but because their relevant effects are already priced into the two inputs that matter most: the pregame spread (a single public number that already reflects everything known about matchup-specific factors before kickoff) and the in-game state itself (which reflects how the game has actually unfolded, regardless of why). Adding raw weather data or a specific player’s in-game stat line as a separate model input risks duplicating information the model already has, without adding much new signal — and it makes the model harder to validate across seasons, since not every historical play carries clean weather or granular player-tracking data attached to it.

This is part of why the six-feature set has proven durable across different public implementations built independently of each other: it captures what is measurable, consistently available across every play in every season, and not already redundant with something else in the feature set.

Turning the Model Into an NFL Win Probability Calculator

A fitted win probability model becomes useful the moment it can take a game state as input and return a number on demand — an NFL win probability calculator, in effect. The interface is the same whether the model is running live during a broadcast or being queried after the fact for a single hypothetical situation: score, clock, field position, down, distance, and timeouts go in, and a probability comes out. A working calculator built on these six features plus a spread-adjusted pregame prior is available at the win probability calculator, and it uses the same feature set described above.

Building an NFL win probability calculator from a fitted model mostly means packaging the same feature engineering used during training — score differential, time remaining, field position, down and distance, timeouts, and the spread-adjusted prior — into a form that takes a hypothetical or live game state and returns the model’s output instantly, without requiring a fresh model fit for every query.

A calculator built this way is useful for two distinct purposes: checking a live game state against the model in real time, the same computation a broadcast graphic runs automatically after every play, and exploring purely hypothetical situations that never happened — “what would win probability be for a team down 6 with 90 seconds left, no timeouts, ball at its own 20?” — to build intuition for how the six features combine before ever watching them play out on an actual broadcast.

Where the Series Goes From Here

This piece stopped at feature engineering and a first logistic model, both of which leave real choices on the table: which algorithm actually fits the data best, how to tell whether the resulting probabilities are trustworthy, and how to refine the feature set once the basics are in place. Part 2 compares logistic regression against random forest and gradient-boosted tree models on the same feature set, and explains why a widely used public model — nflfastR’s — ultimately settled on a tree-based approach. Part 3 asks what “a good win probability model” even means, introducing calibration, Brier score and log loss as the tools for answering it, with a real worked example of log loss deciding between two candidate models. Part 4 returns to feature engineering with more advanced techniques, including the exact decay formulas behind the spread-adjusted prior introduced here, and a closer look at how to evaluate the finished model honestly using whole-season validation rather than a naive random split of individual plays. The same six-feature approach carries over directly into how an expected-points model is built, which scores a single play rather than an entire game.

Frequently asked questions

What is a football win probability model?

A football win probability model is a statistical model that estimates the chance a team wins a game, updated after every play based on the current score, clock, field position, down and distance, timeouts, and (often) the pregame point spread. It is fit on historical play-by-play data and outputs a number between 0 and 1 for the team with possession or, symmetrically, for either team.

What data is a win probability model trained on?

Play-by-play data: one row per play, with columns for down, distance, yard line, score, quarter, clock, timeouts, and the outcome of the game. The nflverse-data project publishes a season-by-season play-by-play file (`play_by_play_{season}.csv`) under a CC-BY-4.0 license, with the columns needed to build a win probability model already included.

Which features matter most in an NFL win probability model?

Score differential and time remaining carry most of the signal, because together they bound how many scoring possessions remain. Field position, down and distance, and timeouts remaining refine the estimate within that range, and a spread-adjusted pregame prior narrows the range further before a single play is snapped.

Why include the point spread in a win probability model?

The pregame spread is a public number that already prices in matchup strength, injuries and home-field advantage. Folding it in as a decaying prior — one that matters most in the first quarter and fades as the game state itself becomes informative — measurably improves calibration and reduces log loss versus a model that ignores it.

Is a win probability model the same as a power rating?

No. A power rating (like an Elo or Massey rating) scores a team's strength across a season and is usually static between games. A win probability model scores a single game in progress and updates on every play; it can use a power rating or spread as one input, but its job is narrower and much more short-lived.

Does a win probability model predict who will win?

It estimates a probability, not a certain outcome. A team correctly modeled at 80% win probability still loses roughly one time in five when that estimate is accurate — the model is describing uncertainty, not eliminating it. Treating a single game's result as proof the model was right or wrong misreads what the number was ever claiming in the first place.

What is the simplest algorithm for a win probability model?

Logistic regression is the standard starting point: it maps a linear combination of the game-state features to a probability between 0 and 1 using the logistic function, and it is fast to fit, easy to inspect, and a fair baseline before trying tree-based methods like random forests or gradient boosting.

How often does a win probability model update during a game?

After every play. Each new play changes at least one input — usually the clock and often the down, distance, field position or score — so the model re-evaluates the feature vector and produces a fresh probability play by play, which is what a live win-probability chart is plotting.

Can a win probability model be wrong and still be good?

Yes — a single missed favorite (the team it rated ahead ended up losing) is not evidence of a bad model, because the model deals in probabilities, not certainties. The right test is calibration across many games: whether the set of plays it called 70% actually resulted in a win about 70% of the time. Part 3 of this series covers that test in detail.

What is an NFL win probability calculator?

A live tool that takes the current game state — score, clock, field position, down, distance, timeouts and, optionally, the pregame spread — and returns the fitted model's probability estimate on demand, the same computation a broadcast graphic runs automatically after every play.

Do college football and NFL win probability models use the same features?

The core feature set is nearly identical, because the state of a football game is described the same way at both levels: score, clock, field position, down, distance and timeouts. College models sometimes substitute a different pregame prior, since a published point spread is not available for every FBS matchup the way it is for every NFL game.

Why does time remaining interact with score differential instead of standing alone?

A 10-point lead means something very different with 58 minutes left than with 90 seconds left, because it bounds how many more scoring possessions are realistically available. Win probability models capture this by combining the two into a single interaction term rather than treating them as independent inputs.

What happens to the pregame spread's influence as the game goes on?

It decays. A model that folds in the spread typically weights it heavily in the first quarter, when almost nothing else is known, and lets its influence shrink on a roughly exponential curve as more plays accumulate and the in-game state becomes the more informative signal.

Is a higher win probability the same as a better team?

Not necessarily. Win probability describes the state of one specific game — a weaker team can carry a high win probability simply by leading late with the ball and the clock running. Season-long team strength is a separate question, closer to what a power rating measures.

What comes after building the first version of the model?

Choosing an algorithm to fit it with (logistic regression versus tree-based methods, covered in Part 2), testing whether it is actually well calibrated (Part 3), and refining the feature set and evaluation method (Part 4) — the same order this series follows.

Sources

  1. Open Source Football — nflfastR EP, WP, and CP models
  2. nflverse-data — play-by-play and schedule releases (GitHub)
  3. Romer (2002), "It's Fourth Down and What Does the Bellman Equation Say?" (NBER Working Paper 9024)