Groundwater Forecast - Model Dashboard Last run: 2026-03-12 12:15

Performance statistics for the machine learning groundwater prediction model. The model trains daily on 3,290 days of data (2003–present), using a 366-day weighted rainfall window with dynamic lag shifting to predict Calculated Groundwater % up to 120 days ahead across three rainfall scenarios. The 20-day backtest reruns automatically each day at 12:15 after EA data updates.

How the Model Works

Core Formula

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 (accounting for seasonal variation in recharge) and a lag weight (accounting for how long ago the rain fell and how much effect it still has on the aquifer).

GW %  =  −8.00  +  0.147 × WeightedRainSum

The intercept (−8.00) and slope (0.147) are currently fixed at calibrated values. The slope derives from the original Excel hydrological model (calibrated against 20+ years of EA gauge data); the intercept was recalibrated in February 2026 when the original value (−22.09) was found to underestimate groundwater levels by ~14% under current weighted rainfall conditions.

To ensure predictions start exactly at today’s measured level, an exponentially decaying correction is added. This fades to near-zero over 90 days, so the model gradually transitions from anchoring on today’s reading to trusting the formula alone:

correction(day) = Δ × e−0.02 × day

Day  0: 100% of correction
Day 35:  50% of correction
Day 90:   5% of correction
Monthly Rainfall Factors

Rain falling in different months has very different effects on groundwater recharge. Summer rain is largely lost to evapotranspiration and plant uptake; winter rain percolates into the chalk aquifer far more efficiently. Each month’s rainfall is therefore multiplied by a seasonal factor before entering the model.

These factors are loaded from the database each run (shown below are the current learned values, starting from the Excel model baseline):

Month Factor Recharge
Jan1.19High
Feb0.91Medium
Mar0.91Medium
Apr0.86Medium
May0.38Low
Jun0.38Low
Jul0.38Low
Aug0.38Low
Sep0.95Medium
Oct1.38High
Nov1.38High
Dec1.10High

Highest recharge months: Oct, Nov, Jan. Lowest recharge months: May, Jun, Jul, Aug. These factors are fixed at calibrated values derived from the Excel model. Automatic ML adjustment has been disabled as the GBM model handles seasonality internally, causing the adjustment to incorrectly push all factors toward 1.0.

Lag Weight Profile

Rain does not immediately reach the groundwater table — it must percolate through the unsaturated chalk above the aquifer. The lag weight profile describes how much influence rainfall from different periods in the past has on today’s groundwater level. The profile covers the past 366 days:

Days ago Weight Interpretation
0 – 19 0.75 Recent — partial effect, 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 influence at 40–59 days ago reflects typical chalk percolation times in the upper Pang valley. The ML model can adjust individual weights by up to 2% per daily run, capped at 1.5× the initial value.

Dynamic Lag Shifting

When the aquifer is already full, rain reaches the water table faster because less unsaturated chalk needs to be saturated first. Conversely, when groundwater is very low, percolation takes longer. The model accounts for this by shifting the entire lag weight curve earlier or later depending on the current groundwater level.

Thresholds are based on historical quartiles from 20+ years of EA data (historical range: 3.3% – 96.6%):

GW Level Quartile Lag Shift Effect
< 26.6% Bottom 25% +40 days Much slower response
26.6 – 49.9% Lower mid +20 days Slower response
49.9 – 73.3% Upper mid 0 days Baseline (current)
> 73.3% Top 25% −20 days Faster response

At today’s level of 83.9%, the model is applying a −20 day shift (fast response — aquifer near full).

Dynamic shifting is only applied from day 30 of the forecast onwards. In the short term (days 1–29) all three scenarios use the same baseline weights to ensure they diverge smoothly and predictably based only on differing rainfall amounts.

Three rainfall scenarios are projected: average uses historical monthly means; +40% and −40% scale future rain up or down. All scenarios start identically at today’s actual reading.

4.6%
Mean Error (MAE)
20-day backtest
4.6%
RMSE
20-day backtest
4.6%
Bias
Under-pred
0.9977
Validation R²
3,290 samples
83.9%
Today (Actual)
2026-03-13
24
Model Runs
429 prediction rows

Tomorrow’s Forecast

