docs: render of actual vs predicted through the 2024 flood; adaptive replay speed
CI/CD Pipeline - Northern Thailand Ping River Monitor / Test Suite (3.11) (push) Failing after 24s
CI/CD Pipeline - Northern Thailand Ping River Monitor / Build Docker Image (push) Skipped
CI/CD Pipeline - Northern Thailand Ping River Monitor / Integration Test with Services (push) Skipped
CI/CD Pipeline - Northern Thailand Ping River Monitor / Deploy to Staging (push) Skipped
CI/CD Pipeline - Northern Thailand Ping River Monitor / Deploy to Production (push) Skipped
CI/CD Pipeline - Northern Thailand Ping River Monitor / Performance Test (push) Skipped
CI/CD Pipeline - Northern Thailand Ping River Monitor / Code Quality (push) Successful in 12s
Documentation / Validate Documentation (push) Failing after 7s
Documentation / Generate API Documentation (push) Successful in 8s
Documentation / Build Sphinx Documentation (push) Successful in 15s
CI/CD Pipeline - Northern Thailand Ping River Monitor / Cleanup (push) Successful in 1s
Documentation / Documentation Summary (push) Successful in 3s
CI/CD Pipeline - Northern Thailand Ping River Monitor / Test Suite (3.11) (push) Failing after 24s
CI/CD Pipeline - Northern Thailand Ping River Monitor / Build Docker Image (push) Skipped
CI/CD Pipeline - Northern Thailand Ping River Monitor / Integration Test with Services (push) Skipped
CI/CD Pipeline - Northern Thailand Ping River Monitor / Deploy to Staging (push) Skipped
CI/CD Pipeline - Northern Thailand Ping River Monitor / Deploy to Production (push) Skipped
CI/CD Pipeline - Northern Thailand Ping River Monitor / Performance Test (push) Skipped
CI/CD Pipeline - Northern Thailand Ping River Monitor / Code Quality (push) Successful in 12s
Documentation / Validate Documentation (push) Failing after 7s
Documentation / Generate API Documentation (push) Successful in 8s
Documentation / Build Sphinx Documentation (push) Successful in 15s
CI/CD Pipeline - Northern Thailand Ping River Monitor / Cleanup (push) Successful in 1s
Documentation / Documentation Summary (push) Successful in 3s
docs/img/backtest-2024-p1.png: observed P.1 level vs the 24h-ahead predicted peak issued at each hour by a model trained only on pre-flood data, with the warning-probability panel below (first alert 24 Sep 01:00, 24 h before flooding began). Embedded in FLOOD_FORECASTING.md's headline-validation section with an honest reading, including the ~0.4 m peak under-prediction. Replay pacing is now adaptive: 4 h/frame through quiet days, 2 h when risk is elevated, 1 h (hour-by-hour) while the model is alerting or the river is near/above flood stage - so viewers can watch the detection sequence unfold.
This commit is contained in:
@@ -291,6 +291,21 @@ training half. So the model was retrained on data **ending 2024-08-31** and aske
|
|||||||
to forecast September–November 2024 cold, with no knowledge of the event that
|
to forecast September–November 2024 cold, with no knowledge of the event that
|
||||||
followed. This is the closest thing to a real operational test available.
|
followed. This is the closest thing to a real operational test available.
|
||||||
|
|
||||||
|

|
||||||
|
|
||||||
|
The render above shows the whole event hour by hour. Top: the observed level
|
||||||
|
(blue) against the 24 h-ahead predicted peak the model issued at each hour
|
||||||
|
(amber, dashed) — the amber line leads the blue one into both flood waves,
|
||||||
|
which is the entire point of the system. Bottom: the model's probability of
|
||||||
|
flooding within 24 h; it fires its **first alert at 01:00 on 24 September, a
|
||||||
|
full day before the river crossed the 3.70 m flooding line**, stays pinned near
|
||||||
|
1.0 through both waves, and stands down between and after them. Also visible,
|
||||||
|
honestly: the predicted peak tops out ~0.4 m short of the actual 5.30 m record
|
||||||
|
(the extreme-compression limitation discussed below), and the prediction is
|
||||||
|
noisier on the recession limbs. The same model track drives the dashboard's
|
||||||
|
"Replay Oct 2024 flood" feature, so this chart can be watched live on the map.
|
||||||
|
|
||||||
- **25 September cold start.** P.1's first warning crossing of the episode was
|
- **25 September cold start.** P.1's first warning crossing of the episode was
|
||||||
alerted **24–26 hours ahead**. This is the genuinely impressive case: the river
|
alerted **24–26 hours ahead**. This is the genuinely impressive case: the river
|
||||||
was in normal state, and the alert came from upstream routing alone.
|
was in normal state, and the alert came from upstream routing alone.
|
||||||
|
|||||||
Binary file not shown.
|
After Width: | Height: | Size: 119 KiB |
@@ -870,7 +870,12 @@
|
|||||||
alertEl.textContent = pWarn == null ? '' : 'model: no flood expected';
|
alertEl.textContent = pWarn == null ? '' : 'model: no flood expected';
|
||||||
alertEl.className = 'replay-alert note';
|
alertEl.className = 'replay-alert note';
|
||||||
}
|
}
|
||||||
i += 2; // 2 h per frame (~40 s total)
|
// Variable speed: race through quiet days, slow to hour-by-hour while
|
||||||
|
// the model is detecting and the flood unfolds, so the alert sequence
|
||||||
|
// (elevated risk -> model alert -> flooding) is readable.
|
||||||
|
const critical = (pWarn != null && pWarn >= 0.5) || (state.p1Now != null && state.p1Now >= 3.5);
|
||||||
|
const elevated = (pWarn != null && pWarn >= 0.2) || (state.p1Now != null && state.p1Now >= 2.8);
|
||||||
|
i += critical ? 1 : elevated ? 2 : 4;
|
||||||
if (i >= n + 40) endReplay(); // hold the last frame briefly
|
if (i >= n + 40) endReplay(); // hold the last frame briefly
|
||||||
}, 120);
|
}, 120);
|
||||||
} catch (error) {
|
} catch (error) {
|
||||||
|
|||||||
Reference in New Issue
Block a user