Performance statistics for the machine learning groundwater prediction model. The model trains daily on 3,380 days of data (2003–present), using a 366-day weighted rainfall window to predict Calculated Groundwater % up to 120 days ahead across three rainfall scenarios. The intercept is auto-recalibrated each run, and a 20-day backtest runs automatically at 12:15 after EA data updates.
Each day’s groundwater level is predicted using a linear formula applied to a weighted sum of the past 366 days of rainfall. Before being summed, every day’s rainfall is multiplied by two factors: a monthly factor (seasonal recharge variation) and a lag weight (how long ago the rain fell).
The intercept (-20.56) is auto-recalibrated every daily run by linear regression against the last two years of actual groundwater readings. This corrects for seasonal drift — the aquifer behaves differently in summer vs winter — so the formula always reflects current conditions rather than requiring manual adjustment.
The slope (0.147) is currently fixed at the value derived from the original Excel hydrological model, calibrated against 20+ years of EA gauge data. Once sufficient horizon accuracy data has accumulated (from late July 2026), both slope and intercept will be tuned together against actual forecast performance at 7, 28 and 30-day horizons.
To ensure predictions start at today’s measured level, an exponentially decaying correction is added, fading to near-zero over 90 days:
Summer rain is largely lost to evapotranspiration; winter rain percolates into the chalk aquifer far more efficiently. Each month’s rainfall is multiplied by a seasonal factor before entering the model.
| Month | Factor | Recharge |
|---|---|---|
| Jan | 1.19 | High |
| Feb | 0.91 | Medium |
| Mar | 0.91 | Medium |
| Apr | 0.86 | Medium |
| May | 0.38 | Low |
| Jun | 0.38 | Low |
| Jul | 0.38 | Low |
| Aug | 0.38 | Low |
| Sep | 0.95 | Medium |
| Oct | 1.38 | High |
| Nov | 1.38 | High |
| Dec | 1.10 | High |
Highest recharge months: Oct, Nov, Jan. Lowest recharge months: May, Jun, Jul, Aug. These factors are fixed at calibrated values from the Excel model. Automatic ML adjustment is disabled — the GBM model handles seasonality internally and was found to incorrectly push all factors toward 1.0.
Rain must percolate through unsaturated chalk before reaching the water table. The lag weight profile describes how much influence rainfall from different periods has on today’s groundwater level:
| Days ago | Weight | Interpretation |
|---|---|---|
| 0 – 19 | 0.75 | Recent — still percolating |
| 20 – 39 | 1.00 | Reaching water table |
| 40 – 59 | 1.20 | Peak influence |
| 60 – 179 | 0.90 | Sustained contribution |
| 180 – 199 | 0.85 | Fading influence |
| 200 – 219 | 0.77 | Diminishing |
| 220 – 259 | 0.70–0.75 | Background recharge |
| 260 – 279 | 0.50 | Minor residual |
| 280 – 299 | 0.05 | Negligible |
| 300 – 365 | 0.00 | No effect |
The peak at 40–59 days reflects typical chalk percolation times in the upper Pang valley. These weights are fixed at calibrated values.
When the aquifer is full, rain reaches the water table faster (less unsaturated chalk to saturate). When low, percolation takes longer. The model shifts the lag weight curve right by the appropriate number of days based on current groundwater level.
Thresholds from historical quartiles (range: 3.3%–96.6%):
| GW Level | Quartile | Lag |
|---|---|---|
| < 26.61% | Bottom 25% | 20 days |
| 26.61–49.94% | Lower mid | 13 days |
| 49.94–73.26% | Upper mid | 8 days |
| > 73.26% | Top 25% | 5 days |
At today’s level of 46.5%, the current lag is 13 days.
Lag values from field observation in the upper Pang chalk
catchment. Applied in the 20-day backtest
to correct for rain that fell recently but hasn't yet reached
the water table. Not applied in forward predictions
— the intercept is calibrated against historical actuals which
already have percolation delay baked in, and applying the shift
iteratively causes a feedback collapse.
Values stored in groundwater_lag_thresholds —
adjustable without code changes.
Last updated: 2026-06-29.
Three rainfall scenarios: average uses historical monthly means; +40% and −40% scale future rain up or down. All scenarios start at today’s actual reading.
Actual today: 46.5%
Blue=wet, Green=avg, Orange=dry
Blue=wet, Green=avg, Orange=dry
| Days Ahead | N | Avg Error % | Bias % | Max Error % |
|---|---|---|---|---|
| 1 | 1 | 0.30 | 0.30 | 0.30 |
| Date | MAE % | RMSE % | Bias % | Status |
|---|---|---|---|---|
| 2026-07-01 | 0.99 | 1.26 | -0.96 | Within acceptable range |
| 2026-06-30 | 0.87 | 1.13 | -0.81 | Within acceptable range |
| 2026-06-29 | 0.78 | 0.99 | -0.71 | Within acceptable range |
| Month | Avg MAE % | Avg RMSE % | Avg Bias % | Days |
|---|---|---|---|---|
| 2026-07 | 0.99 | 1.26 | -0.96 | 1 |
| 2026-06 | 0.83 | 1.06 | -0.76 | 2 |
| Date | Intercept | Train R² | Val R² | Tr RMSE | Val RMSE | Samples |
|---|---|---|---|---|---|---|
| 2026-07-01 12:15 | -20.56 | 1.0000 | 0.9996 | 0.017 | 0.431 | 3380 |
| 2026-06-30 12:15 | -20.57 | 1.0000 | 0.9995 | 0.017 | 0.473 | 3379 |
| 2026-06-29 15:11 | -20.57 | 1.0000 | 0.9994 | 0.018 | 0.511 | 3378 |
| No data available yet |
|---|
Filters for predictions with a ~30-day horizon. Populates once the model has been running for at least 30 days.
| Date | Actual % | Predicted % | Error % | Days Ahead | Made On |
|---|---|---|---|---|---|
| 2026-06-30 | 46.87 | 46.87 | 0.00 | 0 | 2026-06-30 |
| 2026-06-30 | 46.87 | 47.17 | 0.30 | 1 | 2026-06-29 |
| 2026-06-29 | 47.19 | 47.19 | 0.00 | 0 | 2026-06-29 |
| Date | Average % | +40% Rain % | -40% Rain % | Range % |
|---|---|---|---|---|
| 2026-07-01 | 46.53 | 46.53 | 46.53 | 0.00 |
| 2026-07-08 | 45.01 | 45.20 | 44.82 | 0.39 |
| 2026-07-15 | 43.86 | 44.22 | 43.50 | 0.73 |
| 2026-07-22 | 43.28 | 43.83 | 42.73 | 1.10 |
| 2026-07-29 | 39.99 | 40.77 | 39.22 | 1.55 |
| 2026-08-05 | 37.59 | 38.63 | 36.55 | 2.07 |
| 2026-08-12 | 35.16 | 36.50 | 33.83 | 2.67 |
| 2026-08-19 | 34.03 | 35.69 | 32.37 | 3.32 |
| 2026-08-26 | 30.39 | 32.39 | 28.39 | 3.99 |
| 2026-09-02 | 29.47 | 31.88 | 27.06 | 4.82 |
| 2026-09-09 | 28.26 | 31.34 | 25.18 | 6.16 |
| 2026-09-16 | 27.37 | 31.13 | 23.61 | 7.52 |
| 2026-09-23 | 27.09 | 31.59 | 22.60 | 8.99 |
| 2026-09-30 | 25.94 | 31.24 | 20.64 | 10.60 |
| 2026-10-07 | 27.45 | 34.03 | 20.87 | 13.16 |
| 2026-10-14 | 27.72 | 35.64 | 19.80 | 15.84 |
| 2026-10-21 | 28.55 | 37.88 | 19.22 | 18.66 |
| 2026-10-28 | 27.49 | 38.36 | 16.61 | 21.75 |