]> Piment Noir Git Repositories - freqai-strategies.git/commit
feat(quickadapter): add NGBoost regressor support with Optuna optimization (#33)
authorJérôme Benoit <jerome.benoit@piment-noir.org>
Thu, 8 Jan 2026 11:28:55 +0000 (12:28 +0100)
committerGitHub <noreply@github.com>
Thu, 8 Jan 2026 11:28:55 +0000 (12:28 +0100)
commit004cf9a11d6cb69b4d770f06cbef1d579754e29e
tree796f480fc731a4d77375965a4af3969a075a0c19
parentad61c24d488bbf9e9869b270949ca9e31a3bdca8
feat(quickadapter): add NGBoost regressor support with Optuna optimization (#33)

* feat: add NGBoost regressor support with Optuna optimization

- Add NGBoost to supported regressors (xgboost, lightgbm, histgradientboosting, ngboost)
- Install ngboost==0.5.8 in Docker image
- Implement fit_regressor branch for NGBoost with:
  - Dynamic distribution selection via get_ngboost_dist() helper
  - Support for 5 distributions: normal, lognormal, exponential, laplace, t
  - Early stopping support with validation set (X_val/Y_val API)
  - Sample weights support for training and validation
  - Optuna trial handling with random_state adjustment
  - Verbosity parameter conversion (verbosity -> verbose)
- Add Optuna hyperparameter optimization support:
  - n_estimators: [100, 1000] (log-scaled)
  - learning_rate: [0.001, 0.3] (log-scaled)
  - minibatch_frac: [0.5, 1.0] (linear)
  - col_sample: [0.3, 1.0] (linear)
  - dist: categorical [normal, lognormal]
  - Space reduction support for refined optimization
- Create get_ngboost_dist() helper function for distribution class mapping
- Default distribution: lognormal (optimal for crypto prices)
- Compatible with RMSE optimization objective (LogScore ≈ RMSE)

* docs: add ngboost to regressor enum in README

* fix: correct NGBoost parameter comment to reflect actual tuned parameters

Removed 'tree structure' from the parameter order comment since NGBoost
implementation doesn't tune tree structure parameters (only boosting,
sampling, and distribution parameters are optimized via Optuna).

* feat(ngboost): add tree structure parameter tuning

Add DecisionTreeRegressor base learner parameters for NGBoost:
- max_depth: (3, 8) based on literature and XGBoost patterns
- min_samples_split: (2, 20) following sklearn best practices
- min_samples_leaf: (1, 10) conservative range for crypto data

These parameters are passed via the Base argument to control
the underlying decision tree learners in the NGBoost ensemble.

* refine(ngboost): narrow sampling and leaf hyperparameter ranges

Refined Optuna search space based on gradient boosting research:
- min_samples_leaf: 1-8 (was 1-10)
- minibatch_frac: 0.6-1.0 (was 0.5-1.0)
- col_sample: 0.4-1.0 (was 0.3-1.0)

Ranges focused on empirically proven optimal zones for ensemble
gradient boosting methods on financial/crypto time series data.

* refactor(ngboost): move DecisionTreeRegressor import to branch start

Move sklearn.tree.DecisionTreeRegressor import to the beginning of
the NGBoost branch (after NGBRegressor import) for better code
organization and consistency with import conventions.
README.md
quickadapter/Dockerfile
quickadapter/user_data/strategies/Utils.py