{"api_version":"1.0","attribution":"Flood Sentinel skill metrics. Data sourced from the Australian Bureau of Meteorology. Forecasts generated by ensemble ML models trained on historical observations.","catchments":[{"display_name":"Hawkesbury-Nepean River Catchment","region":"Greater Sydney","slug":"hawkesbury-nepean","stations":[{"active_models":119,"datum":"Local","horizons":{"1":{"cv_r2":null,"mae":0.0037,"model":"LightGBM","r2":0.997,"registered":"2026-04-14T08:09:21.555837","rmse":0.0156},"3":{"cv_r2":null,"mae":0.0067,"model":"XGBoost","r2":0.9909,"registered":"2026-04-19T11:02:01.786061","rmse":0.0273},"6":{"cv_r2":null,"mae":0.0119,"model":"LightGBM","r2":0.9696,"registered":"2026-04-19T11:03:12.910190","rmse":0.05},"12":{"cv_r2":null,"mae":0.028,"model":"XGBoost","r2":0.8183,"registered":"2026-04-14T07:42:50.582586","rmse":0.1221},"24":{"cv_r2":null,"mae":0.0469,"model":"LightGBM","r2":0.5776,"registered":"2026-04-19T11:05:14.013523","rmse":0.1862},"48":{"cv_r2":null,"mae":0.3708,"model":"MetaLearner","r2":0.6118,"registered":"2026-04-19T11:06:44.116859","rmse":1.1212},"72":{"cv_r2":null,"mae":0.3544,"model":"MetaLearner","r2":0.6154,"registered":"2026-04-19T11:07:47.169790","rmse":1.0583},"96":{"cv_r2":null,"mae":0.4648,"model":"MetaLearner","r2":0.4456,"registered":"2026-04-19T11:08:59.952472","rmse":1.3442}},"name":"Camden Weir","river":"Nepean River","station_id":"212216","thresholds":{"major":13.8,"minor":6.8,"moderate":8.3},"tidal":false,"total_models":119},{"active_models":10,"datum":"Local","horizons":{"1":{"cv_r2":null,"mae":0.004,"model":"LightGBM","r2":0.9976,"registered":"2026-04-14T08:15:42.150274","rmse":0.0181}},"name":"Wallacia Weir","river":"Nepean River","station_id":"212202","thresholds":{"major":11.0,"minor":5.0,"moderate":8.7},"tidal":false,"total_models":10},{"active_models":0,"datum":"Local","horizons":{},"name":"Penrith Weir","river":"Nepean River","station_id":"212201","thresholds":{"major":10.4,"minor":3.9,"moderate":7.9},"tidal":false,"total_models":0},{"active_models":2,"datum":"Local","horizons":{"1":{"cv_r2":null,"mae":0.0402,"model":"LightGBM","r2":0.9853,"registered":"2026-04-19T06:52:49.219443","rmse":0.0727}},"name":"North Richmond","river":"Hawkesbury River","station_id":"212200","thresholds":{"major":10.5,"minor":3.8,"moderate":7.9},"tidal":false,"total_models":2},{"active_models":45,"datum":"AHD","horizons":{"1":{"cv_r2":null,"mae":0.0186,"model":"LightGBM","r2":0.9955,"registered":"2026-04-14T06:25:22.707990","rmse":0.0299},"3":{"cv_r2":null,"mae":0.0433,"model":"LightGBM","r2":0.9765,"registered":"2026-04-14T07:32:01.930615","rmse":0.0687},"6":{"cv_r2":null,"mae":0.0765,"model":"LightGBM","r2":0.9304,"registered":"2026-04-14T07:33:35.937448","rmse":0.1181},"12":{"cv_r2":null,"mae":0.0902,"model":"GradientBoosting","r2":0.8282,"registered":"2026-04-14T07:35:36.959592","rmse":0.1855},"24":{"cv_r2":null,"mae":0.2525,"model":"MetaLearner","r2":0.7084,"registered":"2026-04-14T07:37:05.203989","rmse":0.6819},"48":{"cv_r2":null,"mae":0.3773,"model":"MetaLearner","r2":0.6329,"registered":"2026-04-14T06:33:31.306257","rmse":0.9184},"72":{"cv_r2":null,"mae":0.4923,"model":"MetaLearner","r2":0.362,"registered":"2026-04-14T07:39:57.113862","rmse":1.1562}},"name":"Windsor","river":"Hawkesbury River","station_id":"212903","thresholds":{"major":12.2,"minor":5.8,"moderate":7.0},"tidal":false,"total_models":45},{"active_models":0,"datum":"AHD","horizons":{},"name":"Sackville","river":"Hawkesbury River","station_id":"212406","thresholds":{"major":9.7,"minor":4.6,"moderate":7.3},"tidal":true,"total_models":0},{"active_models":0,"datum":"AHD","horizons":{},"name":"Lower Portland","river":"Hawkesbury River","station_id":"212407","thresholds":{"major":7.6,"minor":4.6,"moderate":6.1},"tidal":true,"total_models":0},{"active_models":0,"datum":"AHD","horizons":{},"name":"Webbs Creek","river":"Hawkesbury River","station_id":"212408","thresholds":{"major":4.2,"minor":2.5,"moderate":3.5},"tidal":true,"total_models":0}],"summary":{"active_models":176,"avg_r2_168h":null,"avg_r2_1h":0.9939,"avg_r2_24h":0.643,"avg_r2_6h":0.95,"avg_r2_72h":0.4887,"station_count":8,"total_models":176}},{"display_name":"Daintree River Catchment","region":"Far North Queensland","slug":"daintree","stations":[{"active_models":0,"datum":"AHD","horizons":{},"name":"Daintree Village","river":"Daintree River","station_id":"531110","thresholds":{"major":9.0,"minor":4.0,"moderate":6.0},"tidal":true,"total_models":0}],"summary":{"active_models":0,"avg_r2_168h":null,"avg_r2_1h":null,"avg_r2_24h":null,"avg_r2_6h":null,"avg_r2_72h":null,"station_count":1,"total_models":0}},{"display_name":"Lismore City Council Catchment","region":"Richmond","slug":"wilsons-river","stations":[{"active_models":0,"datum":"Local","horizons":{},"name":"Lismore (Wilsons River)","river":"Wilsons River","station_id":"203900","thresholds":{"major":7.91,"minor":3.04,"moderate":3.95},"tidal":false,"total_models":0},{"active_models":0,"datum":"Local","horizons":{},"name":"Casino","river":"Richmond River","station_id":"203010","thresholds":{"major":7.66,"minor":4.44,"moderate":5.77},"tidal":false,"total_models":0}],"summary":{"active_models":0,"avg_r2_168h":null,"avg_r2_1h":null,"avg_r2_24h":null,"avg_r2_6h":null,"avg_r2_72h":null,"station_count":2,"total_models":0}},{"display_name":"Lake Conjola Catchment","region":"South Coast NSW","slug":"lake-conjola","stations":[{"active_models":3,"datum":"AHD","horizons":{"6":{"cv_r2":null,"mae":0.0083,"model":"XGBoost","r2":0.995,"registered":"2026-04-12T05:33:42.346983","rmse":0.0119},"12":{"cv_r2":null,"mae":0.0138,"model":"XGBoost","r2":0.9865,"registered":"2026-04-12T05:34:03.014911","rmse":0.0196},"24":{"cv_r2":null,"mae":0.028,"model":"XGBoost","r2":0.9502,"registered":"2026-04-12T05:34:23.491504","rmse":0.0376}},"name":"Lake Conjola","river":"Lake Conjola","station_id":"216420","thresholds":{"major":2.0,"minor":1.2,"moderate":1.5},"tidal":true,"total_models":3}],"summary":{"active_models":3,"avg_r2_168h":null,"avg_r2_1h":null,"avg_r2_24h":0.9502,"avg_r2_6h":0.995,"avg_r2_72h":null,"station_count":1,"total_models":3}}],"generated_at":"2026-06-06T13:39:24.954931Z","methodology":{"confidence_bands":"Split conformal prediction (90% nominal coverage), regime-stratified per OPEN/CLOSED/FLOOD/TRANSITION/BASELINE. Band inflation from NWP ensemble spread (ECMWF IFS, GFS, ICON, UKMO) and ensemble member disagreement.","horizons_hours":[1,3,6,12,24,48,72,96,120,168],"metrics":["R\u00b2 (coefficient of determination, held-out test set)","CV R\u00b2 (cross-validated R\u00b2, 5-fold TimeSeriesSplit)","MAE (mean absolute error, metres)","RMSE (root mean square error, metres)"],"models":["XGBoost","LightGBM","RandomForest","GradientBoosting","Ridge"],"quality_gates":["Reject if R\u00b2 < 0 (worse than mean)","Reject if CV R\u00b2 < 0 (worse than persistence)","Minimum 100 training rows"],"training_data":"13+ years of hourly observations (2013-2026) for Hawkesbury-Nepean"}}
