Case Study: The 2017 Wild Card Snow Game
Analyzing Weather's Role in a Playoff Classic
Introduction
On January 7, 2018, the Buffalo Bills hosted the Indianapolis Colts in an AFC Wild Card playoff game at New Era Field. What made this game analytically fascinating wasn't just the outcome—it was the severe snow conditions that transformed the contest into one of the most weather-affected playoff games in recent memory.
This case study examines how weather models would have approached this game and what we can learn from the actual outcome.
Pre-Game Setup
The Matchup
Buffalo Bills (9-7) - Ending 17-year playoff drought - Strong defensive team - Run-first offensive identity - Cold-weather acclimated
Indianapolis Colts (4-12) - Wild card via AFC South - Indoor dome team (Lucas Oil Stadium) - Pass-heavy offensive scheme - Limited cold-weather experience
The Weather Forecast
48 Hours Before: - Temperature: 28°F - Wind: 15 mph - Light snow expected
Game Time Actual: - Temperature: 22°F - Wind: 22 mph, gusting to 35 mph - Heavy, lake-effect snow - Visibility: Poor (< 100 yards at times) - Accumulation: 4-6 inches during game
Pre-Game Analysis
Market Lines
Opening (Sunday night prior): - Spread: Bills -6.5 - Total: 44.5
After weather forecast (Thursday): - Spread: Bills -8 - Total: 40.5
Closing: - Spread: Bills -9.5 - Total: 38
Line Movement Analysis: - Spread moved 3 points toward Buffalo - Total dropped 6.5 points - Market clearly pricing weather
Our Model's Projections
Step 1: Calculate weather index
Temperature: 22°F
Temp_factor = 0.10 × (55 - 22) = 3.3
Wind: 22 mph
Wind_factor = 0.15 × (22 - 10) = 1.8
Precipitation: Heavy snow
Precip_factor = 5.0
Total Index = 3.3 + 1.8 + 5.0 = 10.1 (Extreme)
Step 2: Total adjustment
Temperature: -0.12 × 33 = -3.96 points
Wind: -0.25 × 12 = -3.00 points
Heavy snow: -5.5 points
Raw adjustment: -12.46 points
However, our model caps extreme adjustments. Using a more conservative approach:
Conservative total adjustment: -8 to -10 points
Expected total: 44.5 - 9 = 35.5 points
Step 3: Spread adjustment
Buffalo advantages: - Cold-weather team: +0.5 - Run-first offense: +1.0 (favored in snow) - Colts dome team: +1.5 - Home field (enhanced by weather): +0.5
Total spread adjustment: +3.5 points
Base spread: -6.5
Weather adjustment: -3.5
Projected spread: -10.0
Model vs Market Comparison
| Metric | Market Close | Our Model | Difference |
|---|---|---|---|
| Spread | -9.5 | -10.0 | 0.5 pts |
| Total | 38.0 | 35.5 | 2.5 pts |
Our model was slightly more aggressive on the total reduction, suggesting possible value on the under.
Game Execution
First Half
The conditions exceeded even pessimistic forecasts:
Passing Stats (1st Half): - Colts: 4/12, 31 yards, 2 INTs - Bills: 3/7, 28 yards
Running Stats (1st Half): - Colts: 8 carries, 22 yards - Bills: 16 carries, 75 yards
Key Observations: - Visibility dropped to near-zero at times - Both teams struggled to throw - Buffalo controlled time of possession - Turnovers favored home team
Halftime Score: Bills 7, Colts 3
Second Half
Conditions worsened through the third quarter:
Third Quarter: - Heavy accumulation on field - Crews couldn't clear yard lines - Both offenses stalled - Defensive play dominated
Fourth Quarter: - Snow tapered slightly - Buffalo added field goal - Colts unable to mount drives
Final Score: Bills 10, Colts 7
Post-Game Analysis
Outcome vs Predictions
| Metric | Prediction | Actual | Error |
|---|---|---|---|
| Combined score | 35.5 | 17 | -18.5 |
| Bills margin | 10.0 | 3 | -7.0 |
| Under 38 | Value | Hit | Correct |
| Bills -9.5 | Slight value | Miss | Incorrect |
What Happened?
Our model underestimated: 1. Severity of conditions - Even aggressive adjustments weren't enough 2. Both teams' struggles - Expected Bills to perform better relatively 3. Variance - Snow games have extreme variance
Insights:
The combined score of 17 was one of the lowest in playoff history. Our -8 to -10 adjustment still predicted 35+ points. The actual conditions warranted -15+ adjustment.
Variance Analysis
Normal game standard deviation: 13.5 points
Snow game standard deviation: 18+ points
This game's deviation from expected: ~18 points under
Z-score: (17 - 35.5) / 18 = -1.03
While extreme, this outcome was within 1.5 standard deviations—unusual but not improbable given snow game variance.
Lessons Learned
Lesson 1: Extreme Weather Is Non-Linear
Our linear model (-0.12 per degree, -0.25 per mph wind) breaks down in extreme conditions. At some point, the game fundamentally changes.
Proposed Non-Linear Adjustment:
def extreme_weather_adjustment(base_adjustment):
"""
Apply non-linear scaling for extreme conditions.
"""
if abs(base_adjustment) < 5:
return base_adjustment
elif abs(base_adjustment) < 10:
# Accelerate adjustment
return base_adjustment * 1.2
else:
# Extreme - cap but expand variance
return base_adjustment * 1.4 # Allow larger adjustments
Lesson 2: Lake-Effect Snow Is Unique
Buffalo's lake-effect snow can intensify rapidly and exceed forecasts. Standard weather models don't capture this well.
Recommendation: - For Buffalo games, add 20% to snow intensity estimates - Check multiple forecast models specifically for lake effect
Lesson 3: Dome Team Disadvantage Is Real
The Colts' struggles validated the dome-to-cold adjustment:
- Colts passing: 4/19, 62 yards, 2 INT
- Bills passing: 6/18, 56 yards, 0 INT
Both teams struggled, but the Bills' familiarity with conditions provided meaningful edge.
Lesson 4: Variance Matters More Than Point Estimate
Even if our point estimate was "correct" on average, the variance in snow games means:
- 90% confidence interval widens dramatically
- Predicting specific outcomes becomes nearly impossible
- Value in totals (under) can exist even with extreme lines
Model Improvements
Enhanced Snow Model
Based on this case study, we propose:
def enhanced_snow_adjustment(snow_intensity: str, wind: float,
visibility: str, accumulation: float) -> Dict:
"""
Enhanced snow game adjustment.
Args:
snow_intensity: 'light', 'moderate', 'heavy', 'blizzard'
wind: Wind speed in mph
visibility: 'good', 'poor', 'very_poor'
accumulation: Expected inches during game
Returns:
Dict with total adjustment and variance multiplier
"""
base_adjustments = {
'light': -2.0,
'moderate': -4.0,
'heavy': -6.0,
'blizzard': -10.0
}
base = base_adjustments.get(snow_intensity, -4.0)
# Wind compounds snow effect
if wind > 15:
base *= 1.0 + 0.05 * (wind - 15)
# Visibility effect
visibility_mult = {'good': 1.0, 'poor': 1.3, 'very_poor': 1.6}
base *= visibility_mult.get(visibility, 1.0)
# Accumulation effect
if accumulation > 3:
base *= 1.0 + 0.1 * (accumulation - 3)
# Variance expansion
variance_mult = 1.0 + abs(base) * 0.05
return {
'total_adjustment': min(base, -15), # Cap at -15
'variance_multiplier': min(variance_mult, 1.8),
'confidence': 'low' if abs(base) > 8 else 'moderate'
}
Dome Team Penalty
def dome_team_cold_penalty(temperature: float, precipitation: str,
opponent_is_cold_team: bool) -> float:
"""
Calculate additional penalty for dome team in cold weather.
"""
if temperature > 35:
return 0
base_penalty = 0.5 + 0.05 * (35 - temperature)
if precipitation in ['snow', 'heavy_snow', 'blizzard']:
base_penalty *= 1.5
if opponent_is_cold_team:
base_penalty *= 1.3
return min(base_penalty, 3.0)
Conclusion
The 2017 Bills-Colts Wild Card game illustrates both the power and limitations of weather modeling:
What worked: - Identified correct direction (lower scoring) - Captured Bills' weather advantage - Under was correct
What didn't work: - Underestimated severity - Point estimate too high - Spread analysis missed
Key Takeaways:
- Extreme conditions require non-linear modeling
- Snow game variance is very high
- Lake-effect snow is uniquely unpredictable
- Dome team disadvantage is quantifiable
- In extreme weather, bet unders cautiously but recognize variance
The game validated weather analysis while humbling our specific predictions—a reminder that modeling improves decisions without guaranteeing outcomes.
Discussion Questions
-
How would you modify the model for other lake-effect venues (Cleveland, Chicago)?
-
At what point should analysts simply avoid predicting extreme weather games?
-
The under hit despite being an extreme line (38). How do you evaluate if the value was real or lucky?
-
Would you have bet Bills -9.5 based on the model? Why or why not?
-
How should playoff implications change weather analysis (higher stakes, less variance tolerance)?
Data Appendix
Final Box Score
| Team | Q1 | Q2 | Q3 | Q4 | Final |
|---|---|---|---|---|---|
| IND | 0 | 3 | 0 | 4 | 7 |
| BUF | 7 | 0 | 0 | 3 | 10 |
Weather Conditions
| Period | Temp | Wind | Conditions |
|---|---|---|---|
| Kickoff | 24°F | 18 mph | Moderate snow |
| Halftime | 22°F | 25 mph | Heavy snow |
| End | 21°F | 20 mph | Heavy snow |
Passing Performance
| Team | Comp | Att | Yards | TD | INT |
|---|---|---|---|---|---|
| IND | 4 | 19 | 62 | 0 | 2 |
| BUF | 6 | 18 | 56 | 0 | 0 |
Rushing Performance
| Team | Att | Yards | Avg | TD |
|---|---|---|---|---|
| IND | 19 | 68 | 3.6 | 0 |
| BUF | 38 | 158 | 4.2 | 1 |