Beluga ForecastNet: Short-Term Load Forecasting Using Beluga Whale Optimized Convolutional BiLSTM Autoencoder
Beluga ForecastNet is a short-term load forecasting model built from a paper-faithful CBLSTM-AE architecture tuned by Beluga Whale Optimization (BWO) on the GEFCom2014 electricity load dataset.
Full name:
Beluga ForecastNet: Beluga Whale Optimized Convolutional BiLSTM Autoencoder
The implemented pipeline follows:
GEFCom2014 hourly load + temperature
-> non-leaky feature engineering
-> train-only z-score scaling
-> rolling forecast windows
-> Beluga ForecastNet CBLSTM-AE
-> BWO hyperparameter search
-> final model refit
-> holdout evaluation and baseline comparison
The checked-in artifacts use the compact MacBook-friendly GEFCom setup:
- Dataset:
GEFCom2014-E.xlsx - Slice:
2014-01-01 00:00to2014-12-31 23:00 - Raw time series:
loadtarget andtemperatureexogenous input - Engineered features:
61 - Forecast horizon: next hour
- Window size:
48hours - Seed:
42
| Rank | Model | RMSE | MAE | MAPE |
|---|---|---|---|---|
| 1 | CNN-LSTM | 59.95 | 44.17 | 1.34% |
| 2 | GRU | 64.65 | 48.69 | 1.44% |
| 3 | CNN-BiLSTM | 65.85 | 47.98 | 1.46% |
| 4 | Beluga ForecastNet | 75.40 | 55.49 | 1.69% |
| 5 | LSTM | 79.35 | 55.97 | 1.72% |
| 6 | CBLSTM-AE | 92.27 | 66.55 | 2.01% |
| 7 | BiLSTM | 92.44 | 65.32 | 2.01% |
| 8 | ARIMA | 505.47 | 417.90 | 13.66% |
| 9 | SARIMA | 1571.88 | 1390.88 | 42.94% |
Beluga ForecastNet beats the plain CBLSTM-AE by about 18.3% RMSE and beats 5 of 8 baselines. On this compact run, CNN-LSTM is the strongest baseline, so the current honest claim is competitive performance with a clear improvement over the paper architecture before BWO tuning, not overall dominance.
Beluga ForecastNet keeps the CBLSTM-AE architecture paper-faithful and uses BWO only for hyperparameter selection.
The model architecture is:
Conv1D
-> Conv1D
-> MaxPooling1D
-> Bidirectional LSTM encoder
-> Flatten
-> RepeatVector
-> LSTM decoder
-> TimeDistributed Dense
-> TimeDistributed Dense(1)
BWO tunes:
- convolution filters
- BiLSTM encoder units
- decoder LSTM units
- TimeDistributed dense units
- learning rate
- batch size
Best checked-in BWO result:
conv_filters: 96
bilstm_units: 128
decoder_units: 64
dense_units: 16
learning_rate: 0.001
batch_size: 32
.
├── comparison_models/ # ARIMA/SARIMA and neural baselines
├── dataset/ # GEFCom2014 electricity workbook
├── docs/
│ ├── figures/ # README-ready plots
│ └── results/ # compact result tables
├── scripts/
│ ├── generate_results_report.py
│ ├── run_beluga_forecastnet.py
│ └── run_optuna_baselines.py
├── src/lfs_hdlbwo/ # Beluga ForecastNet model, BWO, metrics, dataset adapter
├── tests/ # smoke tests
├── workflow.md
├── pyproject.toml
└── requirements.txt
python3 -m venv .venv
source .venv/bin/activate
pip install -r requirements.txtThe workbook is parsed with the standard library, so openpyxl is not required.
Fast smoke test:
python3 scripts/run_beluga_forecastnet.py --smoke --no-save-model --log-level INFOMacBook-friendly run:
python3 scripts/run_beluga_forecastnet.py \
--bwo-population-size 3 \
--bwo-max-iter 2 \
--candidate-epochs 10 \
--early-stopping-patience 3 \
--window-size 48 \
--epoch-log-interval 1 \
--log-level INFOArtifacts are written to:
artifacts/beluga_forecastnet/
python3 scripts/run_optuna_baselines.py \
--window-size 48 \
--n-trials 5 \
--statistical-trials 4 \
--max-epochs 15 \
--patience 3 \
--log-level INFOArtifacts are written to:
artifacts/optuna_baseline_comparisons/
Baselines:
- ARIMA
- SARIMA
- LSTM
- GRU
- BiLSTM
- CNN-LSTM
- CNN-BiLSTM
- CBLSTM-AE
After rerunning proposed or baseline experiments:
python3 scripts/generate_results_report.pyThis updates:
docs/results/model_comparison.csv
docs/results/experiment_summary.json
docs/figures/*.png
The current checked-in GEFCom result is a single-seed run. Do not claim five-seed robustness unless the following multi-seed runs have been executed and summarized.
Proposed model over five seeds:
for seed in 11 22 33 44 55; do
python3 scripts/run_beluga_forecastnet.py \
--seed "$seed" \
--output-dir "artifacts/beluga_forecastnet_seed_${seed}" \
--bwo-population-size 3 \
--bwo-max-iter 2 \
--candidate-epochs 10 \
--early-stopping-patience 3 \
--window-size 48 \
--log-level INFO
doneBaseline robustness should use the same seeds, window, dataset slice, and holdout split. Once those artifacts exist, report mean and standard deviation for RMSE, MAE, and MAPE.
Use the GEFCom2014 electricity load track:
dataset/GEFCom2014 Data/GEFCom2014-E_V2/GEFCom2014-E.xlsx
The adapter drops the known missing target period and uses the latest known year by default. The active compact setup uses 8,760 hourly rows from 2014.
Citation:
Tao Hong, Pierre Pinson, Shu Fan, Hamidreza Zareipour, Alberto Troccoli, and Rob J. Hyndman, "Probabilistic energy forecasting: Global Energy Forecasting Competition 2014 and beyond", International Journal of Forecasting, 2016.
python3 -m compileall -q src comparison_models scripts tests
python3 -m unittest tests.smoke_testCode is released under the MIT License. See LICENSE.
Citation metadata is provided in CITATION.cff; it also includes the GEFCom2014 dataset paper reference.






