What's Changed
LoadML Improvements
Significant rework of the ML load forecasting system (load_predictor.py).
Model version has been bumped to 10. Any existing saved model will be automatically retrained on first run after upgrade.
What's New
-
Curriculum training — The model now trains in multiple passes over progressively larger windows of historical data (oldest → newest), improving convergence and generalisation before fine-tuning on the full dataset.
-
Inverted dropout (10%) — Dropout regularisation is applied during training to reduce overfitting. Inference requires no scaling adjustment.
-
Huber loss — Training loss replaced from MSE to Huber loss (δ=1.35), making the model more robust to outlier load spikes.
-
Improved early stopping — The stopping metric now combines MAE with median prediction bias (
MAE × 0.5 + |bias|), with EMA smoothing (α=0.3) to suppress epoch-to-epoch oscillation. -
Cosine learning rate decay — Learning rate anneals from
lr_maxdown to0.1 × lr_maxover training, replacing the fixed rate. -
Day-of-year seasonality features — Two additional time features (
sin/cosof day-of-year) added for annual seasonal awareness. Total time features: 6 (up from 4). -
Day-of-week aware daily pattern blending — Historical blending now maintains 7 separate per-weekday profiles (plus a global fallback), rather than a single average pattern.
-
AR rollout diagnostic — After training, an autoregressive multi-step rollout is run over the validation holdout and the drift vs. teacher-forced MAE is logged.
-
Network architecture — Hidden layers changed from
[512, 256, 128, 64]to[512, 256, 64]. -
Training scheduling — Initial training is no longer triggered at component startup. Fine-tuning is age-based and uses curriculum training.
- LoadML improvements by @springfall2008 in #3441
Full Changelog: v8.33.6...v8.33.7