Strong gusts: model gusts or 10 m wind?
Finished · 15 November 2026
The question. Which GEFS field best predicts an airport reporting a gust of 50 or 60 mph in a day: the model's gust, its 10 m wind, or either with terrain or season?
Data
Observations: the strongest wind or gust each airport reported each UTC day (METAR/SPECI sknt, gust, peak_wind_gust, after the spike filter), from 101 airports; at least 18 reports with a wind. Forecasts: per member, the strongest value at 00, 06, 12 and 18 UTC (as the live site does), bilinear at the airport.
- Gust era: summers 2023 and 2024, the only archives with the model's gust field: 17,678 airport-days at day 0, 40 reaching 50 mph.
- All data: summers 2023–2025 and January–March, October–November 2026: 36,345 airport-days, 327 reaching 50 mph and 79 reaching 60 mph.
Logistic regression, cross-validated by week blocks.
Results, gust era, 50 mph
| Predictor | BSS day 0 | AUC day 0 | BSS day 3 | AUC day 3 |
|---|---|---|---|---|
| Raw share of members with gust ≥ 50 mph (the old live rule) | −0.046 | 0.835 | +0.087 | 0.757 |
| Logit of that share | −0.003 | 0.719 | +0.055 | 0.587 |
| Mean daily-max gust | +0.117 | 0.982 | +0.047 | 0.952 |
| Mean daily-max 10 m wind | +0.118 | 0.968 | +0.066 | 0.925 |
| Mean gust + mean 10 m wind | +0.107 | 0.981 | +0.046 | 0.945 |
| Mean 10 m wind + elevation + latitude | +0.123 | 0.967 | +0.082 | 0.924 |
Results, all data, mean daily-max 10 m wind
| Step | BSS day 0 | AUC day 0 | BSS day 3 | AUC day 3 |
|---|---|---|---|---|
| 50 mph | +0.347 | 0.977 | +0.176 | 0.944 |
| 60 mph | +0.345 | 0.969 | +0.219 | 0.942 |
| 50 mph, + max member | +0.359 | 0.978 | +0.172 | 0.953 |
| 60 mph, + max member | +0.349 | 0.969 | +0.158 | 0.949 |
| 50 mph, + winter flag | +0.338 | 0.975 | +0.166 | 0.933 |
Reliability, 50 mph, day 0 (cross-validated):
| Chance given | Airport-days | Forecast (mean) | Observed |
|---|---|---|---|
| under 1 % | 33,607 | 0.1 % | 0.1 % |
| 1–5 % | 1,745 | 2.2 % | 3.3 % |
| 5–15 % | 507 | 8.5 % | 9.1 % |
| 15–30 % | 217 | 22 % | 24 % |
| 30–50 % | 115 | 39 % | 31 % |
| 50–100 % | 154 | 75 % | 71 % |
What worked
The ensemble-mean daily-max 10 m wind, one predictor per step and lead: as good as model gusts where both exist, available in every archive (so the winter storms could be used), and well calibrated across the range.
What did not
- The raw gust share: no skill at day 0 (−0.046) — the members' gusts at four snapshots are not an airport's daily maximum.
- The logit of the share as a predictor: ranking collapsed (AUC 0.72 at day 0, 0.59 at day 3).
- Extra predictors: elevation and latitude, a winter flag, the strongest member — small gains in one place, losses in another (the strongest member made 60 mph at day 3 worse: +0.219 → +0.158). Not worth their instability.
- 70 mph: only 30 airport-days in all the data reached it; too few to fit, so that step keeps its raw member share (capped at the 60 mph chance).
Caveat
At day 3, on the 40 gust-era events, the calibrated chance (+0.078 in production) scored a little below the raw gust share (+0.087). On so few events this is within noise, but it is the first thing the weekly checks should confirm or refute this winter.
What we changed
Live from 15 November 2026: the 50 and 60 mph chances are calibrated this way (production fit: BSS +0.348 / +0.186 for 50 mph, +0.345 / +0.229 for 60 mph, days 0 / 3).
Scripts: scripts/wind/extract.py, evaluate.py, final.py.