]> Piment Noir Git Repositories - freqai-strategies.git/commit
feat(quickadapter): Add configurable feature normalization to QuickAdapterRegressorV3...
authorJérôme Benoit <jerome.benoit@piment-noir.org>
Mon, 5 Jan 2026 15:32:12 +0000 (16:32 +0100)
committerGitHub <noreply@github.com>
Mon, 5 Jan 2026 15:32:12 +0000 (16:32 +0100)
commitb13b7c2527ff51d5624e49cf736b9941b302c654
treefa91e8d1d54df30ee7331682a932bf90d7684da7
parent57be492d49c3fe58f54c862b9fe81271a9317e02
feat(quickadapter): Add configurable feature normalization to QuickAdapterRegressorV3 (#31)

* feat(quickadapter): add configurable feature normalization to data pipeline

Add support for configurable feature scaling/normalization in QuickAdapterRegressorV3
via define_data_pipeline() override. Users can now select different sklearn scalers
through feature_parameters configuration.

Supported normalization methods:
- minmax: MinMaxScaler with configurable range (default: -1 to 1)
- maxabs: MaxAbsScaler (scales by max absolute value)
- standard: StandardScaler (zero mean, unit variance)
- robust: RobustScaler (uses median and IQR, robust to outliers)

Configuration example:
{
  "freqai": {
    "feature_parameters": {
      "normalization": "minmax",
      "normalization_range": [-1, 1]
    }
  }
}

Implementation details:
- Overrides define_data_pipeline() to replace scalers in pipeline
- Optimizes default case (minmax with -1,1 range) by using parent pipeline
- Replaces both 'scaler' and 'post-pca-scaler' steps with selected scaler
- normalization_range parameter only applies to minmax scaler

Note: Changing normalization config requires deleting existing models
(rm -rf user_data/models/*) due to pipeline serialization.

* fix(quickadapter): address PR review comments for feature normalization

- Remove unused 'datasieve as ds' import
- Add validation for normalization parameter using _validate_enum_value
- Add comprehensive validation for normalization_range (type, length, values, min < max)
- Fix tuple/list comparison by using tuple() conversion
- Store normalization_range in variable to avoid fetching twice
- Optimize scaler creation by creating once instead of calling get_scaler() multiple times

* refactor(quickadapter): harmonize validation error messages with codebase style

- Use consistent 'Invalid {param} {type}:' format matching existing patterns
- Remove unnecessary try-except block around float conversion
- Simplify error messages to be more concise
- Let float() raise its own errors for non-numeric values

* refactor(quickadapter): rename data pipeline parameters for clarity

- Rename ft_params.normalization → ft_params.scaler
- Rename ft_params.normalization_range → ft_params.range
- Add ScalerType Literal and _SCALER_TYPES constant
- Document new parameters in README

More intuitive naming that better reflects sklearn terminology.

* docs(README.md): format

Signed-off-by: Jérôme Benoit <jerome.benoit@piment-noir.org>
* refactor(quickadapter): rename data pipeline parameters for clarity

- Rename ft_params.normalization → ft_params.scaler
- Rename ft_params.normalization_range → ft_params.range
- Add ScalerType Literal and _SCALER_TYPES constant
- Document new parameters in README under feature_parameters section

More intuitive naming that better reflects sklearn terminology.
Users configure these via freqai.feature_parameters.* in config.json.

* fix(quickadapter): address PR review comments for feature normalization

- Extract hardcoded defaults to class constants (SCALER_DEFAULT, RANGE_DEFAULT)
- Remove redundant tuple() call in feature_range comparison
- Follow codebase pattern for default values similar to other constants

* Apply suggestion from @Copilot

Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>
* docs(README): add note about model retraining for scaler changes

* docs(README): clarify extrema weighting strategy requires model retraining

Only switching between 'none' and other strategies changes the label pipeline.
Other parameter changes within the same strategy do not require retraining.

* docs(README): format

Signed-off-by: Jérôme Benoit <jerome.benoit@piment-noir.org>
* chore: bump model and strategy version to 3.10.3

---------

Signed-off-by: Jérôme Benoit <jerome.benoit@piment-noir.org>
Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>
README.md
quickadapter/user_data/freqaimodels/QuickAdapterRegressorV3.py
quickadapter/user_data/strategies/QuickAdapterV3.py