POWERED BY WEATHER.CITY
ABOUT
weather.football

Methodology

One transparent number, 0–100, for how much the weather will shape a game.

The Weather Football Index

The Weather Football Index (WFI) is a single 0–100 score expressing how strongly the weather is expected to affect a football game — where 0 is a climate-controlled dome and 100 is a blizzard or gale that fundamentally changes how the game can be played. It is built to be transparent, reproducible, and calibrated against decades of outcomes, not a black box.

The components

WFI is the sum of four weather components, then scaled down for roof type. Each component is bounded so no single factor can silently dominate.

Wind

up to 45 pts

The single biggest on-field factor — it degrades the deep passing and kicking game. Sustained speed plus a gust premium. We also resolve the wind against each stadium's surveyed orientation and report the along-field and cross-field components — but they do not enter the score, and the reason is below.

Precipitation

up to 30 pts

What fell is observed, not guessed: present weather from the ASOS station nearest each stadium. Rain saturates — once the ball and field are wet, more rain adds little — while snow keeps accumulating, so rain enters as a square root of its rate and snow linearly. A point of snow costs about twice a point of rain, though the record does not pin that down tightly.

Cold

up to 25 pts

Sub-freezing air stiffens the ball and hands and lowers kick distance. Driven by wind-chill, not just air temperature.

Heat

up to 8 pts

Extreme heat and humidity drive fatigue and cramping, especially early season. Driven by heat index. Cut from 20 points in v1.2 — it is the one component the record does not support; see below.

The formula

// raw impact, before roof scaling
raw = wind_pts + precip_pts + cold_pts + heat_pts

wind_pts = clamp((sustained_mph − 5) × 2.2 + gust_premium, 0, 45)
  // gust_premium = clamp((gust_mph − sustained_mph − 8) × 0.8, 0, 8)
precip_pts = clamp( 57.0 × √(rain_in_hr)
                  + 19.7 × snow_in_hr, 0, 30)  // √ for rain, linear for snow — measured, see below
cold_pts = clamp((32 − wind_chill_F) × 0.9, 0, 25)
heat_pts = clamp((heat_index_F − 88) × 0.52, 0, 8)

// Where a station watched the game, snow_in_hr is the observed depth rate.
// Otherwise frozen precip arrives as water equivalent (NBM apcp, ERA5 tp)
// and is converted to depth — Kuchera, on surface temperature as the proxy:

snow_in_hr = snow_water_equiv_in_hr × clamp(12 + 1.111 × (28.4 − temp_F), 5, 20)

// and whether it IS frozen is decided on the wet bulb, not the dry bulb:
// snow cools itself toward the wet bulb as it falls, so it reaches the ground
// at air temperatures into the 40s in dry air. Centred at 33°F, which is where
// 185,000 observed hours of snow and rain put it.

frozen_fraction = ramp(wet_bulb_F, all frozen ≤ 31.5, all liquid ≥ 34.5)

// roof scaling: controlled environments crush the score
roof_factor = { open/outdoors: 1.0, retractable-open: 1.0,
              retractable: 0.55, retractable-closed: 0.15,
              closed: 0.15, dome: 0.05 }
// `retractable` is the unknown-state default — open often enough
// to matter, sealed often enough not to score it as open air.


WFI = round( clamp(raw × roof_factor, 0, 100) )

Data sources

Update frequency. Live game forecasts refresh hourly from the latest NBM cycle. The historical archive and validation tables are rebuilt after each completed week during the season. This page's spec is versioned; weight or source changes are logged below.

Does it actually work?

The component weights were chosen from the physics and then checked against the historical record — which makes this calibration, not independent validation. Weather inputs contain no scores, so the predictors are independent of the outcome; the test is not, because the same games were available to us while the weights were being set. We state the distinction plainly because it changes how much the curve below is worth: it shows the index is consistent with the record, not that it was proven against data it had never seen.

Across every outdoor NFL game since 1999, scoring does fall as the index rises:

Average total points by WFI band · outdoor games · 1999-2025
BandGamesPts/game95% interval
negligible4,06744.243.7 – 44.6
minor1,11341.540.7 – 42.3
notable25440.338.5 – 42.0
high THIN2231.323.7 – 38.9
extreme THIN530.422.4 – 38.4

7,276 games scored: 3,595 on full inputs from the reanalysis — observed temperature and wind, ERA5-Land gust and humidity, and precipitation from the station where one watched (OBS); 3,381 on full inputs taken entirely from the station nearest the stadium (STA); 300 on temperature and wind alone (LEG), which is all that can be had for them. They are different measurements and are labelled per game on the Seasons board.

Read the intervals before the averages. Genuinely severe weather is rare — the high band is 19 games in 27 seasons, and its 95% interval overlaps the notable band, so the two are not statistically distinguishable. Above it sits an extreme band of three games, which is not a measurement of anything and should be read as a label rather than an average. The direction is not stable in every recut either: cut to 2023–2025 alone, notable sits above minor, on twenty games. That is consistent with noise at that sample size, but it is not evidence for the index, and we would rather show it than pick the cuts that flatter us. Both halves of the record (1999–2012, 2013–2022) and both scoring states do decline monotonically from negligible through high.

Nothing here is out-of-sample. Every season through 2025 existed when the index was designed, so no split of it — however it is labelled — is a true holdout. The first genuinely prospective test is the 2026 season, and it is being recorded now: from eight days before each kickoff we archive the forecast at fixed leads and never revise it, so next year this section can report skill against games the index had never seen. The full table and the worst-weather games are on the Index board; the warm-vs-cold acclimation cut is on Stadium Weather Impact.

Limitations & honest caveats

The WFI is a decision aid, not a crystal ball. Where it is weak, we say so:

Forecast reliability

Live game scores carry a reliability tier based on lead time and cross-model agreement, so you know how much weight the number can bear:

Edge cases

This spec is versioned. Material changes to weights or sources will be logged here. Current: WFI v0.1 — 2026-07-21.