Client-side Verification Wrapper

Documented MET verification math, run entirely in your browser
Theme 01 · Client-side wrapper
Synthetic data
Loading synthetic matched pairs…

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
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 = yesobs = no
fcst = yes a · hits b · false alarms
fcst = no c · misses d · correct neg.
n =
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.