KEY FINDINGS
- Freezing games (≤32°F) average just 40.4 total points — the lowest of any temperature band.
- Yet the Over still hits 51.6% in those games (53.0% in the last 25 seasons): the market over-corrects for the cold.
- The lesson mirrors our wind study — the obvious weather effect is already baked into the line.
Methodology
We grouped every game by its temperature band (temp_bucket, derived from weather_temperature) and compared average combined score (score_total) against the over/under hit rate (ou_outcome). Dome games are excluded from the cold analysis.
import pandas as pd
df = pd.read_csv("spreadspoke_enhanced.csv", low_memory=False)
for b in ['Hot','Comfortable','Cool','Chilly','Freezing']:
s = df[df.temp_bucket==b]
o, u = (s.ou_outcome=='Over').sum(), (s.ou_outcome=='Under').sum()
print(f"{b}: avg total {s.score_total.mean():.1f} | Over% {100*o/(o+u):.1f}")
The Analysis
It's true that freezing games are the lowest-scoring in the dataset — about two points below the league average. So the natural move is to slam the Under whenever the forecast drops below 32°F. The problem is that everyone knows this, including the people setting the lines. They shade freezing-game totals low enough that the Over actually cashes a hair more than half the time.
This is the cold-weather mirror of our wind analysis: weather absolutely affects scoring, but the headline effect is the part the market prices most efficiently. Betting “Under because it's cold” is betting something everyone already sees. The exploitable signal lives in the second-order stuff — sustained wind, as the wind piece showed — not in the temperature on the broadcast graphic.
The reader takeaway is a healthy skepticism toward obvious narratives. “Cold = low scoring” is true at the box-score level and false at the betting-line level, and the gap between those two facts is where casual bettors lose money.
Scoring and over/under rate by temperature (outdoor games).
| Temperature band | Avg total | Over % |
|---|---|---|
| Hot | 44.1 | 49.2% |
| Warm | 41.3 | 43.3% |
| Comfortable | 43.8 | 51.0% |
| Mild | 41.6 | 47.8% |
| Cool | 41.9 | 49.0% |
| Chilly | 41.2 | 48.0% |
| Freezing | 40.4 | 51.6% |
Every figure here comes straight from the Spreadspoke dataset — 14,371 games, 60 seasons, 131 columns.
Get the Dataset →