+40%
83.9%
Avg
83.7%
-40%
83.5%

Actual today: 83.9%

60-Day Forecast

+40%
85.8%
Avg
82.0%
-40%
78.2%

Blue=wet, Green=average, Orange=dry

Accuracy by Forecast Horizon

No data available yet

Backtest History Daily 20-day results

DateMAE %RMSE %Bias %Status
2026-03-124.554.614.55Significant bias detected
2026-03-114.464.564.46Significant bias detected
2026-03-104.334.464.33Significant bias detected
2026-03-094.154.364.15Significant bias detected
2026-03-083.974.283.97Significant bias detected
2026-03-073.814.183.71Significant bias detected
2026-03-063.634.073.44Significant bias detected
2026-03-053.493.933.07Significant bias detected
2026-03-043.363.802.66Significant bias detected
2026-03-033.303.722.20Significant bias detected
2026-03-023.313.731.69Within acceptable range
2026-03-013.313.741.15Within acceptable range
2026-02-283.403.890.53Within acceptable range
2026-02-273.564.15-0.15Within acceptable range
2026-02-263.794.53-0.88Within acceptable range
2026-02-253.994.84-1.60Within acceptable range
2026-02-244.245.20-2.32Significant bias detected
2026-02-234.545.62-3.07Significant bias detected
2026-02-224.876.05-3.82Significant bias detected
2026-02-215.326.61-4.61Significant bias detected
2026-02-205.887.26-5.42Significant bias detected
2026-02-196.568.02-6.28Significant bias detected
2026-02-187.308.83-7.20Significant bias detected
2026-02-178.179.73-8.16Significant bias detected

Monthly Averages Trend over time

MonthAvg MAE %Avg RMSE %Avg Bias %Days
2026-033.814.123.2812
2026-025.146.23-3.5812

Model Training Log Daily training metrics

DateTrain R²Val R²Tr RMSEVal RMSESamples
2026-03-12 12:151.00000.99770.0961.0793290
2026-03-11 12:151.00000.99790.0971.0273289
2026-03-10 12:151.00000.99720.0971.1713288
2026-03-09 12:151.00000.99720.0971.1713288
2026-03-08 12:151.00000.99760.0961.0833287
2026-03-07 12:151.00000.99740.0961.1363286
2026-03-06 12:151.00000.99780.0981.0533285
2026-03-05 12:151.00000.99780.0961.0463284
2026-03-04 12:151.00000.99780.0961.0463284
2026-03-03 12:151.00000.99780.0971.0473283
2026-03-02 12:151.00000.99810.0960.9793282
2026-03-01 12:151.00000.99780.0971.0603281
2026-02-28 12:151.00000.99780.0971.0563280
2026-02-27 12:151.00000.99780.0971.0563280
2026-02-26 12:151.00000.99760.0971.0983279
2026-02-25 12:151.00000.99780.0971.0553278
2026-02-24 12:151.00000.99780.0961.0593277
2026-02-23 12:151.00000.99810.0950.9723276
2026-02-22 12:151.00000.99810.0950.9703276
2026-02-21 12:151.00000.99790.0961.0183275
2026-02-20 12:151.00000.99800.0971.0123274
2026-02-19 12:151.00000.99790.0981.0223273
2026-02-18 12:151.00000.99810.0970.9813272
2026-02-17 13:591.00000.99810.0970.9813272
2026-02-17 13:531.00000.99810.0970.9813272
2026-02-17 13:501.00000.99810.0970.9813272
2026-02-17 13:441.00000.99820.0970.9483272
2026-02-17 13:411.00000.99820.0970.9673272
2026-02-17 13:401.00000.99810.0970.9853272
2026-02-17 13:371.00000.99800.0971.0103272

Recent Predictions vs Actuals Average scenario — where actual data now exists

