Methodology

How StormSight decides that hail occurred. The algorithm is public so you can audit any detection.

1. Multi-source fusion

Every detected hail event must accumulate evidence from at least two independent measurement channels. We define channels by what physically produces the signal, not the data source name. So MRMS MESH and NSSL ProbSevereOA count as the same channel (both derived from NEXRAD reflectivity), while NEXRAD dual-polarization is a separate channel because dual-pol is a physically distinct measurement.

The six channels in v2 are: Radar Reflectivity, Radar Dual-Polarization, Satellite Lightning (GOES-19 GLM), Satellite IR (GOES-19 ABI), Forecast (NWS Warnings + SPC outlooks), Ground Report (LSRs, CoCoRaHS, mPING), and Mesonet (OK Mesonet, Synoptic).

2. Bayesian log-likelihood-ratio fusion

Each signal contributes a log-likelihood-ratio (LLR) to a running posterior probability. An LLR of ln(P(signal | hail) / P(signal | no_hail)) is the exact quantity Bayes’ theorem says to add to the prior log-odds.

The LLRs come from our backtest against the NCEI Storm Events archive (2018-2024 Oklahoma season). Examples:

  • MRMS MESH ≥ 1.5″: LLR = 3.5 (33× posterior odds bump)
  • NEXRAD dual-pol hail signature: LLR = 2.0 (7×)
  • NWS Local Storm Report: LLR = 2.8 (16×)
  • CoCoRaHS hail-pad measurement: LLR = 2.3 (10×)
  • mPING crowdsourced report: LLR = 1.5 (4×)

3. Within-channel diminishing returns

Within a single channel, the strongest signal contributes full LLR and additional signals contribute at half-weight each. So three independent CoCoRaHS reports don’t triple-count - the second and third reports add information but are partially redundant with the first. This is the textbook Bayesian correction for source dependence.

4. Spatial and temporal coherence

Tight clustering of ground reports (e.g., 5 LSRs within a 1 km radius and ±5 minutes) earns a coherence multiplier of up to 1.5× on the combined LLR. Scattered reports earn 1.0×. This reflects the physical reality that hail is a spatially coherent phenomenon - real events look like clusters, false signals look like noise.

5. MESH bias correction

The Multi-Radar Multi-Sensor System’s MESH product is known to overestimate hail size above 2 inches (Murillo et al., Weather and Forecasting). We apply a piecewise correction: below 2″ we trust MESH directly; 2-3″ we scale by 0.85; above 3″ we scale by 0.70. The size estimate you see is already corrected.

6. Calibration to the 0-100 score

The posterior probability is mapped through a piecewise-linear calibration curve to the 0-100 confidence score. Anchor points:

  • P(hail) = 0.50 → score 60 (MEDIUM)
  • P(hail) = 0.80 → score 75 (HIGH)
  • P(hail) = 0.95 → score 90 (VERY HIGH)

7. Versioning and re-fusion

When new evidence arrives for an existing event (e.g., a CoCoRaHS report files 8 hours after the radar detection), StormSight produces a new version of the event with updated confidence and size estimates. The prior version is preserved indefinitely. If you canvassed off v1 and the event later became v2 with a different size, both records remain queryable - your decision audit trail is intact.

Source code

The full implementation lives in src/lib/fusion/confidence.ts and src/lib/fusion/weights.ts. The weights table is versioned (currently v2.0.0); every detected event records the weights version that produced it so we can replay any historical event with the exact algorithm that scored it.

Methodology - StormSight