Back to projects

NFL betting market analysis

Sportsbooks set an Over/Under line for every NFL game. Can a model built from public data (team strength, form, rest, travel, weather) beat it? I tested that the way a bettor would have lived it: each season predicted only from the seasons before it.

Games tested
5,460
Overall accuracy
51.7%
Break-even
52.4%
Under bets won
56.0%

The problem

A standard bet costs $110 to win $100, so a bettor has to be right 52.4% of the time just to break even. Betting lines are set by people with far more data than any public model, which makes even that small edge hard to find.

It's also easy to fool yourself. A model that sees future games while it trains, or settings tuned on the same games used to score it, can look like it beats the market when it doesn't.

Approach

  1. Data. 10,923 games from 1980 to 2024 with closing Over/Under lines, joined with stadium locations and game-day weather.
  2. Features. Elo ratings updated game by game, 3- and 5-game scoring form and volatility, rest days, away-team travel distance, temperature and wind.
  3. Choosing the model. Logistic regression and XGBoost were both tuned with Optuna, using only games before December 2003. XGBoost had the better validation score, so it was used from then on.
  4. Walk-forward testing. The last 5,460 games were split into five stretches. Each stretch was predicted by a model trained only on the games before it.
  5. Betting rules. Bet only when the model's win probability beats the 52.4% the odds imply. Pushes return the stake, and every bet is priced at −110.

Results

Picking a side in every game doesn't work. Across all 5,460 test games the model was right 51.7% of the time, below break-even, and only the most recent stretch (2020 to 2024, 54.7%) cleared it.

Being selective changes the picture. On a $5,000 bankroll:

StrategyBetsWin rateReturn on stakes
Flat $50, any edge over break-even1,31755.0%+4.9%
Flat $50, edge of 3 points or more34155.7%+6.2%
Half Kelly, edge of 3 points or more34155.7%+3.6%, with a 56% drop along the way

Nearly all of the edge comes from Unders: 56.0% across 1,109 Under bets, against 48.9% across 188 Over bets. That matches a pattern the betting market is known for: the public likes Overs, which can push totals slightly too high.

How sure is this? The 55.0% win rate is about 1.9 standard errors above break-even. That's encouraging but not proof, and it assumes every bet was placed at −110 on the closing line. Real books move lines and limit winning accounts.

Kelly sizing grows the bankroll fastest on paper, but half Kelly still lost more than half the bankroll at its worst point. With an edge this thin, flat stakes are the safer way to bet it. You can try every combination in the live demo.

What I'd do next