From: Jérôme Benoit Date: Mon, 31 Mar 2025 16:35:25 +0000 (+0200) Subject: perf(qav3): switch to geometric mean in period objective function X-Git-Url: https://git.piment-noir.org/?a=commitdiff_plain;h=3c3de2e69f3a2f25b3b755d55045a47f91ce8c2b;p=freqai-strategies.git perf(qav3): switch to geometric mean in period objective function Signed-off-by: Jérôme Benoit --- diff --git a/quickadapter/user_data/freqaimodels/LightGBMRegressorQuickAdapterV3.py b/quickadapter/user_data/freqaimodels/LightGBMRegressorQuickAdapterV3.py index e070591..9c8ffa8 100644 --- a/quickadapter/user_data/freqaimodels/LightGBMRegressorQuickAdapterV3.py +++ b/quickadapter/user_data/freqaimodels/LightGBMRegressorQuickAdapterV3.py @@ -1,6 +1,6 @@ import logging import json -from statistics import fmean +from statistics import geometric_mean from typing import Any from pathlib import Path @@ -43,7 +43,7 @@ class LightGBMRegressorQuickAdapterV3(BaseRegressionModel): https://github.com/sponsors/robcaulk """ - version = "3.6.0" + version = "3.6.1" def __init__(self, **kwargs): super().__init__(**kwargs) @@ -619,28 +619,25 @@ def period_objective( label_windows_length: int = ( fit_live_predictions_candles // label_window ) * label_window - y_test = y_test.iloc[-label_windows_length:].to_numpy() - test_weights = test_weights[-label_windows_length:] - y_pred = y_pred[-label_windows_length:] - y_test = [ - y_test[i : i + label_window] + y_test_period = [ + y_test.iloc[-label_windows_length:].to_numpy()[i : i + label_window] for i in range(0, label_windows_length, label_window) ] - test_weights = [ - test_weights[i : i + label_window] + test_weights_period = [ + test_weights[-label_windows_length:][i : i + label_window] for i in range(0, label_windows_length, label_window) ] - y_pred = [ - y_pred[i : i + label_window] + y_pred_period = [ + y_pred[-label_windows_length:][i : i + label_window] for i in range(0, label_windows_length, label_window) ] errors = [ sklearn.metrics.root_mean_squared_error(y_t, y_p, sample_weight=t_w) - for y_t, y_p, t_w in zip(y_test, y_pred, test_weights) + for y_t, y_p, t_w in zip(y_test_period, y_pred_period, test_weights_period) ] - return fmean(errors) + return geometric_mean(errors) def hp_objective( diff --git a/quickadapter/user_data/freqaimodels/XGBoostRegressorQuickAdapterV3.py b/quickadapter/user_data/freqaimodels/XGBoostRegressorQuickAdapterV3.py index f127eb9..4084296 100644 --- a/quickadapter/user_data/freqaimodels/XGBoostRegressorQuickAdapterV3.py +++ b/quickadapter/user_data/freqaimodels/XGBoostRegressorQuickAdapterV3.py @@ -1,6 +1,6 @@ import logging import json -from statistics import fmean +from statistics import geometric_mean from typing import Any from pathlib import Path @@ -43,7 +43,7 @@ class XGBoostRegressorQuickAdapterV3(BaseRegressionModel): https://github.com/sponsors/robcaulk """ - version = "3.6.0" + version = "3.6.1" def __init__(self, **kwargs): super().__init__(**kwargs) @@ -627,28 +627,25 @@ def period_objective( label_windows_length: int = ( fit_live_predictions_candles // label_window ) * label_window - y_test = y_test.iloc[-label_windows_length:].to_numpy() - test_weights = test_weights[-label_windows_length:] - y_pred = y_pred[-label_windows_length:] - y_test = [ - y_test[i : i + label_window] + y_test_period = [ + y_test.iloc[-label_windows_length:].to_numpy()[i : i + label_window] for i in range(0, label_windows_length, label_window) ] - test_weights = [ - test_weights[i : i + label_window] + test_weights_period = [ + test_weights[-label_windows_length:][i : i + label_window] for i in range(0, label_windows_length, label_window) ] - y_pred = [ - y_pred[i : i + label_window] + y_pred_period = [ + y_pred[-label_windows_length:][i : i + label_window] for i in range(0, label_windows_length, label_window) ] errors = [ sklearn.metrics.root_mean_squared_error(y_t, y_p, sample_weight=t_w) - for y_t, y_p, t_w in zip(y_test, y_pred, test_weights) + for y_t, y_p, t_w in zip(y_test_period, y_pred_period, test_weights_period) ] - return fmean(errors) + return geometric_mean(errors) def hp_objective(