THE spread
WK 03 · 2026 · 47 games in

Outliers and Cook's Distance in Football Models

Not every extreme game is dangerous to a model — only the ones sitting where the model has little other data to lean on.

Updated 6 min read

A regression model fit to a season of football games rarely gets pulled off course by an outlier the way people usually picture the term — a single freakish blowout sitting off by itself. It gets pulled off course by an influential point: a game whose inputs are unusual enough, and whose outcome differs enough from what the rest of the data suggests, that the model bends its overall shape trying to accommodate that one game. Cook’s distance is the standard tool for finding those points before they quietly distort everything else the model produces.

Outlier and Influential Point Are Not the Same Thing

An outlier, in the loose sense, is any point whose outcome looks extreme — a 45-point margin in a league that usually settles games within two scores. A regression model measures this more precisely through the residual: the gap between what the model predicted for that game and what actually happened. A large residual means the model missed badly on that particular game.

Influence is a different quantity. It asks how much the model itself would change if that one game were removed and refit — not how badly the model did on it, but how much that single game shaped where the model’s line or surface sits for every other prediction it makes. A game can have a large residual and still have low influence, if its inputs (point spread, rest days, whatever the model uses) sit in a part of the data that’s already well-populated by other games — the model has plenty of other evidence nearby and doesn’t need to twist itself to fit any one point. The dangerous combination is a large residual paired with high leverage: a game whose inputs are unusual and whose outcome the model got badly wrong, sitting in a stretch of the data where nothing else anchors the fit.

What Cook’s Distance Actually Measures

Cook’s distance, introduced by R. Dennis Cook in a 1977 paper in the journal Technometrics, combines exactly those two pieces — residual size and leverage — into a single number per observation. Formally, it’s built from the squared residual, the observation’s leverage value, the number of predictors in the model, and the model’s mean squared error; in practice, the detail worth keeping is what it represents rather than the arithmetic: how much every one of the model’s predictions would shift, on average, if this one game were dropped and the model refit without it.

A commonly used rule of thumb treats a Cook’s distance above 1 as worth investigating, though that threshold is a general guideline rather than a strict statistical boundary, and it’s most useful read relative to the spread of Cook’s distance values across the rest of the dataset — a handful of points sitting well above the pack are the ones worth opening up and looking at individually, regardless of the exact number attached to the cutoff.

Why Leverage and Residual Are Multiplied, Not Just Added

The reason Cook’s distance combines leverage and residual rather than treating them as two separate checks is that either one alone gives a misleading picture on its own. A game with high leverage — unusual inputs, sitting far from the rest of the season’s data in whatever variables the model uses — but a small residual means the model actually predicted that unusual game well; there’s nothing to fix. A game with a large residual but low leverage means the model missed, but missed in a well-populated part of the data where plenty of similar games already anchor the fit, so that one miss barely moves anything. It’s only the combination — an unusual game the model also got wrong — that has the leverage to drag the fitted relationship toward itself, because the model has too little else nearby to resist the pull.

This is also why Cook’s distance is more useful for football data than either leverage or residual size checked in isolation. A short, injury-shortened season, or a stretch of games clustered around one unusual point-spread range, can create pockets of high leverage almost automatically, simply because there isn’t much other data at that end of the range. Cook’s distance flags only the ones where that structural vulnerability actually mattered — where the model’s fit for the rest of the season shifted meaningfully because of it.

Cook’s Distance vs. a Simple Z-Score Cutoff

A simpler, more common way to flag unusual games is a z-score cutoff on the outcome itself — anything more than roughly two or three standard deviations from the mean scoring margin, say. That check is cheap and easy to explain, and it’s a reasonable first pass, but it only looks at the outcome variable in isolation. It has no way to account for what the model’s inputs said should have happened in that specific game, and no way to distinguish a game that’s extreme but well-explained by its inputs (a huge favorite that won big, exactly as the spread implied) from a game that’s extreme and poorly explained by them (an underdog’s blowout the model’s inputs gave little reason to expect).

Cook’s distance is model-aware in a way a raw outcome cutoff isn’t: it measures surprise relative to what the specific model being used would have predicted, and it measures influence on that same model’s fit, not just extremity of the raw number. The two checks answer different questions and are worth running together — a z-score pass is a fast first filter across a full season of games, and Cook’s distance is the more precise second pass on whatever that filter surfaces, or on the model’s own diagnostics after it’s already been fit.

