Skip to content

Commit 511a0e8

Browse files
committed
fix seasonality bug in theta forecaster
1 parent 38be2ba commit 511a0e8

File tree

2 files changed

+15
-3
lines changed

2 files changed

+15
-3
lines changed

ads/opctl/operator/lowcode/forecast/model/theta.py

Lines changed: 14 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@
88
import optuna
99
import pandas as pd
1010
from joblib import Parallel, delayed
11+
from optuna.trial import TrialState
1112
from sktime.forecasting.base import ForecastingHorizon
1213
from sktime.forecasting.theta import ThetaForecaster
1314
from sktime.performance_metrics.forecasting import mean_squared_error, \
@@ -100,8 +101,6 @@ def _train_model(self, i, series_id, df: pd.DataFrame, model_kwargs: Dict[str, A
100101
target = self.spec.target_column
101102

102103
freq_str, sp = normalize_freq(data_i.index)
103-
if freq_str is not None:
104-
data_i = data_i.asfreq(freq_str)
105104

106105
y = data_i[target]
107106

@@ -252,6 +251,19 @@ def objective(trial):
252251
study = optuna.create_study(direction="minimize")
253252
trials = DEFAULT_TRIALS if self.spec.tuning.n_trials is None else self.spec.tuning.n_trials
254253
study.optimize(objective, n_trials=trials)
254+
255+
completed_trials = [
256+
t for t in study.trials
257+
if t.state == TrialState.COMPLETE
258+
]
259+
260+
if not completed_trials:
261+
print(
262+
"Theta tuning produced no completed trials. "
263+
"Falling back to default parameters."
264+
)
265+
return model_kwargs_i
266+
255267
model_kwargs_i["deseasonalize_model"] = study.best_params["deseasonalize_model"]
256268
model_kwargs_i["deseasonalize"] = study.best_params["deseasonalize"]
257269
return model_kwargs_i

tests/operators/forecast/test_errors.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -817,7 +817,7 @@ def test_date_format(operator_setup, model):
817817
@pytest.mark.parametrize("model", MODELS)
818818
def test_what_if_analysis(operator_setup, model):
819819
os.environ["TEST_MODE"] = "True"
820-
if model in ["auto-select", "lgbforecast"]:
820+
if model in ["auto-select", "lgbforecast", "theta"]:
821821
pytest.skip("Skipping what-if scenario for auto-select")
822822
tmpdirname = operator_setup
823823
historical_data_path, additional_data_path = setup_small_rossman()

0 commit comments

Comments
 (0)