Phase A — 7 pipeline bugs:
- retain_scores_window: fix timeline self-deletion (NOTIFY payload run_time|valid_time)
- Rust/Elixir weight divergence: Rust loads band_weights.json at startup
- Aurora boost ported to Rust (Kp query + per-cell boost for bands <= 432 MHz)
- Commercial-link boost applied in Rust per-cell scoring
- f00 native gradient preferred over pressure-level gradient
- HRDPS files: greedy regex fixed, now visible to timeline/prune/retain
- GEFS/HRRR collision: GEFS namespace as .gefs.prop, merge at read
Phase B — Validation harness:
- scripts/validate_algo.py: out-of-sample Spearman rho(score,distance) + baselines
- docs/algo-reports/validation-2026-08-01.{json,md}
Phase C — Forecast-skill evaluation:
- scripts/validate_forecast.py: skill degradation by lead time (0h-24h)
- docs/algo-reports/forecast-2026-08-01.{json,md}
Phase D — Calibration + model improvements:
- recalibrate.py: validation gate before weight deploy
- Recalibrator: Nx.max(0.0) replaces Nx.abs(), L2 regularization, val-set integrity
- ML train/serve defaults unified; prop_compare null-handling skew fixed
- Latitude-aware sunrise: solar-declination sunrise_hour(lat,month) (Elixir + Rust)
- Path scoring: wind/sky/rain from HRRR (was ~30% of composite weight silent)
- Region multiplier documented as unvalidated; PWAT/refractivity doc-vs-code noted
- algo.md: synced scoring sections, marked retired features, D5/D6 changelog
- Credo: path_compute cyclomatic complexity bumped (6->10 fields) — informational only
59 lines
1.1 KiB
JSON
59 lines
1.1 KiB
JSON
{
|
|
"generated_at": "2026-08-01T22:03:32+00:00",
|
|
"generated_by": "scripts/validate_forecast.py",
|
|
"schema_version": 1,
|
|
"summary": {
|
|
"total_contacts": 59203,
|
|
"contacts_with_all_profiles": 12929,
|
|
"lead_times_hours": [
|
|
0,
|
|
1,
|
|
3,
|
|
6,
|
|
12,
|
|
24
|
|
],
|
|
"bands_evaluated": 3
|
|
},
|
|
"per_band": {
|
|
"10000": {
|
|
"n": 11825,
|
|
"rhos": {
|
|
"0": -0.0033,
|
|
"1": -0.0007,
|
|
"3": 0.0201,
|
|
"6": -0.0189,
|
|
"12": -0.0128,
|
|
"24": 0.0021
|
|
},
|
|
"delta_6h": 0.0156,
|
|
"delta_24h": -0.0054
|
|
},
|
|
"24000": {
|
|
"n": 971,
|
|
"rhos": {
|
|
"0": 0.314,
|
|
"1": 0.3166,
|
|
"3": 0.3227,
|
|
"6": 0.3761,
|
|
"12": 0.3629,
|
|
"24": 0.2531
|
|
},
|
|
"delta_6h": -0.0622,
|
|
"delta_24h": 0.0609
|
|
},
|
|
"47000": {
|
|
"n": 108,
|
|
"rhos": {
|
|
"0": 0.1438,
|
|
"1": 0.1373,
|
|
"3": 0.1644,
|
|
"6": 0.2084,
|
|
"12": 0.0689,
|
|
"24": 0.142
|
|
},
|
|
"delta_6h": -0.0646,
|
|
"delta_24h": 0.0018
|
|
}
|
|
}
|
|
}
|