]> Piment Noir Git Repositories - freqai-strategies.git/commitdiff
perf(qav3): switch to geometric mean in period objective function
authorJérôme Benoit <jerome.benoit@piment-noir.org>
Mon, 31 Mar 2025 16:35:25 +0000 (18:35 +0200)
committerJérôme Benoit <jerome.benoit@piment-noir.org>
Mon, 31 Mar 2025 16:35:25 +0000 (18:35 +0200)
Signed-off-by: Jérôme Benoit <jerome.benoit@piment-noir.org>
quickadapter/user_data/freqaimodels/LightGBMRegressorQuickAdapterV3.py
quickadapter/user_data/freqaimodels/XGBoostRegressorQuickAdapterV3.py

index e070591cc1eaed8e9efbba3bc68c3da489dc9d12..9c8ffa8c8078dc1222d5e367d8d8beb024efa1e5 100644 (file)
@@ -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(
index f127eb9127762b4ca240adcdd7b243fe3c829a31..4084296176fa338a1fec657ece75110796337392 100644 (file)
@@ -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(