Query the matched pairs — faceted filter
Valid time range (ISO, inclusive)
Selection: — rows.
Plain-JS columnar scan (gestures at DuckDB-style querying).
Threshold & operator — binarize → 2×2
bounds —
Suggested thresholds
Compiled query — read-only, not executed
Load your own CSV — parsed locally
Drag & drop a matched-pairs CSV here
(same schema), or
(same schema), or
Never uploaded — read in-browser via FileReader.
Columns: model, lead, region, valid, fcst, obs, fcst_prob, obs_event.
Dataset — provenance
2×2 contingency table
| obs = yes | obs = no | |
|---|---|---|
| fcst = yes | —a · hits | —b · false alarms |
| fcst = no | —c · misses | —d · correct neg. |
n = —
event when value
event when value
Categorical statistics — hover/focus a tile for its exact formula
Continuous statistics — from filtered raw pairs
Performance diagram
x = SR (1−FAR), y = POD. Blue curves = CSI contours
CSI = 1/(1/SR + 1/POD − 1); gold dashed = bias lines POD/SR = const.Reliability diagram + sharpness
Observed relative frequency vs mean forecast probability
(10 bins). Diagonal = perfect reliability; inset = sharpness (n / bin).
MET fidelity — exact formula behind every number
Parity with reference MET (point_stat / grid_stat CTS & CNT line types) is the
headline open question this prototype exists to test — bit-for-bit
parity is not claimed for the MVP. GSS/HSS use the standard
sample-climatology reference; empty categories / zero variance render as “—”.
Future architecture — named, NOT depended on
Zarr v3
Lazy range-request access to chunked gridded model output for
spatial / grid_stat verification (replaces “load the whole CSV”).
Parquet + DuckDB-WASM
Columnar matched-pair store; the faceted filter + “compiled
query” string above is the placeholder for real SQL pushed to DuckDB-WASM.
Rust + WASM
Port the verified
stats.js kernels for speed and to
share one math implementation with MET-adjacent code.WebGPU / WGSL
Per-cell / per-pair recompute on the GPU for interactive what-if
over very large grids.
None of these are imported or required by this prototype.
It runs offline with vanilla HTML/CSS/JS only.