DateActual %Predicted %Error %Days AheadMade On
2026-03-1283.9383.75-0.1702026-03-12 12:15:22
2026-03-1183.9183.88-0.0202026-03-11 12:15:24
2026-03-1083.9783.81-0.1702026-03-10 12:15:23
2026-03-0983.8883.75-0.1302026-03-09 12:15:23
2026-03-0883.8183.67-0.1402026-03-08 12:15:23
2026-03-0783.7283.55-0.1602026-03-07 12:15:24
2026-03-0683.6283.49-0.1302026-03-06 12:15:20
2026-03-0583.5483.25-0.2802026-03-05 12:15:24
2026-03-0483.2282.98-0.2402026-03-04 12:15:23
2026-03-0382.9582.74-0.2102026-03-03 12:15:22
2026-03-0282.7282.54-0.1802026-03-02 12:15:26
2026-03-0182.4482.14-0.3002026-03-01 12:15:21
2026-02-2881.9681.69-0.2702026-02-28 12:15:22
2026-02-2781.5881.23-0.3502026-02-27 12:15:22
2026-02-2681.0180.57-0.4502026-02-26 12:15:23
2026-02-2580.3479.94-0.4102026-02-25 12:15:21
2026-02-2479.6979.21-0.4902026-02-24 12:15:23
2026-02-2378.9378.40-0.5302026-02-23 12:15:23
2026-02-2278.0977.45-0.6302026-02-22 12:15:21
2026-02-2177.1176.42-0.6802026-02-21 12:15:20
2026-02-2076.1175.39-0.7202026-02-20 12:15:21
2026-02-1975.0474.51-0.5302026-02-19 12:15:22
2026-02-1874.1673.15-1.0102026-02-18 12:15:21
2026-02-1772.7571.99-0.7702026-02-17 13:59:48

Forward Predictions — All Scenarios Made on 2026-03-12 12:15

