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.