We publish our tornado projection numbers straight from the database. Every NWS tornado warning carries position, bearing, and speed — we compare our projected next-step against where the storm actually went. Here are the six numbers that matter, live from the last 90 days.
Every NWS tornado warning carries an eventMotionDescription field with the storm's position, bearing, and speed at issue time. On every one-minute alert-engine cycle we record that observation. When a warning is updated (usually every 5–15 minutes as the storm moves), we record the new observation too.
With two observations of the same tornado we can project: take the earlier one, dead-reckon forward using its reported bearing and speed for exactly the time gap between the two reports, and ask how far is that projection from the actual next observation?
That distance is delta_miles. Every number on this page rolls up from those pair-level distances.
These numbers cover our dead-reckoning projection accuracy, not tornado warning lead time or NWS forecast quality — those are the NWS's numbers, not ours. If the storm re-issues with a new motion fix, we look wrong even when our math is right, because the new fix is our new ground truth. That's a real source of error that's included in these numbers, not filtered out.
Projections beyond 30 minutes degrade fast. We expose them in the admin dashboard but don't put them on this page, because publishing a P95 that's 25 miles wide at 60 min lead is not useful for safety planning.
Nobody else in the severe-weather app space publishes projection accuracy openly. We think you deserve to know what you're paying for. If a bad storm season pushes these numbers the wrong way, we'll write about it rather than hide it.
Questions? Methodology suggestions? Email [email protected].
lead_minutes ∈ (0, 180] to drop dead-tornado artifacts where the NWS warning was reissued long after the storm dissipated. All percentiles are linear-interpolation (Postgres PERCENTILE_CONT).