DateAverage %+40% Rain %-40% Rain %Range %
2026-03-1384.0784.2183.930.28
2026-03-1483.7383.9483.520.43
2026-03-1584.0384.3283.750.57
2026-03-1683.2883.6482.930.71
2026-03-1783.4883.9183.050.85
2026-03-1883.6484.1483.151.00
2026-03-1983.8784.4483.301.14
2026-03-2084.0484.6883.401.28
2026-03-2183.6884.3982.971.42
2026-03-2282.9683.7482.181.56
2026-03-2382.5783.4381.721.71
2026-03-2482.5883.5081.661.85
2026-03-2582.6083.6081.611.99
2026-03-2682.6283.6981.562.13
2026-03-2783.0384.1781.902.27
2026-03-2882.2583.4681.042.42
2026-03-2982.2683.5480.982.56
2026-03-3082.4283.7781.072.70
2026-03-3182.2483.6680.812.84
2026-04-0182.1983.6980.693.00
2026-04-0282.0583.6380.473.15
2026-04-0382.1583.8080.503.31
2026-04-0481.7883.5180.043.46
2026-04-0581.7683.5779.953.62
2026-04-0681.4283.3079.533.77
2026-04-0781.0683.0379.103.93
2026-04-0881.0683.1079.024.08
2026-04-0981.1083.2278.984.24
2026-04-1081.2283.4279.034.39
2026-04-1185.0487.0683.034.03
2026-04-1284.6386.7082.564.14
2026-04-1384.6286.7482.494.24
2026-04-1484.6186.7982.444.35
2026-04-1584.6186.8482.384.46
2026-04-1684.9987.2882.714.57
2026-04-1784.1986.5281.854.67
2026-04-1884.1786.5681.784.78
2026-04-1984.3186.7581.864.89
2026-04-2084.0986.5981.605.00
2026-04-2184.0786.6481.495.15
2026-04-2283.9486.6081.295.31
2026-04-2384.0686.7981.335.46
2026-04-2483.7086.5180.895.62
2026-04-2583.6986.5880.815.77
2026-04-2683.3786.3380.415.93
2026-04-2783.0386.0779.996.08
2026-04-2883.0486.1679.936.24
2026-04-2983.0986.2979.906.39
2026-04-3083.2386.5179.966.55
2026-05-0182.8986.2179.566.66
2026-05-0282.8786.2579.486.77
2026-05-0382.8086.2479.366.88
2026-05-0482.6086.0979.116.99
2026-05-0582.8586.4079.307.10
2026-05-0682.3785.9778.767.21
2026-05-0782.1685.8278.517.32
2026-05-0882.0685.7778.347.43
2026-05-0981.9685.7378.197.54
2026-05-1081.8085.6277.977.65
2026-05-1181.5985.4877.707.79
2026-05-1281.6985.6577.737.92
2026-05-1381.7885.8177.758.06
2026-05-1481.8885.9877.798.20
2026-05-1581.6885.8577.528.33
2026-05-1681.5985.8377.368.47
2026-05-1781.6585.9577.348.61
2026-05-1881.6185.9877.248.74
2026-05-1981.5986.0377.158.88
2026-05-2081.5586.0677.059.02
2026-05-2181.5486.1176.969.15
2026-05-2281.6586.3077.019.29
2026-05-2381.7986.5177.089.43
2026-05-2481.9586.7377.179.56
2026-05-2581.8586.7077.009.70
2026-05-2682.0086.9177.089.84
2026-05-2781.7486.7376.769.97
2026-05-2881.4986.5476.4310.11
2026-05-2981.5486.6776.4210.25
2026-05-3081.5286.7176.3310.38
2026-05-3181.4986.7176.2610.46
2026-06-0181.4286.6876.1610.52
2026-06-0281.2886.5875.9910.59
2026-06-0381.2086.5275.8710.65
2026-06-0481.0786.4375.7210.72
2026-06-0581.0286.4175.6310.78
2026-06-0680.9686.3975.5410.85
2026-06-0780.9186.3775.4510.92
2026-06-0880.7386.2275.2410.98
2026-06-0980.4786.0074.9511.05
2026-06-1079.8685.4174.3111.10
2026-06-1179.7585.3374.1811.15
2026-06-1279.8085.4074.2011.20
2026-06-1379.8585.4774.2211.25
2026-06-1479.8885.5374.2311.30
2026-06-1579.9085.5774.2211.35
2026-06-1679.8785.5774.1711.40
2026-06-1779.5285.2573.7911.45
2026-06-1879.4085.1573.6411.50
2026-06-1979.2885.0673.5111.55
2026-06-2079.1985.0073.3811.62
2026-06-2178.9984.8373.1511.68
2026-06-2278.7084.5765.5419.03
2026-06-2378.3984.3065.4718.83
2026-06-2478.1184.0465.3518.69
2026-06-2577.9683.9365.2818.65
2026-06-2677.7783.7865.2418.53
2026-06-2777.6183.6465.0018.64
2026-06-2877.2983.3664.9418.41
2026-06-2977.0483.1464.8118.33
2026-06-3075.6581.7864.6417.14
2026-07-0175.3681.5164.6116.89
2026-07-0275.4081.5764.6516.92
2026-07-0375.4081.6064.6116.98
2026-07-0475.3381.5564.5117.03
2026-07-0575.2781.5164.3417.17
2026-07-0675.0181.2763.5917.68
2026-07-0774.1980.4762.6317.84
2026-07-0873.8380.1462.5517.59
2026-07-0973.5079.8362.3317.50

Cron Log Last modified: 2026-03-12 12:15:22

