The storm rule: old against new
Finished · 14 November 2026
The question. Does a rule built on the best lifted index and rain find thunder days better than the original CAPE-and-lifted-index rule, and are its member shares usable as chances?
Data
As in storm ingredients: summer 2025, 101 airports, 8,905 station-days at day 0 (142 with thunder) and 8,617 at day 3 (142).
A member "has thunder" at a 6-hour step when the rule holds; the raw chance is the share of the 31 members that have it at any step of the day.
- Original rule: CAPE ≥ 150 J/kg and surface lifted index ≤ 1, with rain falling.
- New rule: rain falling and (CAPE ≥ 200 J/kg or best lifted index ≤ 0). We also tried CAPE ≥ 50, ≥ 100, most-unstable CAPE, and best-LI cut-offs of +1 and −1.
Results (airport's own grid cell)
| Rule | AUC day 0 | AUC day 3 | BSS day 0 (raw share) |
|---|---|---|---|
| Original (CAPE ≥ 150 & LI ≤ 1) | 0.773 | 0.745 | −1.33 |
| New, CAPE ≥ 100 or best LI ≤ 0 | 0.859 | 0.831 | −4.55 |
| New, CAPE ≥ 200 or best LI ≤ 0 | 0.876 | 0.852 | −2.75 |
| New, most-unstable CAPE | 0.873 | 0.837 | −4.72 |
| New, CAPE ≥ 50 | 0.835 | 0.809 | −8.34 |
| New, best LI ≤ +1 | 0.881 | 0.851 | −6.69 |
| New, best LI ≤ −1 | 0.826 | 0.800 | −3.71 |
Reliability of the raw share, original rule, day 0:
| Members with storms | Station-days | Thunder observed |
|---|---|---|
| none | 7,084 | 1 % |
| up to 10 % | 678 | 3 % |
| 10–30 % | 449 | 3 % |
| 30–60 % | 426 | 7 % |
| 60–100 % | 268 | 14 % |
What worked
The new rule with CAPE ≥ 200 J/kg: best or near-best AUC at both leads, without the very loose triggers (CAPE ≥ 50, LI ≤ +1) that let in many dry days.
What did not
- Raw member shares as chances. Every rule's Brier skill was strongly negative: the model makes convective showers far more often than an airport hears thunder, and "thunder" at one airport is a small target. A share of 80 % meant roughly a one-in-ten chance at the airfield.
- Looser triggers raised the share of thunder days caught but lowered skill: more false alarms than extra hits.
- Per-member "organised" and "severe" steps (CAPE ≥ 500 / 1000 with LI ≤ −1 / −3) could not be checked: airports do not report storm severity.
What we changed
The new rule (CAPE ≥ 200 or best LI ≤ 0, with rain) became the first thunder step, and its chance is now always calibrated against airport reports (see thunder nearby).
Scripts: scripts/thunder/evaluate.py, scripts/thunder/calibrated.py.