Skip to content

OpenSTEF Meta V0.1#771

Open
Lars800 wants to merge 114 commits intorelease/v4.0.0from
research/HybridForecaster2.0
Open

OpenSTEF Meta V0.1#771
Lars800 wants to merge 114 commits intorelease/v4.0.0from
research/HybridForecaster2.0

Conversation

@Lars800
Copy link
Collaborator

@Lars800 Lars800 commented Nov 28, 2025

Introducting OpenSTEF-Meta, a one-stop-shop for all things meta learning.

This sub-package introduces four common meta learning algorithms:

Residual Forecaster

  • 2 stage Forecasting Model
  • Primary model is fitted as usual
  • Secondary model fitted on residuals

Stacking Forecaster

  • Multiple Base Forecasters
  • Single Regressor is fitted on Base Predictions

Learned Weights Forecaster

  • Multiple Base Forecasters
  • Classification model learns optimal model weights

Rules Forecaster

  • Multiple Base Forecasters
  • Pre-defined rules on how to combine base methods.

This is an initial implementation

  • The methods have been tested on the Liander 2024 Huggingface dataset.
  • The results are accurate and improve over existing LGBM, XGBoost and GBLinear models
  • The code can still be further optimized for efficiency

Lars800 and others added 30 commits November 7, 2025 15:48
commit 37089b8
Author: Egor Dmitriev <egor.dmitriev@alliander.com>
Date:   Mon Nov 17 15:29:59 2025 +0100

    fix(#728): Fixed parallelism stability issues, and gblinear feature pipeline. (#752)

    * fix(STEF-2475): Added loky as default option for parallelism since fork causes instabilities for xgboost results.

    Signed-off-by: Egor Dmitriev <egor.dmitriev@alliander.com>

    * fix(STEF-2475): Added better support for flatliners and predicting when data is sparse.

    Signed-off-by: Egor Dmitriev <egor.dmitriev@alliander.com>

    * fix(STEF-2475): Feature handing improvements for gblinear. Like imputation, nan dropping, and checking if features are available.

    Signed-off-by: Egor Dmitriev <egor.dmitriev@alliander.com>

    * fix(#728): Added checks on metrics to gracefully handle empty data. Added flatline filtering during evalution.

    Signed-off-by: Egor Dmitriev <egor.dmitriev@alliander.com>

    * fix(#728): Updated xgboost to skip scaling on empty prediction.

    Signed-off-by: Egor Dmitriev <egor.dmitriev@alliander.com>

    * fix(STEF-2475): Added parallelism parameters.

    Signed-off-by: Egor Dmitriev <egor.dmitriev@alliander.com>

    ---------

    Signed-off-by: Egor Dmitriev <egor.dmitriev@alliander.com>

commit a85a3f7
Author: Egor Dmitriev <egor.dmitriev@alliander.com>
Date:   Fri Nov 14 14:31:34 2025 +0100

    fix(STEF-2475): Fixed rolling aggregate adder by adding forward filling and stating support for only one horizon. (#750)

    Signed-off-by: Egor Dmitriev <egor.dmitriev@alliander.com>

commit 4f0c664
Author: Egor Dmitriev <egor.dmitriev@alliander.com>
Date:   Thu Nov 13 16:54:15 2025 +0100

    feature: Disabled data cutoff by default to be consistent with openstef 3.  And other minor improvements. (#748)

commit 493126e
Author: Egor Dmitriev <egor.dmitriev@alliander.com>
Date:   Thu Nov 13 16:12:35 2025 +0100

    fix(STEF-2475) fix and refactor backtesting iction in context of backtestforecasting config for clarity. Added more colors. Fixed data split function to handle 0.0 splits. (#747)

    * fix: Fixed data collation during backtesting. Renamed horizon to prediction in context of backtestforecasting config for clarity. Added more colors. Fixed data split function to handle 0.0 splits.

    * fix: Formatting.

    Signed-off-by: Egor Dmitriev <egor.dmitriev@alliander.com>

    * fix: Formatting.

    Signed-off-by: Egor Dmitriev <egor.dmitriev@alliander.com>

    ---------

    Signed-off-by: Egor Dmitriev <egor.dmitriev@alliander.com>

commit 6b1da44
Author: Egor Dmitriev <egor.dmitriev@alliander.com>
Date:   Thu Nov 13 16:05:32 2025 +0100

    feature: forecaster hyperparams and eval metrics (#746)

    * feature(#729) Removed to_state and from_state methods in favor of builtin python state saving functions.

    Signed-off-by: Egor Dmitriev <egor.dmitriev@alliander.com>

    * feature(#729): Fixed issue where generic transform pipeline could not be serialized.

    Signed-off-by: Egor Dmitriev <egor.dmitriev@alliander.com>

    * feature(#729): Added more state saving tests

    Signed-off-by: Egor Dmitriev <egor.dmitriev@alliander.com>

    * feature(#729): Added more state saving tests

    Signed-off-by: Egor Dmitriev <egor.dmitriev@alliander.com>

    * feature(#729): Added more state saving tests

    Signed-off-by: Egor Dmitriev <egor.dmitriev@alliander.com>

    * feature: standardized objective function. Added custom evaluation functions for forecasters.

    * fix: Formatting.

    Signed-off-by: Egor Dmitriev <egor.dmitriev@alliander.com>

    ---------

    Signed-off-by: Egor Dmitriev <egor.dmitriev@alliander.com>
Signed-off-by: Lars van Someren <lvsom1@gmail.com>
Signed-off-by: Lars van Someren <lvsom1@gmail.com>
* Added Lightgbm, LightGBM Linear Trees and Hybrid Stacking Forecasters

* Fixed small issues

* Ruff compliance

* fixed quality checks

* Fixed last issues, Signed-off-by: Lars van Someren <lars.vansomeren@sia-partners.com>

* fixed comments

* Refactor LightGBM to LGBM

* Update LGBM and LGBMLinear defaults, fixed comments

* Fixed comments

* Added SkopsModelSerializer

* Fixed issues

* Gitignore optimization and dev sandbox

* Added MultiQuantileAdapter Class

* small fix

* Hybrid V2

* Small fix

* Squashed commit of the following:

commit 37089b8
Author: Egor Dmitriev <egor.dmitriev@alliander.com>
Date:   Mon Nov 17 15:29:59 2025 +0100

    fix(#728): Fixed parallelism stability issues, and gblinear feature pipeline. (#752)

    * fix(STEF-2475): Added loky as default option for parallelism since fork causes instabilities for xgboost results.

    Signed-off-by: Egor Dmitriev <egor.dmitriev@alliander.com>

    * fix(STEF-2475): Added better support for flatliners and predicting when data is sparse.

    Signed-off-by: Egor Dmitriev <egor.dmitriev@alliander.com>

    * fix(STEF-2475): Feature handing improvements for gblinear. Like imputation, nan dropping, and checking if features are available.

    Signed-off-by: Egor Dmitriev <egor.dmitriev@alliander.com>

    * fix(#728): Added checks on metrics to gracefully handle empty data. Added flatline filtering during evalution.

    Signed-off-by: Egor Dmitriev <egor.dmitriev@alliander.com>

    * fix(#728): Updated xgboost to skip scaling on empty prediction.

    Signed-off-by: Egor Dmitriev <egor.dmitriev@alliander.com>

    * fix(STEF-2475): Added parallelism parameters.

    Signed-off-by: Egor Dmitriev <egor.dmitriev@alliander.com>

    ---------

    Signed-off-by: Egor Dmitriev <egor.dmitriev@alliander.com>

commit a85a3f7
Author: Egor Dmitriev <egor.dmitriev@alliander.com>
Date:   Fri Nov 14 14:31:34 2025 +0100

    fix(STEF-2475): Fixed rolling aggregate adder by adding forward filling and stating support for only one horizon. (#750)

    Signed-off-by: Egor Dmitriev <egor.dmitriev@alliander.com>

commit 4f0c664
Author: Egor Dmitriev <egor.dmitriev@alliander.com>
Date:   Thu Nov 13 16:54:15 2025 +0100

    feature: Disabled data cutoff by default to be consistent with openstef 3.  And other minor improvements. (#748)

commit 493126e
Author: Egor Dmitriev <egor.dmitriev@alliander.com>
Date:   Thu Nov 13 16:12:35 2025 +0100

    fix(STEF-2475) fix and refactor backtesting iction in context of backtestforecasting config for clarity. Added more colors. Fixed data split function to handle 0.0 splits. (#747)

    * fix: Fixed data collation during backtesting. Renamed horizon to prediction in context of backtestforecasting config for clarity. Added more colors. Fixed data split function to handle 0.0 splits.

    * fix: Formatting.

    Signed-off-by: Egor Dmitriev <egor.dmitriev@alliander.com>

    * fix: Formatting.

    Signed-off-by: Egor Dmitriev <egor.dmitriev@alliander.com>

    ---------

    Signed-off-by: Egor Dmitriev <egor.dmitriev@alliander.com>

commit 6b1da44
Author: Egor Dmitriev <egor.dmitriev@alliander.com>
Date:   Thu Nov 13 16:05:32 2025 +0100

    feature: forecaster hyperparams and eval metrics (#746)

    * feature(#729) Removed to_state and from_state methods in favor of builtin python state saving functions.

    Signed-off-by: Egor Dmitriev <egor.dmitriev@alliander.com>

    * feature(#729): Fixed issue where generic transform pipeline could not be serialized.

    Signed-off-by: Egor Dmitriev <egor.dmitriev@alliander.com>

    * feature(#729): Added more state saving tests

    Signed-off-by: Egor Dmitriev <egor.dmitriev@alliander.com>

    * feature(#729): Added more state saving tests

    Signed-off-by: Egor Dmitriev <egor.dmitriev@alliander.com>

    * feature(#729): Added more state saving tests

    Signed-off-by: Egor Dmitriev <egor.dmitriev@alliander.com>

    * feature: standardized objective function. Added custom evaluation functions for forecasters.

    * fix: Formatting.

    Signed-off-by: Egor Dmitriev <egor.dmitriev@alliander.com>

    ---------

    Signed-off-by: Egor Dmitriev <egor.dmitriev@alliander.com>

* set silence

* small fix

* Fix final learner

* fixed lgbm efficiency

* updated lgbm linear params

* Fixed type and quality issues

* remove depricated files

Signed-off-by: Lars van Someren <lvsom1@gmail.com>

* change: Fixed dependencies to align more with the current release.

Signed-off-by: Egor Dmitriev <egor.dmitriev@alliander.com>

* change: Style fixes.

Signed-off-by: Egor Dmitriev <egor.dmitriev@alliander.com>

---------

Signed-off-by: Lars van Someren <lvsom1@gmail.com>
Signed-off-by: Egor Dmitriev <egor.dmitriev@alliander.com>
Co-authored-by: Egor Dmitriev <egor.dmitriev@alliander.com>
Signed-off-by: Lars van Someren <lvsom1@gmail.com>
Signed-off-by: Marnix van Lieshout <marnix.van.lieshout@alliander.com>
Signed-off-by: Marnix van Lieshout <marnix.van.lieshout@alliander.com>
Signed-off-by: Marnix van Lieshout <marnix.van.lieshout@alliander.com>
Signed-off-by: Marnix van Lieshout <marnix.van.lieshout@alliander.com>
Signed-off-by: Marnix van Lieshout <marnix.van.lieshout@alliander.com>
Signed-off-by: Marnix van Lieshout <marnix.van.lieshout@alliander.com>
Signed-off-by: Marnix van Lieshout <marnix.van.lieshout@alliander.com>
Signed-off-by: Marnix van Lieshout <marnix.van.lieshout@alliander.com>
Signed-off-by: Marnix van Lieshout <marnix.van.lieshout@alliander.com>
Signed-off-by: Marnix van Lieshout <marnix.van.lieshout@alliander.com>
Signed-off-by: Marnix van Lieshout <marnix.van.lieshout@alliander.com>
Signed-off-by: Marnix van Lieshout <marnix.van.lieshout@alliander.com>
Signed-off-by: Marnix van Lieshout <marnix.van.lieshout@alliander.com>
Signed-off-by: Marnix van Lieshout <marnix.van.lieshout@alliander.com>
Signed-off-by: Marnix van Lieshout <marnix.van.lieshout@alliander.com>
Signed-off-by: Marnix van Lieshout <marnix.van.lieshout@alliander.com>
Signed-off-by: Marnix van Lieshout <marnix.van.lieshout@alliander.com>
Signed-off-by: Marnix van Lieshout <marnix.van.lieshout@alliander.com>
Signed-off-by: Marnix van Lieshout <marnix.van.lieshout@alliander.com>
Signed-off-by: Marnix van Lieshout <marnix.van.lieshout@alliander.com>
Signed-off-by: Marnix van Lieshout <marnix.van.lieshout@alliander.com>
Signed-off-by: Marnix van Lieshout <marnix.van.lieshout@alliander.com>
Signed-off-by: Marnix van Lieshout <marnix.van.lieshout@alliander.com>
Signed-off-by: Marnix van Lieshout <marnix.van.lieshout@alliander.com>
Copy link

Copilot AI left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

Copilot reviewed 59 out of 67 changed files in this pull request and generated no new comments.


💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.

Signed-off-by: Marnix van Lieshout <marnix.van.lieshout@alliander.com>
Signed-off-by: Marnix van Lieshout <marnix.van.lieshout@alliander.com>
Signed-off-by: Marnix van Lieshout <marnix.van.lieshout@alliander.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

feature New feature or request OpenSTEF 4.0 Work for OpenSTEF 4.0 OpenSTEF-Meta

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants

Comments