{"live": {"generated_at": "2026-10-05T03:12:11.968326+01:00", "first_forecast_day": "2026-09-12", "n_point_forecasts": 101795, "n_scored": 28375, "rules": {"decision_hour_local": 8, "min_known_polls": 6, "max_gap_h": 8.0, "strict_gap_h": 6.0, "feed_current_h": 6.0, "unstamped_feed": "a feed with no record stamp (South West Water's) is never current: its overflows are not scored", "discharging_without_event_times": "a spill on the local day of the poll that saw it", "baseline": "annual spill count / 365, an approximation (spill-days per counted spill = 1.00 pooled over United Utilities 2023-25; not checked per overflow or company)"}, "units": {"n_point_forecasts": "rows in the spot forecast log: one per spot, issue and target day (not overflow-days)", "n_candidates": "overflow-days: one monitored overflow on one past target day, with a forecast and rainfall data", "n_scored": "overflow-days"}, "n_candidates": 101233, "missed_deadline": {"n": 5522, "issue_days": ["2026-09-12", "2026-09-13", "2026-09-28", "2026-10-03"], "share_of_candidates": 0.05454743018580897}, "observations_from": "2026-09-28", "coverage_from": "2026-09-29", "coverage_stats": {"covered_site_days": 73653, "median_known_polls": 15.0, "median_max_gap_h": 6.0}, "n_uncovered": 67336, "uncovered_by_reason": {"before_observations": 60300, "feed_not_current": 270, "max_gap": 6761, "min_known_polls": 0, "next_day_unobserved": 5}, "scoring_window": {"unit": "overflow-day", "from_day": "2026-09-28", "to_day": "2026-10-04", "n_candidates": 35603, "n_missed_deadline": 192, "n_uncovered": 7036, "uncovered_by_reason": {"feed_not_current": 270, "max_gap": 6761, "min_known_polls": 0, "next_day_unobserved": 5}, "n_scored": 28375, "n_before_window": 65630, "first_scored_day": "2026-09-29", "last_scored_day": "2026-10-04"}, "overall": {"raw": {"brier": 0.023588076563632154, "log_loss": 0.09662719988282528, "auc": 0.850601932524095, "base_rate": 0.02590308370044053, "n": 28375}, "calibrated": {"brier": 0.022931024768310118, "log_loss": 0.09549981520964229, "auc": 0.8514487531626254, "base_rate": 0.02590308370044053, "n": 28375}, "climatology_brier": 0.03464805666575848, "period_base_rate_brier": 0.0252321139552485, "mean_forecast": 0.03278941052859515}, "warning_table": {"warn_at": 0.4, "level": "high", "unit": "overflow-day forecast", "n": 28375, "hits": 153, "misses": 582, "false_alarms": 221, "quiet_correct": 27419, "hit_rate": 0.20816326530612245, "warnings_true": 0.4090909090909091, "share_correct": 0.9717004405286344, "always_no_correct": 0.9740969162995595, "base_rate": 0.02590308370044053, "warning_lift": 15.79313543599258, "n_overflow_days": 5735, "n_spill_overflow_days": 147, "n_days": 6, "first_day": "2026-09-29", "last_day": "2026-10-04", "by_lead": [{"lead": 0, "n": 5735, "hits": 39, "misses": 108, "false_alarms": 47, "quiet_correct": 5541, "hit_rate": 0.2653061224489796, "warnings_true": 0.45348837209302323, "share_correct": 0.972972972972973, "always_no_correct": 0.9743679163034001, "base_rate": 0.025632083696599826, "warning_lift": 17.6922164214523}, {"lead": 1, "n": 5672, "hits": 53, "misses": 94, "false_alarms": 52, "quiet_correct": 5473, "hit_rate": 0.36054421768707484, "warnings_true": 0.5047619047619047, "share_correct": 0.9742595204513399, "always_no_correct": 0.974083215796897, "base_rate": 0.025916784203102963, "warning_lift": 19.476255264010366}, {"lead": 2, "n": 5664, "hits": 30, "misses": 117, "false_alarms": 58, "quiet_correct": 5459, "hit_rate": 0.20408163265306123, "warnings_true": 0.3409090909090909, "share_correct": 0.9691031073446328, "always_no_correct": 0.9740466101694916, "base_rate": 0.025953389830508475, "warning_lift": 13.135435992578849}, {"lead": 3, "n": 5656, "hits": 22, "misses": 125, "false_alarms": 52, "quiet_correct": 5457, "hit_rate": 0.14965986394557823, "warnings_true": 0.2972972972972973, "share_correct": 0.9687057991513437, "always_no_correct": 0.974009900990099, "base_rate": 0.02599009900990099, "warning_lift": 11.43886743886744}, {"lead": 4, "n": 5648, "hits": 9, "misses": 138, "false_alarms": 12, "quiet_correct": 5489, "hit_rate": 0.061224489795918366, "warnings_true": 0.42857142857142855, "share_correct": 0.9734419263456091, "always_no_correct": 0.9739730878186968, "base_rate": 0.026026912181303118, "warning_lift": 16.466472303206995}]}, "by_lead": [{"lead": 0, "n": 5735, "base_rate": 0.025632083696599826, "brier_raw": 0.020672622568548665, "brier_cal": 0.02061211305964042, "climatology_brier": 0.034509014596288405, "same_day": true}, {"lead": 1, "n": 5672, "base_rate": 0.025916784203102963, "brier_raw": 0.02055921099063275, "brier_cal": 0.020272492252933667, "climatology_brier": 0.03463663023789387, "same_day": false}, {"lead": 2, "n": 5664, "base_rate": 0.025953389830508475, "brier_raw": 0.024696852646827562, "brier_cal": 0.023713162766171213, "climatology_brier": 0.03466770664429881, "same_day": false}, {"lead": 3, "n": 5656, "base_rate": 0.02599009900990099, "brier_raw": 0.02729095541476405, "brier_cal": 0.02572047312829216, "climatology_brier": 0.03469887096133008, "same_day": false}, {"lead": 4, "n": 5648, "base_rate": 0.026026912181303118, "brier_raw": 0.024770134579679526, "brier_cal": 0.024377732546725893, "climatology_brier": 0.03473012356254556, "same_day": false}], "in_advance": {"n": 22640, "brier_cal": 0.023518434602639655, "climatology_brier": 0.034683277790688284, "auc": 0.8435165150769177}, "coverage_sensitivity": {"default": {"max_gap_h": 8.0, "n": 28375, "base_rate": 0.02590308370044053, "brier_cal": 0.022931024768310118, "climatology_brier": 0.03464805666575848}, "strict": {"max_gap_h": 6.0, "n": 14249, "base_rate": 0.011930661800828128, "brier_cal": 0.012511447733877716, "climatology_brier": 0.024938363977810993}}, "by_version": [{"version": "spill=808da63d;cal=9b3cc24c;ecoli=55b5d280;code=0.1.0+1598635;rain=open-meteo-forecast", "n": 4695, "base_rate": 0.0308839190628328, "brier_cal": 0.025820976754625375, "climatology_brier": 0.03781499793868595, "first_day": "2026-09-29", "last_day": "2026-09-29"}, {"version": "spill=808da63d;cal=9b3cc24c;ecoli=55b5d280;code=0.1.0+6168e76;rain=open-meteo-forecast", "n": 2737, "base_rate": 0.028132992327365727, "brier_cal": 0.017916920699611233, "climatology_brier": 0.03529049645991946, "first_day": "2026-10-02", "last_day": "2026-10-02"}, {"version": "spill=808da63d;cal=9b3cc24c;ecoli=55b5d280;code=0.1.0+7d96ccb;rain=open-meteo-forecast", "n": 1861, "base_rate": 0.011284255776464266, "brier_cal": 0.009470651727661645, "climatology_brier": 0.024398074410520724, "first_day": "2026-10-03", "last_day": "2026-10-03"}, {"version": "spill=808da63d;cal=9b3cc24c;ecoli=55b5d280;code=0.1.0+9f02c3a;rain=open-meteo-forecast", "n": 3721, "base_rate": 0.02418704649287826, "brier_cal": 0.019540905834621227, "climatology_brier": 0.032799674980929075, "first_day": "2026-10-01", "last_day": "2026-10-01"}, {"version": "spill=808da63d;cal=9b3cc24c;ecoli=55b5d280;code=0.1.0+aa0df6f;rain=open-meteo-forecast", "n": 4704, "base_rate": 0.029549319727891158, "brier_cal": 0.02527898823903336, "climatology_brier": 0.03657559796100911, "first_day": "2026-09-30", "last_day": "2026-09-30"}, {"version": "spill=808da63d;cal=9b3cc24c;ecoli=55b5d280;code=0.1.0+be072e3;rain=open-meteo-forecast", "n": 1040, "base_rate": 0.0019230769230769232, "brier_cal": 0.0029126885034687646, "climatology_brier": 0.019584407103445625, "first_day": "2026-10-04", "last_day": "2026-10-04"}, {"version": "unstamped (stamps begin 2026-09-28)", "n": 9617, "base_rate": 0.02713944057398357, "brier_cal": 0.02787996046450798, "climatology_brier": 0.03630397218257047, "first_day": "2026-09-25", "last_day": "2026-09-28"}], "by_company": [{"company": "Wessex Water", "n": 7315, "sites": 245, "base_rate": 0.010252904989747095, "n_spill_days": 75, "mean_forecast": 0.023232814580691836, "brier_cal": 0.010405379761397212, "climatology_brier": 0.02209263219396633, "flat_brier": 0.010147782929018315, "skill": 0.5290113160785339, "auc": 0.8411639042357274}, {"company": "Thames Water", "n": 5056, "sites": 183, "base_rate": 0.0, "n_spill_days": 0, "mean_forecast": 0.014347744862738026, "brier_cal": 0.001318330483423756, "climatology_brier": 0.016929523169715754, "flat_brier": 0.0, "skill": 0.9221283157116887, "auc": null}, {"company": "Anglian Water", "n": 3657, "sites": 135, "base_rate": 0.019141372709871478, "n_spill_days": 70, "mean_forecast": 0.006619996814744069, "brier_cal": 0.01890698960913128, "climatology_brier": 0.02368690279007987, "flat_brier": 0.018774980560653264, "skill": 0.20179561774325472, "auc": 0.6195686805527898}, {"company": "Yorkshire Water", "n": 3526, "sites": 120, "base_rate": 0.019852524106636415, "n_spill_days": 70, "mean_forecast": 0.029406785360626887, "brier_cal": 0.018311228946293796, "climatology_brier": 0.0332050008588762, "flat_brier": 0.01945840139323183, "skill": 0.44854002491618883, "auc": 0.8669456845238095}, {"company": "United Utilities", "n": 3367, "sites": 133, "base_rate": 0.1188001188001188, "n_spill_days": 400, "mean_forecast": 0.13005326742554846, "brier_cal": 0.09440129549887287, "climatology_brier": 0.11090299618590652, "flat_brier": 0.10468665057319648, "skill": 0.14879400245753394, "auc": 0.7981656555443208}, {"company": "Severn Trent Water", "n": 3002, "sites": 103, "base_rate": 0.03664223850766156, "n_spill_days": 110, "mean_forecast": 0.025511453020110895, "brier_cal": 0.03394327158083446, "climatology_brier": 0.042208737323544375, "flat_brier": 0.0352995848648092, "skill": 0.19582357272031847, "auc": 0.834650446372438}, {"company": "Southern Water", "n": 2206, "sites": 117, "base_rate": 0.0, "n_spill_days": 0, "mean_forecast": 0.018918096523714376, "brier_cal": 0.0024389447508806087, "climatology_brier": 0.010216341533096059, "flat_brier": 0.0, "skill": 0.7612702411152178, "auc": null}, {"company": "Northumbrian Water", "n": 246, "sites": 14, "base_rate": 0.04065040650406504, "n_spill_days": 10, "mean_forecast": 0.015461704115956166, "brier_cal": 0.036794984983540086, "climatology_brier": 0.03891557190647679, "flat_brier": 0.03899795095511932, "skill": 0.05449198917166043, "auc": 0.7235169491525424}], "by_week": [{"week": "2026-09-28", "n": 28375, "base_rate": 0.02590308370044053, "brier_cal": 0.022931024768310118}], "n_rain_unlogged": 9617, "by_rain": [{"band": "under 1 mm", "n": 13351, "base_rate": 0.007639877162759344, "mean_forecast": 0.006573395280787112, "brier_cal": 0.007150031405390531}, {"band": "1-5 mm", "n": 3844, "base_rate": 0.02029136316337149, "mean_forecast": 0.04389658578664968, "brier_cal": 0.01991512799726138}, {"band": "5-10 mm", "n": 1061, "base_rate": 0.11310084825636192, "mean_forecast": 0.13276364802875523, "brier_cal": 0.10706494850259}, {"band": "10 mm or more", "n": 502, "base_rate": 0.3466135458167331, "mean_forecast": 0.3012614578809266, "brier_cal": 0.1931006301544556}], "reliability": [{"n": 25906, "forecast": 0.0118, "observed": 0.0126, "lo": 0.0, "hi": 0.1}, {"n": 1292, "forecast": 0.141, "observed": 0.0967, "lo": 0.1, "hi": 0.2}, {"n": 547, "forecast": 0.2409, "observed": 0.117, "lo": 0.2, "hi": 0.3}, {"n": 256, "forecast": 0.3467, "observed": 0.2617, "lo": 0.3, "hi": 0.4}, {"n": 135, "forecast": 0.4456, "observed": 0.2667, "lo": 0.4, "hi": 0.5}, {"n": 81, "forecast": 0.5468, "observed": 0.4815, "lo": 0.5, "hi": 0.6}, {"n": 55, "forecast": 0.6493, "observed": 0.5636, "lo": 0.6, "hi": 0.7}, {"n": 63, "forecast": 0.7581, "observed": 0.3968, "lo": 0.7, "hi": 0.8}, {"n": 40, "forecast": 0.826, "observed": 0.55, "lo": 0.8, "hi": 0.9}], "ecoli_live": {"n_forecasts": 8334, "n_scored": 145, "rule": "latest forecast issued before the sample time, per lead", "samples": {"checked_at": "2026-10-05T03:12:33+01:00", "n_sites": 38, "n_failed": 0, "all_failed": false, "last_ok_at": "2026-10-05T03:12:33+01:00", "n_samples": 704, "sources": {"bathing_water": {"answered": 0, "errors": {"HTTP 403": 1}, "refused": true}, "archive": {"answered": 38, "error": null, "n_samples": 704}}}, "n_issued_after_sample": 153, "n_samples": 36, "n_sites": 26, "overall": {"brier": 0.11077302995916026, "base_rate": 0.10344827586206896, "climatology_brier": 0.10749509034482758, "auc": 0.5089743589743589}, "warning_table": {"warn_at": 0.25, "level": "high", "unit": "sample", "kind": "river", "n": 25, "hits": 0, "misses": 2, "false_alarms": 3, "quiet_correct": 20, "hit_rate": 0.0, "warnings_true": 0.0, "share_correct": 0.8, "always_no_correct": 0.92, "base_rate": 0.08, "warning_lift": 0.0, "n_sites": 16, "n_lake_samples_left_out": 11, "leads": {"0": 25}, "first_day": "2026-09-16", "last_day": "2026-09-25", "too_few_to_judge": true}, "by_lead": [{"lead": 0, "n": 36, "base_rate": 0.08333333333333333, "same_day": true, "brier": 0.0867495098593765, "climatology_brier": 0.09055431249999997}, {"lead": 1, "n": 36, "base_rate": 0.08333333333333333, "same_day": false, "brier": 0.08888449423444943, "climatology_brier": 0.09055431249999997}, {"lead": 2, "n": 31, "base_rate": 0.0967741935483871, "same_day": false, "brier": 0.11065960539025618, "climatology_brier": 0.10357277548387095}, {"lead": 3, "n": 23, "base_rate": 0.13043478260869565, "same_day": false, "brier": 0.14369736402088235, "climatology_brier": 0.13136779130434778}, {"lead": 4, "n": 19, "base_rate": 0.15789473684210525, "same_day": false, "brier": 0.15809358195380374, "climatology_brier": 0.14919275578947366}], "in_advance": {"n": 109, "brier": 0.11870740357009804, "base_rate": 0.11009174311926606, "climatology_brier": 0.11309020963302747, "auc": 0.5120274914089347}, "by_version": [{"version": "unstamped (stamps begin 2026-09-28)", "n": 145, "base_rate": 0.10344827586206896, "brier": 0.11077302995916026}], "recent": [{"site": "Friars Meadow, River Stour", "kind": "river", "day": "2026-09-25", "lead": 0, "forecast": 0.101, "rain_48h": 0.0, "ecoli": 82}, {"site": "Sandy Lane, Chester", "kind": "river", "day": "2026-09-25", "lead": 0, "forecast": 0.212, "rain_48h": 1.3, "ecoli": 240}, {"site": "Wharfe at Wilderness Carpark", "kind": "river", "day": "2026-09-24", "lead": 0, "forecast": 0.213, "rain_48h": 0.1, "ecoli": 250}, {"site": "Nidd at the Lido, Knaresborough", "kind": "river", "day": "2026-09-24", "lead": 0, "forecast": 0.202, "rain_48h": 0.0, "ecoli": 3900}, {"site": "Wharfe at Cromwheel, Ilkley", "kind": "river", "day": "2026-09-24", "lead": 0, "forecast": 0.306, "rain_48h": 1.1, "ecoli": 380}, {"site": "Sheep's Green, River Cam", "kind": "river", "day": "2026-09-24", "lead": 0, "forecast": 0.125, "rain_48h": 0.0, "ecoli": 280}, {"site": "Rutland Water Whitwell Creek", "kind": "lake", "day": "2026-09-24", "lead": 0, "forecast": 0.025, "rain_48h": 1.7, "ecoli": 10}, {"site": "Rutland Water Sykes Lane", "kind": "lake", "day": "2026-09-24", "lead": 0, "forecast": 0.025, "rain_48h": 1.7, "ecoli": 3800}, {"site": "Wallingford Beach, River Thames", "kind": "river", "day": "2026-09-23", "lead": 0, "forecast": 0.088, "rain_48h": 0.0, "ecoli": 270}, {"site": "Wolvercote Mill Stream", "kind": "river", "day": "2026-09-23", "lead": 0, "forecast": 0.119, "rain_48h": 0.0, "ecoli": 300}, {"site": "Colwick Country Park (West Lake)", "kind": "lake", "day": "2026-09-23", "lead": 0, "forecast": 0.027, "rain_48h": 0.7, "ecoli": 82}, {"site": "Pangbourne Meadow, River Thames", "kind": "river", "day": "2026-09-23", "lead": 0, "forecast": 0.087, "rain_48h": 0.0, "ecoli": 150}, {"site": "River Severn in Shrewsbury", "kind": "river", "day": "2026-09-22", "lead": 0, "forecast": 0.199, "rain_48h": 0.0, "ecoli": 400}, {"site": "River Avon at Fordingbridge", "kind": "river", "day": "2026-09-22", "lead": 0, "forecast": 0.157, "rain_48h": 0.0, "ecoli": 530}, {"site": "Falcon Meadow, River Waveney", "kind": "river", "day": "2026-09-22", "lead": 0, "forecast": 0.147, "rain_48h": 0.0, "ecoli": 91}, {"site": "River Teme in Ludlow", "kind": "river", "day": "2026-09-22", "lead": 0, "forecast": 0.104, "rain_48h": 0.0, "ecoli": 160}, {"site": "River Avon at Queen Elizabeth Gardens", "kind": "river", "day": "2026-09-22", "lead": 0, "forecast": 0.134, "rain_48h": 0.0, "ecoli": 1400}, {"site": "River Severn at Ironbridge", "kind": "river", "day": "2026-09-22", "lead": 0, "forecast": 0.118, "rain_48h": 0.0, "ecoli": 450}, {"site": "Swale above Richmond Falls", "kind": "river", "day": "2026-09-22", "lead": 0, "forecast": 0.175, "rain_48h": 0.0, "ecoli": 330}, {"site": "Wolvercote Mill Stream", "kind": "river", "day": "2026-09-18", "lead": 0, "forecast": 0.13, "rain_48h": 0.3, "ecoli": 430}, {"site": "Wallingford Beach, River Thames", "kind": "river", "day": "2026-09-18", "lead": 0, "forecast": 0.103, "rain_48h": 0.4, "ecoli": 290}, {"site": "Pangbourne Meadow, River Thames", "kind": "river", "day": "2026-09-18", "lead": 0, "forecast": 0.119, "rain_48h": 0.7, "ecoli": 110}, {"site": "Sheep's Green, River Cam", "kind": "river", "day": "2026-09-18", "lead": 0, "forecast": 0.135, "rain_48h": 0.1, "ecoli": 480}, {"site": "Windermere, Lakeside YMCA", "kind": "lake", "day": "2026-09-17", "lead": 0, "forecast": 0.026, "rain_48h": 8.5, "ecoli": 18}, {"site": "Windermere, Fellfoot", "kind": "lake", "day": "2026-09-17", "lead": 0, "forecast": 0.021, "rain_48h": 8.5, "ecoli": 18}, {"site": "Windermere, Rayrigg Meadow", "kind": "lake", "day": "2026-09-17", "lead": 0, "forecast": 0.034, "rain_48h": 8.3, "ecoli": 18}, {"site": "River Severn in Shrewsbury", "kind": "river", "day": "2026-09-17", "lead": 0, "forecast": 0.305, "rain_48h": 0.6, "ecoli": 210}, {"site": "Windermere, Millerground Landing", "kind": "lake", "day": "2026-09-17", "lead": 0, "forecast": 0.033, "rain_48h": 8.3, "ecoli": 27}, {"site": "River Severn at Ironbridge", "kind": "river", "day": "2026-09-17", "lead": 0, "forecast": 0.212, "rain_48h": 1.2, "ecoli": 180}, {"site": "Swale above Richmond Falls", "kind": "river", "day": "2026-09-17", "lead": 0, "forecast": 0.366, "rain_48h": 1.5, "ecoli": 600}]}, "scored_csv": {"file": "verification_live.csv", "rows": 28375, "columns": ["overflow_id", "company", "day", "lead", "issued_at", "forecast_raw", "forecast_calibrated", "climatology", "observed"]}}, "holdout": [{"model": "dipcast (pooled + site offsets)", "brier": 0.0445, "log_loss": 0.1531, "auc": 0.9296, "base_rate": 0.0745, "n": 826725, "brier_skill_vs_clim": 0.3347}, {"model": "pooled only", "brier": 0.0452, "log_loss": 0.1555, "auc": 0.9269, "base_rate": 0.0745, "n": 826725, "brier_skill_vs_clim": 0.3252}, {"model": "climatology (site rate)", "brier": 0.0669, "log_loss": 0.2455, "auc": 0.7679, "base_rate": 0.0745, "n": 826725, "brier_skill_vs_clim": 0.0}, {"model": "rain rule (>10mm/48h)", "brier": 0.0621, "log_loss": 0.2238, "auc": 0.7582, "base_rate": 0.0745, "n": 826725, "brier_skill_vs_clim": 0.0715}, {"model": "rain rule (>5mm/48h)", "brier": 0.0633, "log_loss": 0.2214, "auc": 0.7688, "base_rate": 0.0745, "n": 826725, "brier_skill_vs_clim": 0.0548}], "leads": [{"source": "reanalysis (upper bound)", "brier": 0.0447, "log_loss": 0.1537, "auc": 0.9287, "base_rate": 0.0744, "n": 828550, "brier_skill_vs_clim": 0.3317}, {"source": "forecast lead 0", "brier": 0.0429, "log_loss": 0.1484, "auc": 0.9328, "base_rate": 0.0744, "n": 828550, "brier_skill_vs_clim": 0.3583}, {"source": "forecast lead 0, Platt-calibrated", "brier": 0.0429, "log_loss": 0.1483, "auc": 0.9328, "base_rate": 0.0744, "n": 828550, "brier_skill_vs_clim": 0.358}, {"source": "forecast lead 0, isotonic-calibrated", "brier": 0.0429, "log_loss": 0.1477, "auc": 0.9328, "base_rate": 0.0744, "n": 828550, "brier_skill_vs_clim": 0.3593}, {"source": "forecast lead 0, isotonic cross-fitted (odd/even months)", "brier": 0.0429, "log_loss": 0.1479, "auc": 0.9324, "base_rate": 0.0744, "n": 828550, "brier_skill_vs_clim": 0.3587}, {"source": "forecast lead 1", "brier": 0.0469, "log_loss": 0.1639, "auc": 0.9128, "base_rate": 0.0744, "n": 828550, "brier_skill_vs_clim": 0.2993}, {"source": "forecast lead 1, Platt-calibrated", "brier": 0.0467, "log_loss": 0.1635, "auc": 0.9128, "base_rate": 0.0744, "n": 828550, "brier_skill_vs_clim": 0.3016}, {"source": "forecast lead 1, isotonic-calibrated", "brier": 0.0467, "log_loss": 0.163, "auc": 0.9128, "base_rate": 0.0744, "n": 828550, "brier_skill_vs_clim": 0.3023}, {"source": "forecast lead 1, isotonic cross-fitted (odd/even months)", "brier": 0.0468, "log_loss": 0.1643, "auc": 0.9102, "base_rate": 0.0744, "n": 828550, "brier_skill_vs_clim": 0.3001}, {"source": "forecast lead 2", "brier": 0.0484, "log_loss": 0.1665, "auc": 0.9129, "base_rate": 0.0744, "n": 828550, "brier_skill_vs_clim": 0.277}, {"source": "forecast lead 2, Platt-calibrated", "brier": 0.0479, "log_loss": 0.1656, "auc": 0.9129, "base_rate": 0.0744, "n": 828550, "brier_skill_vs_clim": 0.2839}, {"source": "forecast lead 2, isotonic-calibrated", "brier": 0.0478, "log_loss": 0.1648, "auc": 0.9129, "base_rate": 0.0744, "n": 828550, "brier_skill_vs_clim": 0.2855}, {"source": "forecast lead 2, isotonic cross-fitted (odd/even months)", "brier": 0.048, "log_loss": 0.1664, "auc": 0.9102, "base_rate": 0.0744, "n": 828550, "brier_skill_vs_clim": 0.2818}, {"source": "forecast lead 3", "brier": 0.0504, "log_loss": 0.1746, "auc": 0.9016, "base_rate": 0.0744, "n": 828550, "brier_skill_vs_clim": 0.2461}, {"source": "forecast lead 3, Platt-calibrated", "brier": 0.0498, "log_loss": 0.1731, "auc": 0.9016, "base_rate": 0.0744, "n": 828550, "brier_skill_vs_clim": 0.256}, {"source": "forecast lead 3, isotonic-calibrated", "brier": 0.0497, "log_loss": 0.1724, "auc": 0.9016, "base_rate": 0.0744, "n": 828550, "brier_skill_vs_clim": 0.2575}, {"source": "forecast lead 3, isotonic cross-fitted (odd/even months)", "brier": 0.0501, "log_loss": 0.1747, "auc": 0.8976, "base_rate": 0.0744, "n": 828550, "brier_skill_vs_clim": 0.2509}, {"source": "forecast lead 4", "brier": 0.0536, "log_loss": 0.1838, "auc": 0.8923, "base_rate": 0.0744, "n": 828550, "brier_skill_vs_clim": 0.1981}, {"source": "forecast lead 4, Platt-calibrated", "brier": 0.0524, "log_loss": 0.1811, "auc": 0.8923, "base_rate": 0.0744, "n": 828550, "brier_skill_vs_clim": 0.2175}, {"source": "forecast lead 4, isotonic-calibrated", "brier": 0.0522, "log_loss": 0.1797, "auc": 0.8923, "base_rate": 0.0744, "n": 828550, "brier_skill_vs_clim": 0.2205}, {"source": "forecast lead 4, isotonic cross-fitted (odd/even months)", "brier": 0.0528, "log_loss": 0.1819, "auc": 0.8891, "base_rate": 0.0744, "n": 828550, "brier_skill_vs_clim": 0.2115}], "reliability": [{"n": 666813, "forecast": 0.0183, "observed": 0.0138, "lo": 0.0, "hi": 0.1}, {"n": 58032, "forecast": 0.1425, "observed": 0.1366, "lo": 0.1, "hi": 0.2}, {"n": 28480, "forecast": 0.2455, "observed": 0.2308, "lo": 0.2, "hi": 0.3}, {"n": 18298, "forecast": 0.3474, "observed": 0.3104, "lo": 0.3, "hi": 0.4}, {"n": 13504, "forecast": 0.4481, "observed": 0.3926, "lo": 0.4, "hi": 0.5}, {"n": 10782, "forecast": 0.5487, "observed": 0.4864, "lo": 0.5, "hi": 0.6}, {"n": 9430, "forecast": 0.6493, "observed": 0.5838, "lo": 0.6, "hi": 0.7}, {"n": 8968, "forecast": 0.7496, "observed": 0.6852, "lo": 0.7, "hi": 0.8}, {"n": 8311, "forecast": 0.8491, "observed": 0.789, "lo": 0.8, "hi": 0.9}, {"n": 4107, "forecast": 0.9341, "observed": 0.8503, "lo": 0.9, "hi": 1.0}], "lead_calibration": {"fitted_on": 2025, "model": "United Utilities 2023-2024; verified on 2025", "method": "isotonic", "leads": {"0": {"a": -0.020682024380464077, "b": 1.019490805500446, "brier_before": 0.0429270120062855, "brier_after": 0.04294684084747683, "iso_x": [0.0, 9e-05, 0.00092, 0.00138, 0.00181, 0.0022, 0.00258, 0.00294, 0.00331, 0.0037, 0.00409, 0.0045, 0.00494, 0.00541, 0.00592, 0.00648, 0.00709, 0.00777, 0.00854, 0.00941, 0.01041, 0.01157, 0.01294, 0.01459, 0.01657, 0.01893, 0.02182, 0.02544, 0.02986, 0.03535, 0.04219, 0.05104, 0.06252, 0.07763, 0.09796, 0.12614, 0.16705, 0.22767, 0.32108, 0.46975, 0.5, 0.55, 0.6, 0.65, 0.68945, 0.7, 0.75, 0.8, 0.85, 0.9, 0.95, 0.99296, 1.0], "iso_y": [0.001, 0.001, 0.001, 0.001, 0.00135, 0.00135, 0.00135, 0.00179, 0.00182, 0.00182, 0.00207, 0.00221, 0.00221, 0.00286, 0.00301, 0.00301, 0.00401, 0.00449, 0.00483, 0.00672, 0.00676, 0.00776, 0.0092, 0.01069, 0.0109, 0.01282, 0.0167, 0.02033, 0.02422, 0.03607, 0.04241, 0.0508, 0.06314, 0.08383, 0.10817, 0.14096, 0.18252, 0.23339, 0.33737, 0.44953, 0.48186, 0.54981, 0.57864, 0.63285, 0.6638, 0.6638, 0.72841, 0.78681, 0.83204, 0.84807, 0.85678, 0.99, 0.99], "brier_isotonic": 0.04286002749078871, "brier_isotonic_crossfit": 0.042904626475140775}, "1": {"a": -0.1244139975729273, "b": 0.9215397343497693, "brier_before": 0.046878991162230606, "brier_after": 0.04672123189677642, "iso_x": [0.0, 9e-05, 0.00092, 0.00139, 0.00182, 0.00222, 0.0026, 0.00297, 0.00334, 0.00373, 0.00413, 0.00454, 0.00499, 0.00547, 0.00599, 0.00656, 0.00719, 0.00789, 0.00867, 0.00956, 0.01058, 0.01176, 0.01315, 0.01482, 0.01681, 0.01919, 0.02207, 0.02562, 0.02998, 0.03538, 0.04218, 0.05077, 0.06173, 0.07656, 0.09618, 0.12354, 0.16288, 0.22085, 0.30873, 0.44743, 0.5, 0.55, 0.6, 0.65, 0.66303, 0.7, 0.75, 0.8, 0.85, 0.9, 0.95, 0.99129, 1.0], "iso_y": [0.001, 0.001, 0.001, 0.001, 0.00129, 0.0017, 0.00171, 0.00225, 0.00225, 0.00241, 0.00241, 0.00331, 0.00489, 0.00524, 0.00568, 0.00568, 0.00721, 0.00722, 0.0073, 0.00996, 0.01021, 0.01322, 0.01696, 0.01776, 0.0205, 0.0218, 0.02975, 0.03195, 0.03856, 0.04392, 0.04638, 0.06261, 0.0766, 0.08745, 0.10945, 0.14028, 0.17328, 0.22584, 0.2926, 0.40718, 0.44972, 0.50888, 0.544, 0.58154, 0.6085, 0.62828, 0.68596, 0.74083, 0.79456, 0.82682, 0.83964, 0.99, 0.99], "brier_isotonic": 0.0466735986113799, "brier_isotonic_crossfit": 0.04682349647209602}, "2": {"a": -0.2460835100748993, "b": 0.9015187225811924, "brier_before": 0.048367632204485346, "brier_after": 0.04790819820998137, "iso_x": [0.0, 9e-05, 0.00093, 0.00141, 0.00186, 0.00227, 0.00266, 0.00304, 0.00343, 0.00382, 0.00424, 0.00467, 0.00513, 0.00563, 0.00618, 0.00677, 0.00742, 0.00816, 0.00898, 0.00992, 0.01101, 0.01227, 0.01376, 0.01553, 0.01765, 0.02021, 0.02339, 0.02734, 0.03225, 0.03837, 0.0461, 0.05594, 0.0687, 0.08529, 0.10759, 0.13838, 0.18178, 0.24419, 0.33703, 0.4776, 0.5, 0.55, 0.6, 0.65, 0.67691, 0.7, 0.75, 0.8, 0.85, 0.9, 0.95, 0.99216, 1.0], "iso_y": [0.001, 0.001, 0.001, 0.001, 0.00121, 0.00173, 0.00228, 0.00228, 0.00235, 0.00235, 0.00235, 0.00235, 0.00312, 0.00367, 0.00367, 0.00473, 0.0059, 0.00651, 0.00808, 0.00891, 0.00891, 0.01035, 0.01384, 0.01675, 0.01874, 0.02016, 0.02493, 0.03413, 0.0383, 0.04248, 0.05163, 0.06704, 0.08166, 0.09946, 0.11892, 0.16, 0.19137, 0.22827, 0.29956, 0.39303, 0.42656, 0.46388, 0.50487, 0.55989, 0.57056, 0.59216, 0.65149, 0.6955, 0.77298, 0.80924, 0.8348, 0.99, 0.99], "brier_isotonic": 0.04780005510869846, "brier_isotonic_crossfit": 0.04804725699014227}, "3": {"a": -0.28885601268444266, "b": 0.8644444093406107, "brier_before": 0.05043903416717642, "brier_after": 0.04977352521995758, "iso_x": [0.0, 9e-05, 0.00094, 0.00143, 0.00188, 0.0023, 0.00269, 0.00308, 0.00348, 0.00388, 0.0043, 0.00474, 0.00522, 0.00572, 0.00628, 0.00688, 0.00755, 0.0083, 0.00913, 0.01009, 0.01121, 0.01249, 0.01402, 0.01585, 0.01802, 0.02067, 0.02397, 0.02803, 0.03304, 0.0393, 0.04731, 0.05743, 0.07036, 0.08752, 0.10987, 0.14067, 0.18334, 0.24348, 0.33158, 0.46243, 0.5, 0.55, 0.6, 0.65, 0.65765, 0.7, 0.75, 0.8, 0.85, 0.9, 0.95, 0.99364, 1.0], "iso_y": [0.001, 0.001, 0.001, 0.0012, 0.00162, 0.00211, 0.00211, 0.00288, 0.00288, 0.00288, 0.00362, 0.00362, 0.00417, 0.00501, 0.00501, 0.00586, 0.00766, 0.00849, 0.00898, 0.01058, 0.01149, 0.01394, 0.01599, 0.0201, 0.02271, 0.02529, 0.03069, 0.04012, 0.045, 0.05452, 0.05899, 0.07091, 0.08476, 0.11091, 0.1269, 0.1477, 0.18974, 0.228, 0.28487, 0.36759, 0.40568, 0.42593, 0.48682, 0.53137, 0.53137, 0.58333, 0.65808, 0.68629, 0.75943, 0.81279, 0.82857, 0.99, 0.99], "brier_isotonic": 0.049676565471283046, "brier_isotonic_crossfit": 0.05011183768180039}, "4": {"a": -0.3901063793035828, "b": 0.8203308374231617, "brier_before": 0.053644684955621295, "brier_after": 0.05235036933490348, "iso_x": [0.0, 9e-05, 0.00096, 0.00146, 0.00192, 0.00235, 0.00276, 0.00316, 0.00357, 0.004, 0.00444, 0.0049, 0.00541, 0.00595, 0.00655, 0.0072, 0.00792, 0.00873, 0.00964, 0.0107, 0.01192, 0.01335, 0.01504, 0.01709, 0.01951, 0.02244, 0.02602, 0.0304, 0.03586, 0.04253, 0.05082, 0.06152, 0.07519, 0.09274, 0.11623, 0.14763, 0.19163, 0.25303, 0.33983, 0.46628, 0.5, 0.55, 0.6, 0.65, 0.65196, 0.7, 0.75, 0.8, 0.85, 0.9, 0.95, 0.99256, 1.0], "iso_y": [0.001, 0.001, 0.001, 0.001, 0.0015, 0.0015, 0.00221, 0.00227, 0.00274, 0.00297, 0.00312, 0.00312, 0.00426, 0.00528, 0.00528, 0.00588, 0.00719, 0.00824, 0.00909, 0.01236, 0.0135, 0.0167, 0.02034, 0.02145, 0.0241, 0.02818, 0.03332, 0.04263, 0.05086, 0.05743, 0.07367, 0.08645, 0.09995, 0.11795, 0.14109, 0.15953, 0.2058, 0.23718, 0.27554, 0.34291, 0.38091, 0.39183, 0.43313, 0.48081, 0.48081, 0.50997, 0.57273, 0.63987, 0.71319, 0.77988, 0.79611, 0.99, 0.99], "brier_isotonic": 0.05215004760654858, "brier_isotonic_crossfit": 0.052753140471546306}}}, "ecoli": {"all_sites": [{"predictor": "rain_24h", "n": 1750, "sites": 32, "spearman_pooled": 0.0882, "spearman_within_site": 0.2931, "auc_gt500": 0.5924, "rate_gt500": 0.2097, "auc_gt900": 0.6197, "rate_gt900": 0.1246}, {"predictor": "rain_48h", "n": 1750, "sites": 32, "spearman_pooled": 0.0938, "spearman_within_site": 0.3542, "auc_gt500": 0.6112, "rate_gt500": 0.2097, "auc_gt900": 0.6537, "rate_gt900": 0.1246}, {"predictor": "risk_model", "n": 1750, "sites": 32, "spearman_pooled": 0.5722, "spearman_within_site": 0.2925, "auc_gt500": 0.7933, "rate_gt500": 0.2097, "auc_gt900": 0.7967, "rate_gt900": 0.1246}], "river": [{"predictor": "rain_48h", "n": 947, "sites": 20, "spearman_pooled": 0.4283, "spearman_within_site": 0.4749, "auc_gt500": 0.7254, "rate_gt500": 0.3527, "auc_gt900": 0.749, "rate_gt900": 0.2133}, {"predictor": "risk_model", "n": 947, "sites": 20, "spearman_pooled": 0.4769, "spearman_within_site": 0.407, "auc_gt500": 0.7459, "rate_gt500": 0.3527, "auc_gt900": 0.7472, "rate_gt900": 0.2133}], "lake": [{"predictor": "rain_48h", "n": 803, "sites": 12, "spearman_pooled": 0.2577, "spearman_within_site": 0.2675, "auc_gt500": 0.5712, "rate_gt500": 0.0411, "auc_gt900": 0.5554, "rate_gt900": 0.0199}, {"predictor": "risk_model", "n": 803, "sites": 12, "spearman_pooled": 0.283, "spearman_within_site": 0.2133, "auc_gt500": 0.6155, "rate_gt500": 0.0411, "auc_gt900": 0.6016, "rate_gt900": 0.0199}], "uu_observed": [{"predictor": "rain_48h", "n": 601, "sites": 9, "spearman_pooled": 0.2963, "spearman_within_site": 0.3976, "auc_gt500": 0.6438, "rate_gt500": 0.0998, "auc_gt900": 0.6241, "rate_gt900": 0.0682}, {"predictor": "risk_model", "n": 601, "sites": 9, "spearman_pooled": 0.5138, "spearman_within_site": 0.3976, "auc_gt500": 0.8336, "rate_gt500": 0.0998, "auc_gt900": 0.8155, "rate_gt900": 0.0682}, {"predictor": "risk_observed", "n": 601, "sites": 9, "spearman_pooled": 0.2227, "spearman_within_site": 0.2269, "auc_gt500": 0.625, "rate_gt500": 0.0998, "auc_gt900": 0.6145, "rate_gt900": 0.0682}], "n_samples": 2165, "n_sites": 38, "period": ["2023-05-03", "2026-09-07"]}, "ecoli_combined": {"n_samples": 1750, "sites": 32, "between_site_rho_risk": 0.684, "between_site_rho_rain": -0.246, "loyo_within_site": {"rain only": {"n": 1648, "rho_within": 0.347, "rmse": 0.464, "auc_gt900": 0.863}, "spill risk only": {"n": 1648, "rho_within": 0.363, "rmse": 0.459, "auc_gt900": 0.865}, "rain + spill risk": {"n": 1648, "rho_within": 0.37, "rmse": 0.458, "auc_gt900": 0.869}, "rain + spill risk + season": {"n": 1648, "rho_within": 0.389, "rmse": 0.455, "auc_gt900": 0.867}}, "loyo_within_site_river": {"rain only": {"n": 845, "rho_within": 0.504, "rmse": 0.416, "auc_gt900": 0.784}, "spill risk only": {"n": 845, "rho_within": 0.509, "rmse": 0.416, "auc_gt900": 0.775}, "rain + spill risk": {"n": 845, "rho_within": 0.526, "rmse": 0.412, "auc_gt900": 0.785}, "rain + spill risk + season": {"n": 845, "rho_within": 0.53, "rmse": 0.411, "auc_gt900": 0.789}}, "loyo_within_site_lake": {"rain only": {"n": 803, "rho_within": 0.179, "rmse": 0.497, "auc_gt900": 0.917}, "spill risk only": {"n": 803, "rho_within": 0.215, "rmse": 0.495, "auc_gt900": 0.925}, "rain + spill risk": {"n": 803, "rho_within": 0.168, "rmse": 0.499, "auc_gt900": 0.917}, "rain + spill risk + season": {"n": 803, "rho_within": 0.295, "rmse": 0.485, "auc_gt900": 0.927}}, "coef_lrain48_lrain24_logitrisk": [0.099, -0.014, 0.092]}, "ecoli_model": {"n_samples": 1548, "n_sites": 32, "threshold": 900, "base_rate": 0.13695090439276486, "base_rate_by_type": {"river": 0.2161, "lake": 0.025}, "years": [2024, 2025, 2026], "row_counts": {"samples_with_upstream": 1750, "dropped_missing_forecast_rain": 202, "dropped_missing_replayed_exposure": 0, "by_year_before": {"2023": 202, "2024": 520, "2025": 508, "2026": 520}, "by_year_after": {"2023": 0, "2024": 520, "2025": 508, "2026": 520}, "by_lead_rain_available": {"0": 1750, "1": 1548, "2": 1548, "3": 1548, "4": 1548}, "by_lead_exposure_available": {"0": 1750, "1": 1630, "2": 1548, "3": 1548, "4": 1548}, "availability": {"0": {"all": 1.0, "wet_days": 1.0, "exceedance_days": 1.0, "rain_window_complete": 1.0}, "1": {"all": 0.9314285714285714, "wet_days": 0.9455040871934605, "exceedance_days": 0.9724770642201835, "rain_window_complete": 0.8845714285714286}, "2": {"all": 0.8845714285714286, "wet_days": 0.9046321525885559, "exceedance_days": 0.9724770642201835, "rain_window_complete": 0.8845714285714286}, "3": {"all": 0.8845714285714286, "wet_days": 0.9046321525885559, "exceedance_days": 0.9724770642201835, "rain_window_complete": 0.8845714285714286}, "4": {"all": 0.8845714285714286, "wet_days": 0.9046321525885559, "exceedance_days": 0.9724770642201835, "rain_window_complete": 0.8845714285714286}}, "max_missing_share": 0.1}, "exposure_replayed": true, "loyo": [{"model": "climatology by type", "brier": 0.1162, "log_loss": 0.377, "auc": 0.6199, "n": 1548.0, "skill_vs_clim": 0.0, "brier_river": 0.181, "auc_river": 0.3539, "brier_lake": 0.0245, "auc_lake": 0.3747}, {"model": "rain only", "brier": 0.0934, "log_loss": 0.3186, "auc": 0.796, "n": 1548.0, "skill_vs_clim": 0.1961, "brier_river": 0.1421, "auc_river": 0.7135, "brier_lake": 0.0246, "auc_lake": 0.3518}, {"model": "rain + season", "brier": 0.094, "log_loss": 0.3175, "auc": 0.8029, "n": 1548.0, "skill_vs_clim": 0.1912, "brier_river": 0.1431, "auc_river": 0.7256, "brier_lake": 0.0246, "auc_lake": 0.3797}, {"model": "spill exposure only", "brier": 0.0968, "log_loss": 0.3245, "auc": 0.8014, "n": 1548.0, "skill_vs_clim": 0.1674, "brier_river": 0.1465, "auc_river": 0.7219, "brier_lake": 0.0264, "auc_lake": 0.5084}, {"model": "rain + spill exposure", "brier": 0.0903, "log_loss": 0.3099, "auc": 0.8116, "n": 1548.0, "skill_vs_clim": 0.2227, "brier_river": 0.1366, "auc_river": 0.7436, "brier_lake": 0.0248, "auc_lake": 0.4499}, {"model": "rain + spill exposure + season (dipcast)", "brier": 0.0908, "log_loss": 0.3094, "auc": 0.8152, "n": 1548.0, "skill_vs_clim": 0.2185, "brier_river": 0.1375, "auc_river": 0.7491, "brier_lake": 0.0248, "auc_lake": 0.4664}], "loso": [{"model": "climatology by type", "brier": 0.1116, "log_loss": 0.3701, "auc": 0.5561, "n": 1548.0, "skill_vs_clim": 0.0, "brier_river": 0.1727, "auc_river": 0.2459, "brier_lake": 0.025, "auc_lake": 0.0747}, {"model": "rain only", "brier": 0.0922, "log_loss": 0.3224, "auc": 0.789, "n": 1548.0, "skill_vs_clim": 0.1737, "brier_river": 0.1396, "auc_river": 0.7203, "brier_lake": 0.0251, "auc_lake": 0.0594}, {"model": "rain + season", "brier": 0.0926, "log_loss": 0.3222, "auc": 0.7998, "n": 1548.0, "skill_vs_clim": 0.1703, "brier_river": 0.1402, "auc_river": 0.7385, "brier_lake": 0.0251, "auc_lake": 0.1102}, {"model": "spill exposure only", "brier": 0.0961, "log_loss": 0.3297, "auc": 0.8038, "n": 1548.0, "skill_vs_clim": 0.1383, "brier_river": 0.1437, "auc_river": 0.7454, "brier_lake": 0.0288, "auc_lake": 0.3087}, {"model": "rain + spill exposure + season (dipcast)", "brier": 0.0903, "log_loss": 0.3178, "auc": 0.8076, "n": 1548.0, "skill_vs_clim": 0.1903, "brier_river": 0.1358, "auc_river": 0.7607, "brier_lake": 0.026, "auc_lake": 0.1819}], "forward": {"train_years": [2024], "test_years": [2025, 2026], "n_train": 520, "n_test": 1028, "exposure": "spill model fitted 2023-24, uncalibrated", "table": [{"model": "climatology by type", "brier": 0.1138, "log_loss": 0.376, "auc": 0.6553, "n": 1028.0, "skill_vs_clim": 0.0, "brier_river": 0.1689, "auc_river": 0.5, "brier_lake": 0.031, "auc_lake": 0.5}, {"model": "rain only", "brier": 0.0875, "log_loss": 0.3072, "auc": 0.7886, "n": 1028.0, "skill_vs_clim": 0.2309, "brier_river": 0.1252, "auc_river": 0.7655, "brier_lake": 0.0309, "auc_lake": 0.5148}, {"model": "rain + season", "brier": 0.0873, "log_loss": 0.3047, "auc": 0.7984, "n": 1028.0, "skill_vs_clim": 0.2329, "brier_river": 0.1248, "auc_river": 0.7864, "brier_lake": 0.0309, "auc_lake": 0.5029}, {"model": "rain + spill exposure + season (dipcast)", "brier": 0.0826, "log_loss": 0.2941, "auc": 0.8099, "n": 1028.0, "skill_vs_clim": 0.2739, "brier_river": 0.1169, "auc_river": 0.8065, "brier_lake": 0.0311, "auc_lake": 0.5321}], "bootstrap_all": {"n": 1028, "clusters": 925, "brier_ref": 0.0874866870385534, "brier_new": 0.08259763160595986, "brier_gain": 0.004889055432593548, "brier_gain_ci": [0.0017911545725129232, 0.007920908296998987], "p_gain_le_0": 0.001, "auc_ref": 0.7885577440206196, "auc_new": 0.8098572254863161, "auc_gain_ci": [0.0019175290657507033, 0.0427264169944429]}, "bootstrap_rivers": {"n": 617, "clusters": 558, "brier_ref": 0.12519833112904008, "brier_new": 0.11689059296114815, "brier_gain": 0.008307738167891932, "brier_gain_ci": [0.0031387796065520963, 0.01316164390038199], "p_gain_le_0": 0.001, "auc_ref": 0.765520117163663, "auc_new": 0.8065172287539156, "auc_gain_ci": [0.007281421511038644, 0.07871907539286173]}, "bootstrap_rivers_by_site": {"n": 617, "clusters": 20, "brier_ref": 0.12519833112904008, "brier_new": 0.11689059296114815, "brier_gain": 0.008307738167891932, "brier_gain_ci": [0.0018001899605791841, 0.01533960671934901], "p_gain_le_0": 0.0055, "auc_ref": 0.765520117163663, "auc_new": 0.8065172287539156, "auc_gain_ci": [0.008945659219570606, 0.08599259544494008]}, "bootstrap_rivers_by_calendar_week": {"n": 617, "clusters": 40, "brier_ref": 0.12519833112904008, "brier_new": 0.11689059296114815, "brier_gain": 0.008307738167891932, "brier_gain_ci": [-0.00038177478983843904, 0.017719002809642788], "p_gain_le_0": 0.0315, "auc_ref": 0.765520117163663, "auc_new": 0.8065172287539156, "auc_gain_ci": [-0.01472295886010272, 0.1204953207488132]}}, "bootstrap": {"loyo|all|site_week": {"n": 1548, "clusters": 1371, "brier_ref": 0.093422836840032, "brier_new": 0.09082056902868495, "brier_gain": 0.0026022678113470504, "brier_gain_ci": [4.551292599568776e-05, 0.005102836501580471], "p_gain_le_0": 0.022, "auc_ref": 0.7959658513162353, "auc_new": 0.815183312620043, "auc_gain_ci": [0.007493984922304748, 0.030908990398593888]}, "loyo|all|site": {"n": 1548, "clusters": 32, "brier_ref": 0.093422836840032, "brier_new": 0.09082056902868495, "brier_gain": 0.0026022678113470504, "brier_gain_ci": [0.00026010231155291743, 0.005153912891776027], "p_gain_le_0": 0.014, "auc_ref": 0.7959658513162353, "auc_new": 0.815183312620043, "auc_gain_ci": [0.00018898402478099164, 0.04022664780012053]}, "loyo|all|calendar_week": {"n": 1548, "clusters": 63, "brier_ref": 0.093422836840032, "brier_new": 0.09082056902868495, "brier_gain": 0.0026022678113470504, "brier_gain_ci": [-0.001423798745059898, 0.006535014049806283], "p_gain_le_0": 0.1045, "auc_ref": 0.7959658513162353, "auc_new": 0.815183312620043, "auc_gain_ci": [0.002779996298861173, 0.041150335326938785]}, "loyo|rivers|site_week": {"n": 907, "clusters": 805, "brier_ref": 0.14209094160524346, "brier_new": 0.13746856448597772, "brier_gain": 0.004622377119265747, "brier_gain_ci": [0.0003010234150934588, 0.008777731563241617], "p_gain_le_0": 0.017, "auc_ref": 0.713456901748041, "auc_new": 0.7490671374034845, "auc_gain_ci": [0.01409862781632131, 0.06028980593297556]}, "loyo|rivers|site": {"n": 907, "clusters": 20, "brier_ref": 0.14209094160524346, "brier_new": 0.13746856448597772, "brier_gain": 0.004622377119265747, "brier_gain_ci": [0.0008891950545498566, 0.008698293723172325], "p_gain_le_0": 0.006, "auc_ref": 0.713456901748041, "auc_new": 0.7490671374034845, "auc_gain_ci": [0.007246744083436674, 0.07270895992842]}, "loyo|rivers|calendar_week": {"n": 907, "clusters": 62, "brier_ref": 0.14209094160524346, "brier_new": 0.13746856448597772, "brier_gain": 0.004622377119265747, "brier_gain_ci": [-0.0019685192400522144, 0.011636029252353738], "p_gain_le_0": 0.091, "auc_ref": 0.713456901748041, "auc_new": 0.7490671374034845, "auc_gain_ci": [0.003650438721487548, 0.08180968915748778]}, "loyo|lakes|site_week": {"n": 641, "clusters": 566, "brier_ref": 0.02455860747646446, "brier_new": 0.024814747063373645, "brier_gain": -0.0002561395869091834, "brier_gain_ci": [-0.0005773530418574191, 7.159372383401076e-05], "p_gain_le_0": 0.936, "auc_ref": 0.35185, "auc_new": 0.4663999999999999, "auc_gain_ci": [-0.0011470773146312148, 0.24163027659312894]}, "loyo|lakes|site": {"n": 641, "clusters": 12, "brier_ref": 0.02455860747646446, "brier_new": 0.024814747063373645, "brier_gain": -0.0002561395869091834, "brier_gain_ci": [-0.001272133714005693, 0.000318185061819485], "p_gain_le_0": 0.648, "auc_ref": 0.35185, "auc_new": 0.4663999999999999, "auc_gain_ci": [0.011454596736866409, 0.22872305641111715]}, "loyo|lakes|calendar_week": {"n": 641, "clusters": 61, "brier_ref": 0.02455860747646446, "brier_new": 0.024814747063373645, "brier_gain": -0.0002561395869091834, "brier_gain_ci": [-0.0005752729245426782, 6.458368833088154e-05], "p_gain_le_0": 0.9365, "auc_ref": 0.35185, "auc_new": 0.4663999999999999, "auc_gain_ci": [0.0019945456308875444, 0.23648759727561433]}, "loso|all|site_week": {"n": 1548, "clusters": 1371, "brier_ref": 0.09218614775231584, "brier_new": 0.09033559420614815, "brier_gain": 0.0018505535461676992, "brier_gain_ci": [-0.0005016284602952014, 0.004095078364194409], "p_gain_le_0": 0.062, "auc_ref": 0.7890068918766242, "auc_new": 0.807617077166422, "auc_gain_ci": [0.007113127049719475, 0.030874850904263687]}, "loso|all|site": {"n": 1548, "clusters": 32, "brier_ref": 0.09218614775231584, "brier_new": 0.09033559420614815, "brier_gain": 0.0018505535461676992, "brier_gain_ci": [-0.0009140961911960457, 0.004675081089405429], "p_gain_le_0": 0.105, "auc_ref": 0.7890068918766242, "auc_new": 0.807617077166422, "auc_gain_ci": [-0.004621446245045971, 0.04139946570481152]}, "loso|all|calendar_week": {"n": 1548, "clusters": 63, "brier_ref": 0.09218614775231584, "brier_new": 0.09033559420614815, "brier_gain": 0.0018505535461676992, "brier_gain_ci": [-0.0010363312486470135, 0.004940314550758478], "p_gain_le_0": 0.1165, "auc_ref": 0.7890068918766242, "auc_new": 0.807617077166422, "auc_gain_ci": [0.00415616434413196, 0.03774980276244379]}, "loso|rivers|site_week": {"n": 907, "clusters": 805, "brier_ref": 0.13960497069071637, "brier_new": 0.13578613956642693, "brier_gain": 0.0038188311242894346, "brier_gain_ci": [-2.2260230184786837e-05, 0.007713915684023566], "p_gain_le_0": 0.026, "auc_ref": 0.720299090100175, "auc_new": 0.7606992163954189, "auc_gain_ci": [0.01832285318069706, 0.06464396182674108]}, "loso|rivers|site": {"n": 907, "clusters": 20, "brier_ref": 0.13960497069071637, "brier_new": 0.13578613956642693, "brier_gain": 0.0038188311242894346, "brier_gain_ci": [-0.0004753251681071442, 0.008215664650720638], "p_gain_le_0": 0.042, "auc_ref": 0.720299090100175, "auc_new": 0.7606992163954189, "auc_gain_ci": [0.010965075227686102, 0.0774658064358652]}, "loso|rivers|calendar_week": {"n": 907, "clusters": 62, "brier_ref": 0.13960497069071637, "brier_new": 0.13578613956642693, "brier_gain": 0.0038188311242894346, "brier_gain_ci": [-0.0010548558745075078, 0.009051672182719694], "p_gain_le_0": 0.065, "auc_ref": 0.720299090100175, "auc_new": 0.7606992163954189, "auc_gain_ci": [0.010861448051701519, 0.08299807006648591]}, "loso|lakes|site_week": {"n": 641, "clusters": 566, "brier_ref": 0.025089622939321706, "brier_new": 0.026024136106658543, "brier_gain": -0.0009345131673368368, "brier_gain_ci": [-0.001561284576423476, -0.0003959208518851764], "p_gain_le_0": 1.0, "auc_ref": 0.05940000000000001, "auc_new": 0.18189999999999998, "auc_gain_ci": [0.017659214959076304, 0.2393309226738817]}, "loso|lakes|site": {"n": 641, "clusters": 12, "brier_ref": 0.025089622939321706, "brier_new": 0.026024136106658543, "brier_gain": -0.0009345131673368368, "brier_gain_ci": [-0.003414366996266763, 0.00029587138179146765], "p_gain_le_0": 0.6395, "auc_ref": 0.05940000000000001, "auc_new": 0.18189999999999998, "auc_gain_ci": [0.014333980331262928, 0.6771562980030722]}, "loso|lakes|calendar_week": {"n": 641, "clusters": 61, "brier_ref": 0.025089622939321706, "brier_new": 0.026024136106658543, "brier_gain": -0.0009345131673368368, "brier_gain_ci": [-0.0015266189615199097, -0.00047019670236532425], "p_gain_le_0": 1.0, "auc_ref": 0.05940000000000001, "auc_new": 0.18189999999999998, "auc_gain_ci": [0.025330404731376117, 0.24397807227156265]}, "loyo_vs_rain_season|all|site_week": {"n": 1548, "clusters": 1371, "brier_ref": 0.09398854056970533, "brier_new": 0.09082056902868495, "brier_gain": 0.003167971541020387, "brier_gain_ci": [0.0011107803614205344, 0.005158435438080978], "p_gain_le_0": 0.001, "auc_ref": 0.8029177494068467, "auc_new": 0.815183312620043, "auc_gain_ci": [0.004311273363311224, 0.019885307033509245]}, "loyo_vs_rain_season|all|site": {"n": 1548, "clusters": 32, "brier_ref": 0.09398854056970533, "brier_new": 0.09082056902868495, "brier_gain": 0.003167971541020387, "brier_gain_ci": [0.0009779553471519326, 0.00558691652459371], "p_gain_le_0": 0.0015, "auc_ref": 0.8029177494068467, "auc_new": 0.815183312620043, "auc_gain_ci": [-0.004164389949741159, 0.02976897608715393]}, "loyo_vs_rain_season|all|calendar_week": {"n": 1548, "clusters": 63, "brier_ref": 0.09398854056970533, "brier_new": 0.09082056902868495, "brier_gain": 0.003167971541020387, "brier_gain_ci": [0.0009233300663870431, 0.005369068856158869], "p_gain_le_0": 0.0015, "auc_ref": 0.8029177494068467, "auc_new": 0.815183312620043, "auc_gain_ci": [0.004643373467225043, 0.019979152968298823]}, "loyo_vs_rain_season|rivers|site_week": {"n": 907, "clusters": 805, "brier_ref": 0.14305382188376314, "brier_new": 0.13746856448597772, "brier_gain": 0.005585257397785426, "brier_gain_ci": [0.0022627109622677215, 0.009063455143708576], "p_gain_le_0": 0.0005, "auc_ref": 0.7256307586325669, "auc_new": 0.7490671374034845, "auc_gain_ci": [0.0096779440963024, 0.037655102465775143]}, "loyo_vs_rain_season|rivers|site": {"n": 907, "clusters": 20, "brier_ref": 0.14305382188376314, "brier_new": 0.13746856448597772, "brier_gain": 0.005585257397785426, "brier_gain_ci": [0.002196821897183993, 0.00930531022292466], "p_gain_le_0": 0.0, "auc_ref": 0.7256307586325669, "auc_new": 0.7490671374034845, "auc_gain_ci": [-0.001232531919862606, 0.05481428358714935]}, "loyo_vs_rain_season|rivers|calendar_week": {"n": 907, "clusters": 62, "brier_ref": 0.14305382188376314, "brier_new": 0.13746856448597772, "brier_gain": 0.005585257397785426, "brier_gain_ci": [0.0018706172774127568, 0.009373487007316777], "p_gain_le_0": 0.001, "auc_ref": 0.7256307586325669, "auc_new": 0.7490671374034845, "auc_gain_ci": [0.011192499550282559, 0.03535858526087706]}, "loso_vs_rain_season|all|site_week": {"n": 1548, "clusters": 1371, "brier_ref": 0.09256975079830822, "brier_new": 0.09033559420614815, "brier_gain": 0.002234156592160072, "brier_gain_ci": [0.00015737416779933004, 0.004281449342189374], "p_gain_le_0": 0.018, "auc_ref": 0.7997648570782963, "auc_new": 0.807617077166422, "auc_gain_ci": [-0.00043652447647671007, 0.016103780590023146]}, "loso_vs_rain_season|all|site": {"n": 1548, "clusters": 32, "brier_ref": 0.09256975079830822, "brier_new": 0.09033559420614815, "brier_gain": 0.002234156592160072, "brier_gain_ci": [-0.0004650305937405566, 0.004870150442027662], "p_gain_le_0": 0.0475, "auc_ref": 0.7997648570782963, "auc_new": 0.807617077166422, "auc_gain_ci": [-0.013762932342188255, 0.026862052850020506]}, "loso_vs_rain_season|all|calendar_week": {"n": 1548, "clusters": 63, "brier_ref": 0.09256975079830822, "brier_new": 0.09033559420614815, "brier_gain": 0.002234156592160072, "brier_gain_ci": [0.00014464790585734627, 0.004356842149780939], "p_gain_le_0": 0.019, "auc_ref": 0.7997648570782963, "auc_new": 0.807617077166422, "auc_gain_ci": [0.0005611222239681662, 0.015970616066285238]}, "loso_vs_rain_season|rivers|site_week": {"n": 907, "clusters": 805, "brier_ref": 0.140231277012505, "brier_new": 0.13578613956642693, "brier_gain": 0.004445137446078079, "brier_gain_ci": [0.0011123798587817306, 0.007856078883869352], "p_gain_le_0": 0.0045, "auc_ref": 0.7385186141967335, "auc_new": 0.7606992163954189, "auc_gain_ci": [0.006983884141744137, 0.03809779261857064]}, "loso_vs_rain_season|rivers|site": {"n": 907, "clusters": 20, "brier_ref": 0.140231277012505, "brier_new": 0.13578613956642693, "brier_gain": 0.004445137446078079, "brier_gain_ci": [0.000551447135508849, 0.00862331042222931], "p_gain_le_0": 0.01, "auc_ref": 0.7385186141967335, "auc_new": 0.7606992163954189, "auc_gain_ci": [-0.0038084933870773303, 0.054403474898425765]}, "loso_vs_rain_season|rivers|calendar_week": {"n": 907, "clusters": 62, "brier_ref": 0.140231277012505, "brier_new": 0.13578613956642693, "brier_gain": 0.004445137446078079, "brier_gain_ci": [0.000906490631979753, 0.008136996881352752], "p_gain_le_0": 0.007, "auc_ref": 0.7385186141967335, "auc_new": 0.7606992163954189, "auc_gain_ci": [0.00737706196939038, 0.03806460062134555]}}, "rain_window_sensitivity": {"share_complete": 1.0, "complete_only": {"n": 907, "clusters": 805, "brier_ref": 0.14209094160524346, "brier_new": 0.13746856448597772, "brier_gain": 0.004622377119265747, "brier_gain_ci": [0.0003010234150934588, 0.008777731563241617], "p_gain_le_0": 0.017, "auc_ref": 0.713456901748041, "auc_new": 0.7490671374034845, "auc_gain_ci": [0.01409862781632131, 0.06028980593297556]}, "all_accepted": {"n": 907, "clusters": 805, "brier_ref": 0.14209094160524346, "brier_new": 0.13746856448597772, "brier_gain": 0.004622377119265747, "brier_gain_ci": [0.0003010234150934588, 0.008777731563241617], "p_gain_le_0": 0.017, "auc_ref": 0.713456901748041, "auc_new": 0.7490671374034845, "auc_gain_ci": [0.01409862781632131, 0.06028980593297556]}}, "rain_window": "(t - 48 h, t]: 48 hour stamps, at least 90% finite", "by_lead": [{"lead": 0, "exposure": "replayed exposure", "n": 1548, "brier": 0.0908, "auc": 0.8152, "brier_rain_only": 0.0934, "auc_rain_only": 0.796, "brier_river": 0.1375, "auc_river": 0.7491, "brier_river_rain_only": 0.1421}, {"lead": 0, "exposure": "fixed lead-0 exposure", "n": 1548, "brier": 0.0908, "auc": 0.8152, "brier_rain_only": 0.0934, "auc_rain_only": 0.796, "brier_river": 0.1375, "auc_river": 0.7491, "brier_river_rain_only": 0.1421}, {"lead": 1, "exposure": "replayed exposure", "n": 1548, "brier": 0.0972, "auc": 0.7987, "brier_rain_only": 0.1012, "auc_rain_only": 0.7646, "brier_river": 0.1483, "auc_river": 0.7176, "brier_river_rain_only": 0.1554}, {"lead": 1, "exposure": "fixed lead-0 exposure", "n": 1548, "brier": 0.0952, "auc": 0.8037, "brier_rain_only": 0.1012, "auc_rain_only": 0.7646, "brier_river": 0.1448, "auc_river": 0.7279, "brier_river_rain_only": 0.1554}, {"lead": 2, "exposure": "replayed exposure", "n": 1548, "brier": 0.0987, "auc": 0.7945, "brier_rain_only": 0.1022, "auc_rain_only": 0.7691, "brier_river": 0.1509, "auc_river": 0.7085, "brier_river_rain_only": 0.157}, {"lead": 2, "exposure": "fixed lead-0 exposure", "n": 1548, "brier": 0.0957, "auc": 0.8032, "brier_rain_only": 0.1022, "auc_rain_only": 0.7691, "brier_river": 0.1458, "auc_river": 0.7247, "brier_river_rain_only": 0.157}, {"lead": 3, "exposure": "replayed exposure", "n": 1548, "brier": 0.1024, "auc": 0.7871, "brier_rain_only": 0.1065, "auc_rain_only": 0.7527, "brier_river": 0.1572, "auc_river": 0.6932, "brier_river_rain_only": 0.1644}, {"lead": 3, "exposure": "fixed lead-0 exposure", "n": 1548, "brier": 0.0984, "auc": 0.7988, "brier_rain_only": 0.1065, "auc_rain_only": 0.7527, "brier_river": 0.1504, "auc_river": 0.7149, "brier_river_rain_only": 0.1644}, {"lead": 4, "exposure": "replayed exposure", "n": 1548, "brier": 0.1, "auc": 0.7942, "brier_rain_only": 0.1045, "auc_rain_only": 0.7582, "brier_river": 0.1531, "auc_river": 0.7048, "brier_river_rain_only": 0.1611}, {"lead": 4, "exposure": "fixed lead-0 exposure", "n": 1548, "brier": 0.096, "auc": 0.8021, "brier_rain_only": 0.1045, "auc_rain_only": 0.7582, "brier_river": 0.1462, "auc_river": 0.7237, "brier_river_rain_only": 0.1611}], "reliability": [{"n": 962, "forecast": 0.041, "observed": 0.051, "lo": 0.0, "hi": 0.1}, {"n": 257, "forecast": 0.137, "observed": 0.14, "lo": 0.1, "hi": 0.2}, {"n": 86, "forecast": 0.247, "observed": 0.209, "lo": 0.2, "hi": 0.3}, {"n": 93, "forecast": 0.349, "observed": 0.204, "lo": 0.3, "hi": 0.4}, {"n": 53, "forecast": 0.45, "observed": 0.472, "lo": 0.4, "hi": 0.5}, {"n": 48, "forecast": 0.553, "observed": 0.604, "lo": 0.5, "hi": 0.6}, {"n": 33, "forecast": 0.652, "observed": 0.667, "lo": 0.6, "hi": 0.7}, {"n": 9, "forecast": 0.739, "observed": 0.889, "lo": 0.7, "hi": 0.8}, {"n": 6, "forecast": 0.828, "observed": 0.833, "lo": 0.8, "hi": 0.9}, {"n": 1, "forecast": 0.936, "observed": 1.0, "lo": 0.9, "hi": 1.0}], "coef_per_sd": {"lrain48": 0.9061136162279557, "lrain24": -0.19464116580259602, "logit_risk": 0.544866682890723, "lake": -0.46664170125607096, "lake_x_lrain48": -0.9255963919015433, "doy_sin": -0.07424497358737008, "doy_cos": 0.11375348820999584}, "rain_source": "forecast lead 0", "notes": ["Leave-one-year-out and leave-one-site-out use the production spill model for exposure, which saw 2023-25 spills.", "Forward test: exposure from the 2023-24 spill model without the 2025-fitted calibration map.", "Lead-k replay: 30-day rain and antecedent index use the analysis series; previous-runs fields stitch runs issued k days before each hour."]}, "sampling_plan": {"n_samples": 1548, "samples_by_year": {"2024": 520, "2025": 508, "2026": 520}, "rule": "leads compared on the same samples; a window needs 90% of its 48 hours", "all": [{"rain_source": "observed", "top 50%": 0.731, "top 25%": 0.486}, {"rain_source": "lead 0", "top 50%": 0.717, "top 25%": 0.505}, {"rain_source": "lead 1", "top 50%": 0.689, "top 25%": 0.462}, {"rain_source": "lead 2", "top 50%": 0.675, "top 25%": 0.472}, {"rain_source": "lead 3", "top 50%": 0.656, "top 25%": 0.406}, {"rain_source": "lead 4", "top 50%": 0.675, "top 25%": 0.425}], "all_rule_5mm": {"observed": {"days_kept": 0.367, "exceedances_kept": 0.585, "rate_on_kept": 0.218, "rate_on_skipped": 0.09}, "lead 0": {"days_kept": 0.312, "exceedances_kept": 0.505, "rate_on_kept": 0.222, "rate_on_skipped": 0.099}, "lead 1": {"days_kept": 0.304, "exceedances_kept": 0.472, "rate_on_kept": 0.213, "rate_on_skipped": 0.104}, "lead 2": {"days_kept": 0.332, "exceedances_kept": 0.514, "rate_on_kept": 0.212, "rate_on_skipped": 0.1}, "lead 3": {"days_kept": 0.329, "exceedances_kept": 0.453, "rate_on_kept": 0.188, "rate_on_skipped": 0.112}, "lead 4": {"days_kept": 0.316, "exceedances_kept": 0.448, "rate_on_kept": 0.194, "rate_on_skipped": 0.11}}, "river": [{"rain_source": "observed", "top 50%": 0.76, "top 25%": 0.505}, {"rain_source": "lead 0", "top 50%": 0.745, "top 25%": 0.526}, {"rain_source": "lead 1", "top 50%": 0.704, "top 25%": 0.474}, {"rain_source": "lead 2", "top 50%": 0.694, "top 25%": 0.49}, {"rain_source": "lead 3", "top 50%": 0.673, "top 25%": 0.418}, {"rain_source": "lead 4", "top 50%": 0.694, "top 25%": 0.439}], "river_rule_5mm": {"observed": {"days_kept": 0.283, "exceedances_kept": 0.582, "rate_on_kept": 0.444, "rate_on_skipped": 0.126}, "lead 0": {"days_kept": 0.226, "exceedances_kept": 0.51, "rate_on_kept": 0.488, "rate_on_skipped": 0.137}, "lead 1": {"days_kept": 0.228, "exceedances_kept": 0.469, "rate_on_kept": 0.444, "rate_on_skipped": 0.149}, "lead 2": {"days_kept": 0.26, "exceedances_kept": 0.52, "rate_on_kept": 0.432, "rate_on_skipped": 0.14}, "lead 3": {"days_kept": 0.25, "exceedances_kept": 0.449, "rate_on_kept": 0.388, "rate_on_skipped": 0.159}, "lead 4": {"days_kept": 0.23, "exceedances_kept": 0.444, "rate_on_kept": 0.416, "rate_on_skipped": 0.156}}, "lake": [{"rain_source": "observed", "top 50%": 0.375, "top 25%": 0.25}, {"rain_source": "lead 0", "top 50%": 0.375, "top 25%": 0.25}, {"rain_source": "lead 1", "top 50%": 0.5, "top 25%": 0.312}, {"rain_source": "lead 2", "top 50%": 0.438, "top 25%": 0.25}, {"rain_source": "lead 3", "top 50%": 0.438, "top 25%": 0.25}, {"rain_source": "lead 4", "top 50%": 0.438, "top 25%": 0.25}], "lake_rule_5mm": {"observed": {"days_kept": 0.485, "exceedances_kept": 0.625, "rate_on_kept": 0.032, "rate_on_skipped": 0.018}, "lead 0": {"days_kept": 0.434, "exceedances_kept": 0.438, "rate_on_kept": 0.025, "rate_on_skipped": 0.025}, "lead 1": {"days_kept": 0.41, "exceedances_kept": 0.5, "rate_on_kept": 0.03, "rate_on_skipped": 0.021}, "lead 2": {"days_kept": 0.434, "exceedances_kept": 0.438, "rate_on_kept": 0.025, "rate_on_skipped": 0.025}, "lead 3": {"days_kept": 0.441, "exceedances_kept": 0.5, "rate_on_kept": 0.028, "rate_on_skipped": 0.022}, "lead 4": {"days_kept": 0.437, "exceedances_kept": 0.5, "rate_on_kept": 0.029, "rate_on_skipped": 0.022}}, "forecast_skill": {"lead 0": {"mae_mm": 3.07, "spearman": 0.889, "hit_rate_gt10mm": 0.69}, "lead 1": {"mae_mm": 3.23, "spearman": 0.847, "hit_rate_gt10mm": 0.657}, "lead 2": {"mae_mm": 3.44, "spearman": 0.837, "hit_rate_gt10mm": 0.617}, "lead 3": {"mae_mm": 3.54, "spearman": 0.82, "hit_rate_gt10mm": 0.574}, "lead 4": {"mae_mm": 4.35, "spearman": 0.724, "hit_rate_gt10mm": 0.489}}}, "prf": {"generated_at": "2026-10-03T15:01:30+01:00", "season": ["2026-05-15", "2026-09-30"], "fetch": {"days_requested": 139, "days_fetched": 139, "first_day": "2026-05-15", "last_day": "2026-09-30", "failed": {}, "refused": false, "requests_this_run": 0, "refusals_this_run": 0, "user_agent": "dipcast/0.1.0 (+https://github.com/ethanbuckley/swimsignal; hello@swimsignal.co.uk)", "source": "https://environment.data.gov.uk/doc/bathing-water-quality/stp-risk-prediction.json"}, "rules": {"threshold": 900, "swimsignal_warns_at": 0.25, "ea": "the latest prediction for the site published before the sample was taken and not yet expired", "swimsignal": "the latest forecast for the spot and day issued before the sample was taken", "brier_ea": "the EA's level read as 1 (increased) or 0 (normal)", "climatology": "the E. coli model's training-period exceedance rate for rivers and lakes"}, "sites": {"n_inland": 38, "n_in_predictions": 34, "n_with_prf": 0, "with_prf": [], "not_in_predictions": [{"bw_id": "uke2204-08905", "name": "Swale above Richmond Falls"}, {"bw_id": "ukh1406-10712", "name": "Falcon Meadow, River Waveney"}, {"bw_id": "ukj1102-11941", "name": "Pangbourne Meadow, River Thames"}, {"bw_id": "ukd6300-40752", "name": "Sandy Lane, Chester"}], "origin_rows": {"NON_PRF_SITE": 4448, "none": 15}, "days_with_any_prediction": 139}, "season_samples": {"n_samples": 720, "n_with_ea_prediction": 598, "n_over_threshold": 61, "first": "2026-05-15", "last": "2026-09-28", "ea": {"n_increased": 13, "hits": 1, "misses": 44, "false_alarms": 12, "quiet_correct": 541, "increased_because": {"Advice against bathing: pollution incident": 12, "Risk of reduced water quality due to harmful algae": 1}, "increased_at": {"River Teme in Ludlow": 9, "Frensham Great Pond": 3, "Windermere, Fellfoot": 1}}}, "both": {"n_samples": 30, "n_sites": 22, "n_over_threshold": 2, "ea": {"brier": 0.13333333333333333, "n_increased": 2, "hits": 0, "misses": 2, "false_alarms": 2, "quiet_correct": 26}, "swimsignal": {"brier": 0.07180407575317783, "mean_estimate": 0.11345795254757343, "warn_at": 0.25, "n_warned": 3, "hits": 0, "misses": 2, "false_alarms": 3, "quiet_correct": 25}, "climatology_brier": 0.07886285933333331, "first": "2026-09-16", "last": "2026-09-28"}, "both_rivers": {"n_samples": 18, "n_sites": 12, "n_over_threshold": 1, "ea": {"brier": 0.16666666666666666, "n_increased": 2, "hits": 0, "misses": 1, "false_alarms": 2, "quiet_correct": 15}, "swimsignal": {"brier": 0.06618064309710087, "mean_estimate": 0.1681272244747746, "warn_at": 0.25, "n_warned": 3, "hits": 0, "misses": 1, "false_alarms": 3, "quiet_correct": 14}, "climatology_brier": 0.07824365444444442}, "rows": [{"site": "Rutland Water Whitwell Creek", "bw_id": "ukf2208-09701", "kind": "lake", "sampled": "2026-09-16T11:03+01:00", "ecoli": 10, "ea_level": "normal", "ea_origin": "NON_PRF_SITE", "ea_comment": "No pollution incidents reported", "swimsignal": 0.019, "swimsignal_lead": 0, "swimsignal_issued": "2026-09-16T07:32+01:00"}, {"site": "Coniston Water, Monk Coniston", "bw_id": "ukd1230-45775", "kind": "lake", "sampled": "2026-09-16T11:16+01:00", "ecoli": 91, "ea_level": "normal", "ea_origin": "NON_PRF_SITE", "ea_comment": "No pollution incidents reported", "swimsignal": 0.048, "swimsignal_lead": 0, "swimsignal_issued": "2026-09-16T07:32+01:00"}, {"site": "Coniston Water, Boating Centre", "bw_id": "ukd1230-45750", "kind": "lake", "sampled": "2026-09-16T11:16+01:00", "ecoli": 91, "ea_level": "normal", "ea_origin": "NON_PRF_SITE", "ea_comment": "No pollution incidents reported", "swimsignal": 0.054, "swimsignal_lead": 0, "swimsignal_issued": "2026-09-16T07:32+01:00"}, {"site": "Coniston Water, Brown Howe", "bw_id": "ukd1230-45725", "kind": "lake", "sampled": "2026-09-16T11:55+01:00", "ecoli": 91, "ea_level": "normal", "ea_origin": "NON_PRF_SITE", "ea_comment": "No pollution incidents reported", "swimsignal": 0.034, "swimsignal_lead": 0, "swimsignal_issued": "2026-09-16T07:32+01:00"}, {"site": "River Teme in Ludlow", "bw_id": "ukg2200-36060", "kind": "river", "sampled": "2026-09-17T10:05+01:00", "ecoli": 280, "ea_level": "increased", "ea_origin": "NON_PRF_SITE", "ea_comment": "Advice against bathing: pollution incident", "swimsignal": 0.13, "swimsignal_lead": 0, "swimsignal_issued": "2026-09-17T07:57+01:00"}, {"site": "River Severn at Ironbridge", "bw_id": "ukg2100-36070", "kind": "river", "sampled": "2026-09-17T10:30+01:00", "ecoli": 180, "ea_level": "normal", "ea_origin": "NON_PRF_SITE", "ea_comment": "No pollution incidents reported", "swimsignal": 0.212, "swimsignal_lead": 0, "swimsignal_issued": "2026-09-17T07:57+01:00"}, {"site": "Windermere, Millerground Landing", "bw_id": "ukd1203-45650", "kind": "lake", "sampled": "2026-09-17T11:30+01:00", "ecoli": 27, "ea_level": "normal", "ea_origin": "NON_PRF_SITE", "ea_comment": "No pollution incidents reported", "swimsignal": 0.033, "swimsignal_lead": 0, "swimsignal_issued": "2026-09-17T07:57+01:00"}, {"site": "River Severn in Shrewsbury", "bw_id": "ukg2200-36071", "kind": "river", "sampled": "2026-09-17T11:39+01:00", "ecoli": 210, "ea_level": "normal", "ea_origin": "NON_PRF_SITE", "ea_comment": "No pollution incidents reported", "swimsignal": 0.305, "swimsignal_lead": 0, "swimsignal_issued": "2026-09-17T07:57+01:00"}, {"site": "Windermere, Rayrigg Meadow", "bw_id": "ukd1203-45675", "kind": "lake", "sampled": "2026-09-17T11:40+01:00", "ecoli": 18, "ea_level": "normal", "ea_origin": "NON_PRF_SITE", "ea_comment": "No pollution incidents reported", "swimsignal": 0.034, "swimsignal_lead": 0, "swimsignal_issued": "2026-09-17T07:57+01:00"}, {"site": "Windermere, Fellfoot", "bw_id": "ukd1203-45700", "kind": "lake", "sampled": "2026-09-17T12:40+01:00", "ecoli": 18, "ea_level": "normal", "ea_origin": "NON_PRF_SITE", "ea_comment": "No pollution incidents reported", "swimsignal": 0.021, "swimsignal_lead": 0, "swimsignal_issued": "2026-09-17T07:57+01:00"}, {"site": "Windermere, Lakeside YMCA", "bw_id": "ukd1203-45625", "kind": "lake", "sampled": "2026-09-17T13:07+01:00", "ecoli": 18, "ea_level": "normal", "ea_origin": "NON_PRF_SITE", "ea_comment": "No pollution incidents reported", "swimsignal": 0.026, "swimsignal_lead": 0, "swimsignal_issued": "2026-09-17T07:57+01:00"}, {"site": "Sheep's Green, River Cam", "bw_id": "ukh1201-09801", "kind": "river", "sampled": "2026-09-18T10:00+01:00", "ecoli": 480, "ea_level": "normal", "ea_origin": "NON_PRF_SITE", "ea_comment": "No pollution incidents reported", "swimsignal": 0.135, "swimsignal_lead": 0, "swimsignal_issued": "2026-09-18T07:10+01:00"}, {"site": "Wallingford Beach, River Thames", "bw_id": "ukj1403-11947", "kind": "river", "sampled": "2026-09-18T11:20+01:00", "ecoli": 290, "ea_level": "normal", "ea_origin": "NON_PRF_SITE", "ea_comment": "No pollution incidents reported", "swimsignal": 0.103, "swimsignal_lead": 0, "swimsignal_issued": "2026-09-18T07:10+01:00"}, {"site": "Wolvercote Mill Stream", "bw_id": "ukj1402-11946", "kind": "river", "sampled": "2026-09-18T12:05+01:00", "ecoli": 430, "ea_level": "normal", "ea_origin": "NON_PRF_SITE", "ea_comment": "No pollution incidents reported", "swimsignal": 0.13, "swimsignal_lead": 0, "swimsignal_issued": "2026-09-18T07:10+01:00"}, {"site": "River Frome at Farleigh Hungerford", "bw_id": "ukk2301-36051", "kind": "river", "sampled": "2026-09-21T13:30+01:00", "ecoli": 590, "ea_level": "normal", "ea_origin": "NON_PRF_SITE", "ea_comment": "No pollution incidents reported", "swimsignal": 0.278, "swimsignal_lead": 0, "swimsignal_issued": "2026-09-21T09:07+01:00"}, {"site": "River Severn at Ironbridge", "bw_id": "ukg2100-36070", "kind": "river", "sampled": "2026-09-22T10:15+01:00", "ecoli": 450, "ea_level": "normal", "ea_origin": "NON_PRF_SITE", "ea_comment": "No pollution incidents reported", "swimsignal": 0.118, "swimsignal_lead": 0, "swimsignal_issued": "2026-09-22T08:05+01:00"}, {"site": "River Teme in Ludlow", "bw_id": "ukg2200-36060", "kind": "river", "sampled": "2026-09-22T11:04+01:00", "ecoli": 160, "ea_level": "increased", "ea_origin": "NON_PRF_SITE", "ea_comment": "Advice against bathing: pollution incident", "swimsignal": 0.104, "swimsignal_lead": 0, "swimsignal_issued": "2026-09-22T08:05+01:00"}, {"site": "River Avon at Fordingbridge", "bw_id": "ukj3308-19001", "kind": "river", "sampled": "2026-09-22T12:47+01:00", "ecoli": 530, "ea_level": "normal", "ea_origin": "NON_PRF_SITE", "ea_comment": "No pollution incidents reported", "swimsignal": 0.157, "swimsignal_lead": 0, "swimsignal_issued": "2026-09-22T08:05+01:00"}, {"site": "River Severn in Shrewsbury", "bw_id": "ukg2200-36071", "kind": "river", "sampled": "2026-09-22T15:17+01:00", "ecoli": 400, "ea_level": "normal", "ea_origin": "NON_PRF_SITE", "ea_comment": "No pollution incidents reported", "swimsignal": 0.199, "swimsignal_lead": 0, "swimsignal_issued": "2026-09-22T13:44+01:00"}, {"site": "Colwick Country Park (West Lake)", "bw_id": "ukf1400-09750", "kind": "lake", "sampled": "2026-09-23T09:39+01:00", "ecoli": 82, "ea_level": "normal", "ea_origin": "NON_PRF_SITE", "ea_comment": "No pollution incidents reported", "swimsignal": 0.027, "swimsignal_lead": 0, "swimsignal_issued": "2026-09-23T08:01+01:00"}, {"site": "Wolvercote Mill Stream", "bw_id": "ukj1402-11946", "kind": "river", "sampled": "2026-09-23T11:30+01:00", "ecoli": 300, "ea_level": "normal", "ea_origin": "NON_PRF_SITE", "ea_comment": "No pollution incidents reported", "swimsignal": 0.119, "swimsignal_lead": 0, "swimsignal_issued": "2026-09-23T08:01+01:00"}, {"site": "Wallingford Beach, River Thames", "bw_id": "ukj1403-11947", "kind": "river", "sampled": "2026-09-23T14:04+01:00", "ecoli": 270, "ea_level": "normal", "ea_origin": "NON_PRF_SITE", "ea_comment": "No pollution incidents reported", "swimsignal": 0.088, "swimsignal_lead": 0, "swimsignal_issued": "2026-09-23T13:50+01:00"}, {"site": "Rutland Water Sykes Lane", "bw_id": "ukf2208-09702", "kind": "lake", "sampled": "2026-09-24T11:00+01:00", "ecoli": 3800, "ea_level": "normal", "ea_origin": "NON_PRF_SITE", "ea_comment": "No pollution incidents reported", "swimsignal": 0.025, "swimsignal_lead": 0, "swimsignal_issued": "2026-09-24T07:58+01:00"}, {"site": "Rutland Water Whitwell Creek", "bw_id": "ukf2208-09701", "kind": "lake", "sampled": "2026-09-24T11:30+01:00", "ecoli": 10, "ea_level": "normal", "ea_origin": "NON_PRF_SITE", "ea_comment": "No pollution incidents reported", "swimsignal": 0.025, "swimsignal_lead": 0, "swimsignal_issued": "2026-09-24T07:58+01:00"}, {"site": "Sheep's Green, River Cam", "bw_id": "ukh1201-09801", "kind": "river", "sampled": "2026-09-24T11:37+01:00", "ecoli": 280, "ea_level": "normal", "ea_origin": "NON_PRF_SITE", "ea_comment": "No pollution incidents reported", "swimsignal": 0.125, "swimsignal_lead": 0, "swimsignal_issued": "2026-09-24T07:58+01:00"}, {"site": "Wharfe at Cromwheel, Ilkley", "bw_id": "uke4100-08901", "kind": "river", "sampled": "2026-09-24T13:02+01:00", "ecoli": 380, "ea_level": "normal", "ea_origin": "NON_PRF_SITE", "ea_comment": "No pollution incidents reported", "swimsignal": 0.306, "swimsignal_lead": 0, "swimsignal_issued": "2026-09-24T07:58+01:00"}, {"site": "Nidd at the Lido, Knaresborough", "bw_id": "uke2203-08903", "kind": "river", "sampled": "2026-09-24T14:15+01:00", "ecoli": 3900, "ea_level": "normal", "ea_origin": "NON_PRF_SITE", "ea_comment": "No pollution incidents reported", "swimsignal": 0.202, "swimsignal_lead": 0, "swimsignal_issued": "2026-09-24T13:32+01:00"}, {"site": "Wharfe at Wilderness Carpark", "bw_id": "uke4200-08904", "kind": "river", "sampled": "2026-09-24T14:54+01:00", "ecoli": 250, "ea_level": "normal", "ea_origin": "NON_PRF_SITE", "ea_comment": "No pollution incidents reported", "swimsignal": 0.213, "swimsignal_lead": 0, "swimsignal_issued": "2026-09-24T13:32+01:00"}, {"site": "Friars Meadow, River Stour", "bw_id": "ukh1401-11051", "kind": "river", "sampled": "2026-09-25T13:35+01:00", "ecoli": 82, "ea_level": "normal", "ea_origin": "NON_PRF_SITE", "ea_comment": "No pollution incidents reported", "swimsignal": 0.101, "swimsignal_lead": 0, "swimsignal_issued": "2026-09-25T09:22+01:00"}, {"site": "Colwick Country Park (West Lake)", "bw_id": "ukf1400-09750", "kind": "lake", "sampled": "2026-09-28T13:13+01:00", "ecoli": 10, "ea_level": "normal", "ea_origin": "NON_PRF_SITE", "ea_comment": "No pollution incidents reported", "swimsignal": 0.031, "swimsignal_lead": 0, "swimsignal_issued": "2026-09-28T10:10+01:00"}], "credit": "Environment Agency bathing water risk predictions and samples \u00a9 Environment Agency copyright and/or database right, Open Government Licence v3.0. Compared by SwimSignal; the EA does not endorse it.", "verdict": "SwimSignal's E. coli estimate did better than the Environment Agency's daily risk prediction on the 30 samples both covered, at 22 sites, 16 to 28 September 2026: Brier score 0.072 against 0.133, where always forecasting the long-run rate scores 0.079. Neither warned before either of the 2 samples over 900. Too few samples to judge either forecast."}, "service": {"scheduled_per_day": 48, "decision_hour_local": 8, "runs": {"from_day": "2026-09-17", "to_day": "2026-10-04", "n_days": 18, "n": 193, "scheduled_per_day": 48, "scheduled": 864, "share_of_scheduled": 0.22337962962962962, "per_day_median": 7.0, "per_day_min": 5, "per_day_max": 35, "days_without_run": [], "median_gap_h": 1.92, "max_gap_h": 7.71, "max_gap_ended": "2026-09-28T17:51+01:00"}, "feeds": {"from_day": "2026-09-17", "to_day": "2026-10-04", "n_polls": 193, "n_down": 1, "companies": [{"company": "Anglian Water", "polls": 193, "down": 0}, {"company": "Northumbrian Water", "polls": 193, "down": 0}, {"company": "Severn Trent Water", "polls": 193, "down": 0}, {"company": "South West Water", "polls": 193, "down": 0}, {"company": "Southern Water", "polls": 193, "down": 0}, {"company": "Thames Water", "polls": 193, "down": 0}, {"company": "United Utilities", "polls": 193, "down": 0}, {"company": "Wessex Water", "polls": 193, "down": 0}, {"company": "Yorkshire Water", "polls": 193, "down": 1}], "down_at": [{"company": "Yorkshire Water", "at": "2026-10-02T00:18+01:00"}]}, "morning": {"from_day": "2026-09-17", "to_day": "2026-10-04", "n_days": 18, "n_with_forecast": 18, "days_without": []}, "builds": {"since": "2026-10-04T12:50+01:00", "n": 26, "n_published": 26, "by_event": {"push": 21, "schedule": 5}, "not_published": [], "spots_attempted": 2730, "spots_forecast": 2723, "share_forecast": 0.9974358974358974, "runs_every_spot": 19, "worst": {"at": "2026-10-04T12:50+01:00", "forecast_ok": 104, "spots": 105}}}, "credits": {"attribution": "Storm overflow status from Anglian Water Services, Northumbrian Water, Severn Trent Water, South West Water, Southern Water (\u00a9 2026), Thames Water, United Utilities, Wessex Water (\u00a9 2024) and Yorkshire Water, via the National Storm Overflow Hub, CC BY 4.0; overflow identifiers matched with the Stream ID lookup, via Stream, CC BY 4.0. Environment Agency data \u00a9 Environment Agency copyright and/or database right, OGL v3.0; river levels: this uses Environment Agency flood and river level data from the real-time data API (Beta). Contains OS data \u00a9 Crown copyright and database right 2026. Weather data by Open-Meteo.com, CC BY 4.0, from Met Office forecasts \u00a9 Crown copyright, CC BY-SA 4.0: rainfall figures stay under CC BY-SA 4.0. The models were trained on ERA5-Land reanalysis (doi:10.24381/cds.e2161bac): contains modified Copernicus Climate Change Service information 2026; neither the European Commission nor ECMWF is responsible for any use that may be made of the Copernicus information or data it contains.", "modified": "Combined, filtered and modelled by SwimSignal. The forecasts, levels and scores are SwimSignal's own estimates, not the data providers'. None of the providers endorses SwimSignal.", "spot_locations": "Swim spot locations from OpenStreetMap, \u00a9 OpenStreetMap contributors, ODbL 1.0 (https://www.openstreetmap.org/copyright): the spots whose source is \"openstreetmap\".", "licences": {"CC BY 4.0": "https://creativecommons.org/licenses/by/4.0/", "CC BY-SA 4.0": "https://creativecommons.org/licenses/by-sa/4.0/", "OGL v3.0": "https://www.nationalarchives.gov.uk/doc/open-government-licence/version/3/", "ODbL 1.0": "https://opendatacommons.org/licenses/odbl/1-0/"}, "full": "https://swimsignal.co.uk/terms.html#data"}}