From 383f13d8c2cf5d9048f6d7e1cdc03487bb18c4b7 Mon Sep 17 00:00:00 2001 From: =?utf8?q?J=C3=A9r=C3=B4me=20Benoit?= Date: Mon, 25 Aug 2025 15:09:46 +0200 Subject: [PATCH] refactor(qav3): cleanup predictions thresholds computation MIME-Version: 1.0 Content-Type: text/plain; charset=utf8 Content-Transfer-Encoding: 8bit Signed-off-by: Jérôme Benoit --- .../freqaimodels/QuickAdapterRegressorV3.py | 22 +++++++++---------- 1 file changed, 10 insertions(+), 12 deletions(-) diff --git a/quickadapter/user_data/freqaimodels/QuickAdapterRegressorV3.py b/quickadapter/user_data/freqaimodels/QuickAdapterRegressorV3.py index 3b9e7c4..1d67c25 100644 --- a/quickadapter/user_data/freqaimodels/QuickAdapterRegressorV3.py +++ b/quickadapter/user_data/freqaimodels/QuickAdapterRegressorV3.py @@ -547,7 +547,10 @@ class QuickAdapterRegressorV3(BaseRegressionModel): max(2, int(label_period_cycles)) * label_period_candles, ) ) - pred_extrema = pred_df.get(EXTREMA_COLUMN).iloc[-thresholds_candles:] + pred_extrema = pred_df.get(EXTREMA_COLUMN).iloc[-thresholds_candles:].copy() + pred_minima, pred_maxima = QuickAdapterRegressorV3.get_pred_min_max( + pred_extrema + ) thresholds_smoothing = str( self.freqai_info.get("prediction_thresholds_smoothing", "mean") ) @@ -568,11 +571,11 @@ class QuickAdapterRegressorV3(BaseRegressionModel): self.freqai_info.get("prediction_thresholds_alpha", 12.0) ) return QuickAdapterRegressorV3.soft_extremum_min_max( - pred_extrema, thresholds_alpha + pred_minima, pred_maxima, thresholds_alpha ) elif thresholds_smoothing in skimage_thresholds_smoothing_methods: return QuickAdapterRegressorV3.skimage_min_max( - pred_extrema, thresholds_smoothing + pred_minima, pred_maxima, thresholds_smoothing ) else: raise ValueError( @@ -626,13 +629,10 @@ class QuickAdapterRegressorV3(BaseRegressionModel): @staticmethod def soft_extremum_min_max( - pred_extrema: pd.Series, alpha: float + pred_minima: pd.Series, pred_maxima: pd.Series, alpha: float ) -> tuple[float, float]: if alpha < 0: raise ValueError("alpha must be non-negative") - pred_minima, pred_maxima = QuickAdapterRegressorV3.get_pred_min_max( - pred_extrema - ) soft_minimum = soft_extremum(pred_minima, alpha=-alpha) if not np.isfinite(soft_minimum): soft_minimum = QuickAdapterRegressorV3.safe_min_pred(pred_extrema) @@ -642,11 +642,9 @@ class QuickAdapterRegressorV3(BaseRegressionModel): return soft_minimum, soft_maximum @staticmethod - def skimage_min_max(pred_extrema: pd.Series, method: str) -> tuple[float, float]: - pred_minima, pred_maxima = QuickAdapterRegressorV3.get_pred_min_max( - pred_extrema - ) - + def skimage_min_max( + pred_minima: pd.Series, pred_maxima: pd.Series, method: str + ) -> tuple[float, float]: method_functions = { "isodata": QuickAdapterRegressorV3.apply_skimage_threshold, "li": QuickAdapterRegressorV3.apply_skimage_threshold, -- 2.43.0