Using learned parameters: intercept=-8.0000, slope=0.147000
Today's actual: 83.755, formula predicts: 80.057, adjustment: 3.698
Day 0: GW=83.8%, lag_shift=+0, weighted_sum=599.0, adj=3.70, pred=83.755
Day 10: GW=83.7%, lag_shift=+0, weighted_sum=598.2, adj=3.03, pred=82.962
Day 20: GW=82.2%, lag_shift=+0, weighted_sum=596.7, adj=2.48, pred=82.193
Day 30: GW=81.2%, lag_shift=-20, weighted_sum=619.1, adj=2.03, pred=85.044
Day 40: GW=84.1%, lag_shift=-20, weighted_sum=615.0, adj=1.66, pred=84.067
Day 50: GW=83.2%, lag_shift=-20, weighted_sum=609.0, adj=1.36, pred=82.886
Day 60: GW=81.8%, lag_shift=-20, weighted_sum=601.9, adj=1.11, pred=81.591
Day 70: GW=81.6%, lag_shift=-20, weighted_sum=602.9, adj=0.91, pred=81.537
Day 80: GW=81.5%, lag_shift=-20, weighted_sum=603.7, adj=0.75, pred=81.486
Day 90: GW=80.5%, lag_shift=-20, weighted_sum=593.5, adj=0.61, pred=79.859
Day 100: GW=79.3%, lag_shift=-20, weighted_sum=589.7, adj=0.50, pred=79.188
Day 110: GW=77.0%, lag_shift=-20, weighted_sum=566.3, adj=0.41, pred=75.654
Predicted range: 73.496 to 85.044
Generating predictions for scenario: +40%
Predicting calc_gw from 2026-03-12 00:00:00 (level: 83.755)
Using learned parameters: intercept=-8.0000, slope=0.147000
Today's actual: 83.755, formula predicts: 80.057, adjustment: 3.698
Day 0: GW=83.8%, lag_shift=+0, weighted_sum=599.0, adj=3.70, pred=83.755
Day 10: GW=84.4%, lag_shift=+0, weighted_sum=603.5, adj=3.03, pred=83.744
Day 20: GW=83.7%, lag_shift=+0, weighted_sum=606.9, adj=2.48, pred=83.692
Day 30: GW=83.4%, lag_shift=-20, weighted_sum=632.8, adj=2.03, pred=87.058
Day 40: GW=86.6%, lag_shift=-20, weighted_sum=632.5, adj=1.66, pred=86.643
Day 50: GW=86.5%, lag_shift=-20, weighted_sum=631.7, adj=1.36, pred=86.214
Day 60: GW=85.6%, lag_shift=-20, weighted_sum=628.4, adj=1.11, pred=85.485
Day 70: GW=86.1%, lag_shift=-20, weighted_sum=634.0, adj=0.91, pred=86.114
Day 80: GW=86.7%, lag_shift=-20, weighted_sum=639.2, adj=0.75, pred=86.714
Day 90: GW=86.0%, lag_shift=-20, weighted_sum=631.3, adj=0.61, pred=85.408
Day 100: GW=85.1%, lag_shift=-20, weighted_sum=629.2, adj=0.50, pred=84.998
Day 110: GW=83.1%, lag_shift=-20, weighted_sum=608.0, adj=0.41, pred=81.780
Predicted range: 79.827 to 87.277
Generating predictions for scenario: -40%
Predicting calc_gw from 2026-03-12 00:00:00 (level: 83.755)
Using learned parameters: intercept=-8.0000, slope=0.147000
Today's actual: 83.755, formula predicts: 80.057, adjustment: 3.698
Day 0: GW=83.8%, lag_shift=+0, weighted_sum=599.0, adj=3.70, pred=83.755
Day 10: GW=83.0%, lag_shift=+0, weighted_sum=592.9, adj=3.03, pred=82.180
Day 20: GW=80.8%, lag_shift=+0, weighted_sum=586.5, adj=2.48, pred=80.693
Day 30: GW=79.0%, lag_shift=-20, weighted_sum=605.4, adj=2.03, pred=83.030
Day 40: GW=81.6%, lag_shift=-20, weighted_sum=597.5, adj=1.66, pred=81.491
Day 50: GW=80.0%, lag_shift=-20, weighted_sum=586.4, adj=1.36, pred=79.557
Day 60: GW=78.0%, lag_shift=-20, weighted_sum=575.4, adj=1.11, pred=77.698
Day 70: GW=77.0%, lag_shift=-20, weighted_sum=571.8, adj=0.91, pred=76.960
Day 80: GW=76.3%, lag_shift=-20, weighted_sum=568.1, adj=0.75, pred=76.258
Day 90: GW=74.9%, lag_shift=-20, weighted_sum=555.8, adj=0.61, pred=74.310
Day 100: GW=73.5%, lag_shift=-20, weighted_sum=550.2, adj=0.50, pred=73.379
Day 110: GW=64.8%, lag_shift=+0, weighted_sum=491.3, adj=0.41, pred=64.637
Predicted range: 62.327 to 83.929
✓ Saved calc_gw predictions to database
============================================================
SUCCESS: Daily update completed
============================================================
============================================================
PREDICTION SUMMARY
============================================================
CALC_GW:
average: 83.755 (day 1) → 73.496 (day 60)
+40%: 83.755 (day 1) → 79.827 (day 60)
-40%: 83.755 (day 1) → 62.327 (day 60)