A Hypothetical Football Example

Suppose a model predicts a team’s final scoring margin from pregame point spread across a full season, and one particular week the favored team wins by 55 points after the opposing starting quarterback leaves with an injury in the first quarter. That single game likely has both a large residual (the model’s spread-based prediction undershoots badly) and meaningful leverage if the season’s spreads cluster tightly and this game’s spread sits near the edge of that range. Refitting the model without that one game could shift the estimated relationship between spread and margin for every other game in the dataset — exactly the signature Cook’s distance is built to surface.

The right response in that hypothetical isn’t automatic deletion. The game is a real result; a spread-based model simply isn’t built to anticipate an in-game injury, and excluding every game with a large in-game shock would bias the model toward a smoother world than the one it’s predicting. The useful outcome of flagging it is understanding why the model missed, not erasing the evidence that it did.

Checking Cook’s Distance in Python

import statsmodels.api as sm

X = sm.add_constant(games[["spread"]])
y = games["actual_margin"]

model = sm.OLS(y, X).fit()
influence = model.get_influence()
cooks_d, cooks_p = influence.cooks_distance

games["cooks_distance"] = cooks_d
flagged = games[games["cooks_distance"] > 1].sort_values("cooks_distance", ascending=False)

get_influence() on a fitted OLS results object returns an OLSInfluence object with the diagnostics needed to identify high-leverage, high-residual games; .cooks_distance is the specific attribute holding Cook’s distance for every observation used to fit the model, paired with a p-value for each.

Reading Outlier Diagnostics as a Workflow, Not a One-Time Filter

Cook’s distance is most useful run every time a model is refit on new data, not as a single cleanup pass at the start of a project. A game that looked unremarkable when the season had ten weeks of data behind it can become far more influential once the season ends and the dataset is smaller relative to how unusual that one result was, or the reverse — an early-season anomaly can matter less once a full season’s worth of typical games surrounds it. Treating outlier diagnostics as a recurring check, alongside whatever cross-validation or backtesting a model already goes through, catches this shift as the underlying dataset itself keeps changing.

Frequently asked questions

What is an outlier in a statistical model?

An outlier is a data point whose value on the outcome being modeled differs substantially from what the model, or the general pattern of the rest of the data, would predict for it. In a football context that might be a blowout score, an unusually low or high stat total, or a game whose result the model's other inputs can't explain.

What is Cook's distance?

Cook's distance is a measure, introduced by statistician R. Dennis Cook in 1977, of how much a single observation influences a fitted regression model — specifically, how much the model's predictions for every other point would shift if that one observation were removed and the model refit. It combines the observation's leverage (how unusual its inputs are) with its residual (how far off the model's prediction for it was).

Is an outlier always a high-influence point?

No, and the distinction matters. A point can have a large residual — the model missed it badly — without having much influence on the model, if its inputs sit in a region already dense with other data. A point becomes highly influential when it combines an unusual residual with high leverage: it sits somewhere the model has little else to anchor on, so the model bends toward fitting that one point at the expense of the general pattern.

What Cook's distance value counts as 'high'?

A commonly cited rule of thumb flags any point with a Cook's distance greater than 1 as worth a closer look, though this threshold is a general guideline rather than a fixed statistical cutoff, and it should be interpreted relative to the rest of the dataset's distribution of Cook's distance values rather than as an absolute pass/fail line.

Should a high-Cook's-distance game always be removed from the data?

Not automatically. A high Cook's distance is a flag to investigate, not an instruction to delete. If the game turns out to be a data-entry error or a genuinely different process (a game that ended in a forfeit, for instance), removing or correcting it is reasonable. If it's simply a real, unusually extreme game — an actual blowout, an actual comeback — removing it can quietly bias the model toward underestimating how extreme real outcomes can be.

How is Cook's distance computed in Python?

With statsmodels: fit an OLS regression, call `.get_influence()` on the fitted results object, and read the `.cooks_distance` attribute, which returns the Cook's distance value for every observation used in the model alongside an associated p-value for each one.

Sources

  1. Cook's distance — Wikipedia
  2. OLSInfluence — statsmodels documentation