From 7f79732386875217fdee6e7f369c03741585671c Mon Sep 17 00:00:00 2001 From: =?utf8?q?J=C3=A9r=C3=B4me=20Benoit?= Date: Tue, 10 Jun 2025 15:08:27 +0200 Subject: [PATCH] perf(qav3): reduce optuna train search space MIME-Version: 1.0 Content-Type: text/plain; charset=utf8 Content-Transfer-Encoding: 8bit Signed-off-by: Jérôme Benoit --- .../freqaimodels/QuickAdapterRegressorV3.py | 38 +++++++++---------- 1 file changed, 18 insertions(+), 20 deletions(-) diff --git a/quickadapter/user_data/freqaimodels/QuickAdapterRegressorV3.py b/quickadapter/user_data/freqaimodels/QuickAdapterRegressorV3.py index 6f1fbc3..3881524 100644 --- a/quickadapter/user_data/freqaimodels/QuickAdapterRegressorV3.py +++ b/quickadapter/user_data/freqaimodels/QuickAdapterRegressorV3.py @@ -1029,21 +1029,11 @@ def train_objective( candles_step: int, model_training_parameters: dict, ) -> float: - min_train_window: int = fit_live_predictions_candles * int(round(1 / test_size - 1)) - max_train_window: int = len(X) - if max_train_window < min_train_window: - min_train_window = max_train_window - train_window: int = trial.suggest_int( - "train_period_candles", min_train_window, max_train_window, step=candles_step - ) - X = X.iloc[-train_window:] - y = y.iloc[-train_window:] - train_weights = train_weights[-train_window:] - - min_test_window: int = fit_live_predictions_candles + min_test_window: int = fit_live_predictions_candles * 2 + if len(X_test) < min_test_window: + logger.warning(f"Insufficient test data: {len(X_test)} < {min_test_window}") + return np.inf max_test_window: int = len(X_test) - if max_test_window < min_test_window: - min_test_window = max_test_window test_window: int = trial.suggest_int( "test_period_candles", min_test_window, max_test_window, step=candles_step ) @@ -1051,6 +1041,18 @@ def train_objective( y_test = y_test.iloc[-test_window:] test_weights = test_weights[-test_window:] + min_train_window: int = min_test_window * int(round(1 / test_size - 1)) + if len(X) < min_train_window: + logger.warning(f"Insufficient train data: {len(X)} < {min_train_window}") + return np.inf + max_train_window: int = len(X) + train_window: int = trial.suggest_int( + "train_period_candles", min_train_window, max_train_window, step=candles_step + ) + X = X.iloc[-train_window:] + y = y.iloc[-train_window:] + train_weights = train_weights[-train_window:] + model = fit_regressor( regressor=regressor, X=X, @@ -1063,12 +1065,10 @@ def train_objective( ) y_pred = model.predict(X_test) - error = sklearn.metrics.root_mean_squared_error( + return sklearn.metrics.root_mean_squared_error( y_test, y_pred, sample_weight=test_weights ) - return error - def get_optuna_study_model_parameters( trial: optuna.trial.Trial, regressor: str @@ -1129,12 +1129,10 @@ def hp_objective( ) y_pred = model.predict(X_test) - error = sklearn.metrics.root_mean_squared_error( + return sklearn.metrics.root_mean_squared_error( y_test, y_pred, sample_weight=test_weights ) - return error - def calculate_quantile(values: np.ndarray, value: float) -> float: if values.size == 0: -- 2.43.0