LSTM Groundwater Level Forecasting β UK
A tuned LSTM model for single-step monthly groundwater level forecasting using meteorological variables as exogenous inputs.
Model Details
| Parameter | Value |
|---|---|
| Architecture | LSTM(128) β Dropout(0.1) β Dense(32) β Dense(1) |
| Framework | TensorFlow / Keras |
| Task | Single-step monthly forecasting |
| Lookback window | 24 months |
| Input features | water_level, temperature, precipitation, wind_speed |
| Tuning method | Bayesian Optimisation (Keras Tuner, 20 trials) |
Data Splits
| Split | Period | Months |
|---|---|---|
| Training | 1944-01-01 β 2007-10-01 | 766 |
| Validation | 2007-11-01 β 2015-10-01 | 96 |
| Test | 2015-11-01 β 2023-10-01 | 96 |
Best Hyperparameters
| Parameter | Value |
|---|---|
| LSTM layers | 2 |
| Units | 64 |
| Dropout | 0.1 |
| Learning rate | 0.000773 |
| Batch size | 32 |
Test Set Performance
| Metric | Value |
|---|---|
| RMSE | 2.9386 m |
| MAE | 2.397 m |
| MAPE | 3.671% |
| RΒ² | 0.5505 |
| NSE | 0.5505 |
This model is part of a benchmark study comparing SARIMAX, LSTM, and TCN for UK groundwater level forecasting.
Important Note
Contemporaneous meteorological variables are used as inputs at forecast time (oracle assumption). Future met values are treated as known β consistent with the experimental setup used across all models in this study.
Repository Contents
βββ lstm_model.keras # Trained Keras model
βββ scaler_X.pkl # Feature scaler (MinMaxScaler)
βββ scaler_y.pkl # Target scaler (MinMaxScaler)
βββ model_config.json # Config, hyperparameters & metrics
βββ inference.py # Load model & generate forecasts
βββ README.md # This file
Quick Start
from huggingface_hub import hf_hub_download
from tensorflow.keras.models import load_model
import joblib, pandas as pd, numpy as np
model = load_model(hf_hub_download('kozy9/GWLSTM', 'lstm_model.keras'))
scaler_X = joblib.load(hf_hub_download('kozy9/GWLSTM', 'scaler_X.pkl'))
scaler_y = joblib.load(hf_hub_download('kozy9/GWLSTM', 'scaler_y.pkl'))
# Provide a 24-month window of features
X_window = pd.DataFrame({
'water_level' : [...], # 24 values
'temperature' : [...],
'precipitation': [...],
'wind_speed' : [...],
})
X_scaled = scaler_X.transform(X_window)
X_input = X_scaled.reshape(1, 24, 4)
y_scaled = model.predict(X_input)
pred = scaler_y.inverse_transform(y_scaled)[0][0]
print(f'Next month forecast: {pred:.2f} m')
- Downloads last month
- 23
Inference Providers NEW
This model isn't deployed by any Inference Provider. π Ask for provider support