From 5e740319740e8fdc1ea995abab2b236327bd1537 Mon Sep 17 00:00:00 2001 From: mvakhmenin <84391322+mvakhmenin@users.noreply.github.com> Date: Wed, 22 Jun 2022 10:35:21 +0300 Subject: [PATCH 01/28] Update base.py --- etna/pipeline/base.py | 2 ++ 1 file changed, 2 insertions(+) diff --git a/etna/pipeline/base.py b/etna/pipeline/base.py index fdad36708..4c4aff505 100644 --- a/etna/pipeline/base.py +++ b/etna/pipeline/base.py @@ -444,7 +444,9 @@ def _get_backtest_forecasts(self) -> pd.DataFrame: if self._folds is None: raise ValueError("Something went wrong during backtest initialization!") forecasts_list = [] + print('self._folds.items()', self._folds.items()) for fold_number, fold_info in self._folds.items(): + print('fold_number:', fold_number, ' | ', 'fold_info:', fold_info) forecast_ts = fold_info["forecast"] segments = forecast_ts.segments forecast = forecast_ts.df From 53d381186e8c699bd2f1a05c4707815302931fcd Mon Sep 17 00:00:00 2001 From: mvakhmenin <84391322+mvakhmenin@users.noreply.github.com> Date: Wed, 22 Jun 2022 11:17:35 +0300 Subject: [PATCH 02/28] Update base.py --- etna/pipeline/base.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/etna/pipeline/base.py b/etna/pipeline/base.py index 4c4aff505..f39a1044c 100644 --- a/etna/pipeline/base.py +++ b/etna/pipeline/base.py @@ -452,7 +452,7 @@ def _get_backtest_forecasts(self) -> pd.DataFrame: forecast = forecast_ts.df fold_number_df = pd.DataFrame( np.tile(fold_number, (forecast.index.shape[0], len(segments))), - columns=pd.MultiIndex.from_product([segments, [self._fold_column]], names=("segment", "feature")), + columns=pd.MultiIndex.from_product([segments, [self._fold_column]], names=("segment111", "feature222")), index=forecast.index, ) forecast = forecast.join(fold_number_df) From 3633a0c94d3d63f822595ee811587064aa5e2ea2 Mon Sep 17 00:00:00 2001 From: mvakhmenin <84391322+mvakhmenin@users.noreply.github.com> Date: Wed, 22 Jun 2022 12:17:19 +0300 Subject: [PATCH 03/28] Update base.py --- etna/pipeline/base.py | 2 ++ 1 file changed, 2 insertions(+) diff --git a/etna/pipeline/base.py b/etna/pipeline/base.py index f39a1044c..4e2405ca2 100644 --- a/etna/pipeline/base.py +++ b/etna/pipeline/base.py @@ -450,11 +450,13 @@ def _get_backtest_forecasts(self) -> pd.DataFrame: forecast_ts = fold_info["forecast"] segments = forecast_ts.segments forecast = forecast_ts.df + print(forecast) fold_number_df = pd.DataFrame( np.tile(fold_number, (forecast.index.shape[0], len(segments))), columns=pd.MultiIndex.from_product([segments, [self._fold_column]], names=("segment111", "feature222")), index=forecast.index, ) + print(fold_number_df) forecast = forecast.join(fold_number_df) forecasts_list.append(forecast) forecasts = pd.concat(forecasts_list) From b93ead71dc17567ba046eedbb81131bad1f61193 Mon Sep 17 00:00:00 2001 From: mvakhmenin <84391322+mvakhmenin@users.noreply.github.com> Date: Wed, 22 Jun 2022 13:13:39 +0300 Subject: [PATCH 04/28] Update base.py --- etna/pipeline/base.py | 7 ++----- 1 file changed, 2 insertions(+), 5 deletions(-) diff --git a/etna/pipeline/base.py b/etna/pipeline/base.py index 4e2405ca2..108117e48 100644 --- a/etna/pipeline/base.py +++ b/etna/pipeline/base.py @@ -444,22 +444,19 @@ def _get_backtest_forecasts(self) -> pd.DataFrame: if self._folds is None: raise ValueError("Something went wrong during backtest initialization!") forecasts_list = [] - print('self._folds.items()', self._folds.items()) for fold_number, fold_info in self._folds.items(): - print('fold_number:', fold_number, ' | ', 'fold_info:', fold_info) forecast_ts = fold_info["forecast"] segments = forecast_ts.segments forecast = forecast_ts.df - print(forecast) fold_number_df = pd.DataFrame( np.tile(fold_number, (forecast.index.shape[0], len(segments))), - columns=pd.MultiIndex.from_product([segments, [self._fold_column]], names=("segment111", "feature222")), + columns=pd.MultiIndex.from_product([segments, ["fold_info"]], names=("segment111", "feature222")), index=forecast.index, ) - print(fold_number_df) forecast = forecast.join(fold_number_df) forecasts_list.append(forecast) forecasts = pd.concat(forecasts_list) + forecasts.sort_index(axis='columns', ascending=[True, False], inplace=True) return forecasts def _prepare_fold_masks(self, ts: TSDataset, masks: Union[int, List[FoldMask]], mode: str) -> List[FoldMask]: From e966f63ff6953044fd54664b83fcaee4ab0fa84a Mon Sep 17 00:00:00 2001 From: mvakhmenin <84391322+mvakhmenin@users.noreply.github.com> Date: Wed, 22 Jun 2022 13:14:49 +0300 Subject: [PATCH 05/28] Update base.py --- etna/pipeline/base.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/etna/pipeline/base.py b/etna/pipeline/base.py index 108117e48..10d9437e1 100644 --- a/etna/pipeline/base.py +++ b/etna/pipeline/base.py @@ -456,7 +456,7 @@ def _get_backtest_forecasts(self) -> pd.DataFrame: forecast = forecast.join(fold_number_df) forecasts_list.append(forecast) forecasts = pd.concat(forecasts_list) - forecasts.sort_index(axis='columns', ascending=[True, False], inplace=True) + forecasts.sort_index(axis="columns", ascending=[True, False], inplace=True) return forecasts def _prepare_fold_masks(self, ts: TSDataset, masks: Union[int, List[FoldMask]], mode: str) -> List[FoldMask]: From 461ffa2c784870c27ee324e271e874b126c5ffd2 Mon Sep 17 00:00:00 2001 From: mvakhmenin <84391322+mvakhmenin@users.noreply.github.com> Date: Wed, 22 Jun 2022 13:20:37 +0300 Subject: [PATCH 06/28] Update base.py --- etna/pipeline/base.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/etna/pipeline/base.py b/etna/pipeline/base.py index 10d9437e1..7633554fb 100644 --- a/etna/pipeline/base.py +++ b/etna/pipeline/base.py @@ -450,7 +450,7 @@ def _get_backtest_forecasts(self) -> pd.DataFrame: forecast = forecast_ts.df fold_number_df = pd.DataFrame( np.tile(fold_number, (forecast.index.shape[0], len(segments))), - columns=pd.MultiIndex.from_product([segments, ["fold_info"]], names=("segment111", "feature222")), + columns=pd.MultiIndex.from_product([segments, ["fold_info"]], names=("segment", "feature")), index=forecast.index, ) forecast = forecast.join(fold_number_df) From 3dec66bb1dbcb3810183f3f7b5ee1a42842726ea Mon Sep 17 00:00:00 2001 From: mvakhmenin <84391322+mvakhmenin@users.noreply.github.com> Date: Thu, 23 Jun 2022 14:00:51 +0300 Subject: [PATCH 07/28] Update base.py --- etna/pipeline/base.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/etna/pipeline/base.py b/etna/pipeline/base.py index 7633554fb..8a2c37faf 100644 --- a/etna/pipeline/base.py +++ b/etna/pipeline/base.py @@ -450,7 +450,7 @@ def _get_backtest_forecasts(self) -> pd.DataFrame: forecast = forecast_ts.df fold_number_df = pd.DataFrame( np.tile(fold_number, (forecast.index.shape[0], len(segments))), - columns=pd.MultiIndex.from_product([segments, ["fold_info"]], names=("segment", "feature")), + columns=pd.MultiIndex.from_product([segments, [self._fold_column]], names=("segment", "feature")), index=forecast.index, ) forecast = forecast.join(fold_number_df) From 7414e14f373ea899375ca9721cd0262ac9171f83 Mon Sep 17 00:00:00 2001 From: mvakhmenin <84391322+mvakhmenin@users.noreply.github.com> Date: Tue, 28 Jun 2022 16:55:04 +0300 Subject: [PATCH 08/28] Update base.py --- etna/pipeline/base.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/etna/pipeline/base.py b/etna/pipeline/base.py index 8a2c37faf..4e0407951 100644 --- a/etna/pipeline/base.py +++ b/etna/pipeline/base.py @@ -456,7 +456,7 @@ def _get_backtest_forecasts(self) -> pd.DataFrame: forecast = forecast.join(fold_number_df) forecasts_list.append(forecast) forecasts = pd.concat(forecasts_list) - forecasts.sort_index(axis="columns", ascending=[True, False], inplace=True) + forecasts.sort_index(axis="columns", inplace=True) return forecasts def _prepare_fold_masks(self, ts: TSDataset, masks: Union[int, List[FoldMask]], mode: str) -> List[FoldMask]: From a5a6677df875bc006703e36ef89fc0db0595a932 Mon Sep 17 00:00:00 2001 From: mvakhmenin <84391322+mvakhmenin@users.noreply.github.com> Date: Thu, 30 Jun 2022 09:38:41 +0300 Subject: [PATCH 09/28] Update base.py --- etna/pipeline/base.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/etna/pipeline/base.py b/etna/pipeline/base.py index 4e0407951..c5aa968e7 100644 --- a/etna/pipeline/base.py +++ b/etna/pipeline/base.py @@ -456,7 +456,7 @@ def _get_backtest_forecasts(self) -> pd.DataFrame: forecast = forecast.join(fold_number_df) forecasts_list.append(forecast) forecasts = pd.concat(forecasts_list) - forecasts.sort_index(axis="columns", inplace=True) + forecasts.sort_index(axis=1, inplace=True) return forecasts def _prepare_fold_masks(self, ts: TSDataset, masks: Union[int, List[FoldMask]], mode: str) -> List[FoldMask]: From c4000827c397424a90501e5c2bd297735c99013a Mon Sep 17 00:00:00 2001 From: mvakhmenin <84391322+mvakhmenin@users.noreply.github.com> Date: Thu, 30 Jun 2022 09:53:28 +0300 Subject: [PATCH 10/28] Update base.py --- etna/pipeline/base.py | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/etna/pipeline/base.py b/etna/pipeline/base.py index c5aa968e7..2ee2b5385 100644 --- a/etna/pipeline/base.py +++ b/etna/pipeline/base.py @@ -456,8 +456,7 @@ def _get_backtest_forecasts(self) -> pd.DataFrame: forecast = forecast.join(fold_number_df) forecasts_list.append(forecast) forecasts = pd.concat(forecasts_list) - forecasts.sort_index(axis=1, inplace=True) - return forecasts + return forecasts.sort_index(axis=1) def _prepare_fold_masks(self, ts: TSDataset, masks: Union[int, List[FoldMask]], mode: str) -> List[FoldMask]: """Prepare and validate fold masks.""" From ea3490f388544adf9e74fed1bedbacb0155ffa92 Mon Sep 17 00:00:00 2001 From: mvakhmenin <84391322+mvakhmenin@users.noreply.github.com> Date: Thu, 30 Jun 2022 10:06:16 +0300 Subject: [PATCH 11/28] Update base.py --- etna/pipeline/base.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/etna/pipeline/base.py b/etna/pipeline/base.py index 2ee2b5385..8a2c37faf 100644 --- a/etna/pipeline/base.py +++ b/etna/pipeline/base.py @@ -456,7 +456,8 @@ def _get_backtest_forecasts(self) -> pd.DataFrame: forecast = forecast.join(fold_number_df) forecasts_list.append(forecast) forecasts = pd.concat(forecasts_list) - return forecasts.sort_index(axis=1) + forecasts.sort_index(axis="columns", ascending=[True, False], inplace=True) + return forecasts def _prepare_fold_masks(self, ts: TSDataset, masks: Union[int, List[FoldMask]], mode: str) -> List[FoldMask]: """Prepare and validate fold masks.""" From 1231261f1412100fbd7c222fbd3c0157e19a8671 Mon Sep 17 00:00:00 2001 From: mvakhmenin <84391322+mvakhmenin@users.noreply.github.com> Date: Thu, 30 Jun 2022 11:25:14 +0300 Subject: [PATCH 12/28] Update base.py --- etna/pipeline/base.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/etna/pipeline/base.py b/etna/pipeline/base.py index dcce3944c..256ec8829 100644 --- a/etna/pipeline/base.py +++ b/etna/pipeline/base.py @@ -457,7 +457,7 @@ def _get_backtest_forecasts(self) -> pd.DataFrame: forecast = forecast.join(fold_number_df) forecasts_list.append(forecast) forecasts = pd.concat(forecasts_list) - forecasts.sort_index(axis="columns", ascending=[True, False], inplace=True) + forecasts.sort_index(axis="columns", inplace=True) return forecasts def _prepare_fold_masks(self, ts: TSDataset, masks: Union[int, List[FoldMask]], mode: str) -> List[FoldMask]: From 3eedf50edddc7c3a774b37f83b426b951ac2ebe2 Mon Sep 17 00:00:00 2001 From: mvakhmenin <84391322+mvakhmenin@users.noreply.github.com> Date: Fri, 1 Jul 2022 13:06:52 +0300 Subject: [PATCH 13/28] Update base.py --- etna/pipeline/base.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/etna/pipeline/base.py b/etna/pipeline/base.py index 256ec8829..b37a23c68 100644 --- a/etna/pipeline/base.py +++ b/etna/pipeline/base.py @@ -457,7 +457,7 @@ def _get_backtest_forecasts(self) -> pd.DataFrame: forecast = forecast.join(fold_number_df) forecasts_list.append(forecast) forecasts = pd.concat(forecasts_list) - forecasts.sort_index(axis="columns", inplace=True) + forecasts.sort_index(axis=1, inplace=True) return forecasts def _prepare_fold_masks(self, ts: TSDataset, masks: Union[int, List[FoldMask]], mode: str) -> List[FoldMask]: From 051d8561cd871344b490b0bd3ecf5f2c65d9dce5 Mon Sep 17 00:00:00 2001 From: mvakhmenin <84391322+mvakhmenin@users.noreply.github.com> Date: Mon, 4 Jul 2022 09:42:51 +0300 Subject: [PATCH 14/28] Update base.py --- etna/pipeline/base.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/etna/pipeline/base.py b/etna/pipeline/base.py index b37a23c68..4225b4d7b 100644 --- a/etna/pipeline/base.py +++ b/etna/pipeline/base.py @@ -457,7 +457,7 @@ def _get_backtest_forecasts(self) -> pd.DataFrame: forecast = forecast.join(fold_number_df) forecasts_list.append(forecast) forecasts = pd.concat(forecasts_list) - forecasts.sort_index(axis=1, inplace=True) + forecasts.sort_index(axis=1, ascending=[True, False], inplace=True) return forecasts def _prepare_fold_masks(self, ts: TSDataset, masks: Union[int, List[FoldMask]], mode: str) -> List[FoldMask]: From c080fb6bf2469fb79480359d9f5cf9117ab8ae86 Mon Sep 17 00:00:00 2001 From: mvakhmenin <84391322+mvakhmenin@users.noreply.github.com> Date: Mon, 4 Jul 2022 11:38:23 +0300 Subject: [PATCH 15/28] Update base.py --- etna/pipeline/base.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/etna/pipeline/base.py b/etna/pipeline/base.py index 4225b4d7b..b37a23c68 100644 --- a/etna/pipeline/base.py +++ b/etna/pipeline/base.py @@ -457,7 +457,7 @@ def _get_backtest_forecasts(self) -> pd.DataFrame: forecast = forecast.join(fold_number_df) forecasts_list.append(forecast) forecasts = pd.concat(forecasts_list) - forecasts.sort_index(axis=1, ascending=[True, False], inplace=True) + forecasts.sort_index(axis=1, inplace=True) return forecasts def _prepare_fold_masks(self, ts: TSDataset, masks: Union[int, List[FoldMask]], mode: str) -> List[FoldMask]: From 4a88a624b42930739f2193b0888e09495b20bf84 Mon Sep 17 00:00:00 2001 From: mvakhmenin <84391322+mvakhmenin@users.noreply.github.com> Date: Tue, 5 Jul 2022 16:58:55 +0300 Subject: [PATCH 16/28] Update conftest.py --- tests/test_pipeline/conftest.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/tests/test_pipeline/conftest.py b/tests/test_pipeline/conftest.py index e6eb9c750..7ba6aa8dd 100644 --- a/tests/test_pipeline/conftest.py +++ b/tests/test_pipeline/conftest.py @@ -168,7 +168,8 @@ def step_ts() -> Tuple[TSDataset, pd.DataFrame, pd.DataFrame]: forecast_df.columns = pd.MultiIndex.from_product( [[segment], ["target", "fold_number"]], names=("segment", "feature") ) - + forecast_df.sort_index(axis=1, inplace=True) + return ts, metrics_df, forecast_df From 41f100ad973cd5c577656afcc9ff19d9a4d4e7d6 Mon Sep 17 00:00:00 2001 From: mvakhmenin <84391322+mvakhmenin@users.noreply.github.com> Date: Tue, 5 Jul 2022 17:26:14 +0300 Subject: [PATCH 17/28] Update conftest.py --- tests/test_pipeline/conftest.py | 1 - 1 file changed, 1 deletion(-) diff --git a/tests/test_pipeline/conftest.py b/tests/test_pipeline/conftest.py index 7ba6aa8dd..c0ed3334b 100644 --- a/tests/test_pipeline/conftest.py +++ b/tests/test_pipeline/conftest.py @@ -169,7 +169,6 @@ def step_ts() -> Tuple[TSDataset, pd.DataFrame, pd.DataFrame]: [[segment], ["target", "fold_number"]], names=("segment", "feature") ) forecast_df.sort_index(axis=1, inplace=True) - return ts, metrics_df, forecast_df From 935f648f2b970597769cfa0f11e2086112306ce7 Mon Sep 17 00:00:00 2001 From: mvakhmenin <84391322+mvakhmenin@users.noreply.github.com> Date: Tue, 5 Jul 2022 18:02:03 +0300 Subject: [PATCH 18/28] Update test_pipeline.py --- tests/test_pipeline/test_pipeline.py | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/tests/test_pipeline/test_pipeline.py b/tests/test_pipeline/test_pipeline.py index 104e68951..5702e0c40 100644 --- a/tests/test_pipeline/test_pipeline.py +++ b/tests/test_pipeline/test_pipeline.py @@ -573,3 +573,16 @@ def test_backtest_nans_at_beginning_with_mask(ts_name, request): metrics=[MAE()], n_folds=[mask], ) + +def test_forecast_backtest_correct_ordering(step_ts: TSDataset): + ts, _, expected_forecast_df = step_ts + HORIZON = 5 + ensemble = VotingEnsemble( + pipelines=[ + Pipeline(model=NaiveModel(lag=7), transforms=[], horizon=HORIZON), + Pipeline(model=NaiveModel(lag=10), transforms=[], horizon=HORIZON), + ] + ) + + _, forecast_df, _ = ensemble.backtest(ts, metrics=[MAE()]) + assert np.all(forecast_df.values == expected_forecast_df.values) From b2aaa818ccee7c36654afa010a28b3c3c4800c52 Mon Sep 17 00:00:00 2001 From: mvakhmenin <84391322+mvakhmenin@users.noreply.github.com> Date: Tue, 5 Jul 2022 23:50:22 +0300 Subject: [PATCH 19/28] Update test_pipeline.py --- tests/test_pipeline/test_pipeline.py | 1 + 1 file changed, 1 insertion(+) diff --git a/tests/test_pipeline/test_pipeline.py b/tests/test_pipeline/test_pipeline.py index 5702e0c40..4da28621b 100644 --- a/tests/test_pipeline/test_pipeline.py +++ b/tests/test_pipeline/test_pipeline.py @@ -27,6 +27,7 @@ from etna.transforms import FilterFeaturesTransform from etna.transforms import LogTransform from tests.utils import DummyMetric +from etna.ensembles import VotingEnsemble DEFAULT_METRICS = [MAE(mode=MetricAggregationMode.per_segment)] From 9f5f01c5b19892c9dd2057ff32e3a5cae275d325 Mon Sep 17 00:00:00 2001 From: mvakhmenin <84391322+mvakhmenin@users.noreply.github.com> Date: Wed, 6 Jul 2022 00:29:52 +0300 Subject: [PATCH 20/28] Update test_pipeline.py --- tests/test_pipeline/test_pipeline.py | 11 ++--------- 1 file changed, 2 insertions(+), 9 deletions(-) diff --git a/tests/test_pipeline/test_pipeline.py b/tests/test_pipeline/test_pipeline.py index 4da28621b..ec3c33f7f 100644 --- a/tests/test_pipeline/test_pipeline.py +++ b/tests/test_pipeline/test_pipeline.py @@ -27,7 +27,6 @@ from etna.transforms import FilterFeaturesTransform from etna.transforms import LogTransform from tests.utils import DummyMetric -from etna.ensembles import VotingEnsemble DEFAULT_METRICS = [MAE(mode=MetricAggregationMode.per_segment)] @@ -578,12 +577,6 @@ def test_backtest_nans_at_beginning_with_mask(ts_name, request): def test_forecast_backtest_correct_ordering(step_ts: TSDataset): ts, _, expected_forecast_df = step_ts HORIZON = 5 - ensemble = VotingEnsemble( - pipelines=[ - Pipeline(model=NaiveModel(lag=7), transforms=[], horizon=HORIZON), - Pipeline(model=NaiveModel(lag=10), transforms=[], horizon=HORIZON), - ] - ) - - _, forecast_df, _ = ensemble.backtest(ts, metrics=[MAE()]) + pipeline = AutoRegressivePipeline(model=NaiveModel(), horizon=5, step=1) + _, forecast_df, _ = pipeline.backtest(ts, metrics=[MAE()], n_folds=3) assert np.all(forecast_df.values == expected_forecast_df.values) From 2e576fefbf7a05a4d2392d7287922db34446c2ee Mon Sep 17 00:00:00 2001 From: mvakhmenin <84391322+mvakhmenin@users.noreply.github.com> Date: Wed, 6 Jul 2022 01:09:07 +0300 Subject: [PATCH 21/28] Update test_pipeline.py --- tests/test_pipeline/test_pipeline.py | 1 + 1 file changed, 1 insertion(+) diff --git a/tests/test_pipeline/test_pipeline.py b/tests/test_pipeline/test_pipeline.py index ec3c33f7f..f3f9f9531 100644 --- a/tests/test_pipeline/test_pipeline.py +++ b/tests/test_pipeline/test_pipeline.py @@ -22,6 +22,7 @@ from etna.models import SARIMAXModel from etna.pipeline import FoldMask from etna.pipeline import Pipeline +from etna.pipeline import AutoRegressivePipeline from etna.transforms import AddConstTransform from etna.transforms import DateFlagsTransform from etna.transforms import FilterFeaturesTransform From 701a92f7579c7ebd6b35ed78d5ae41a75907ca2c Mon Sep 17 00:00:00 2001 From: mvakhmenin <84391322+mvakhmenin@users.noreply.github.com> Date: Wed, 6 Jul 2022 01:35:41 +0300 Subject: [PATCH 22/28] Update test_pipeline.py --- tests/test_pipeline/test_pipeline.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tests/test_pipeline/test_pipeline.py b/tests/test_pipeline/test_pipeline.py index f3f9f9531..4853bfbba 100644 --- a/tests/test_pipeline/test_pipeline.py +++ b/tests/test_pipeline/test_pipeline.py @@ -20,9 +20,9 @@ from etna.models import NaiveModel from etna.models import ProphetModel from etna.models import SARIMAXModel +from etna.pipeline import AutoRegressivePipeline from etna.pipeline import FoldMask from etna.pipeline import Pipeline -from etna.pipeline import AutoRegressivePipeline from etna.transforms import AddConstTransform from etna.transforms import DateFlagsTransform from etna.transforms import FilterFeaturesTransform From 03818435dc43703a091d3edad42208bcce6b0131 Mon Sep 17 00:00:00 2001 From: mvakhmenin <84391322+mvakhmenin@users.noreply.github.com> Date: Wed, 6 Jul 2022 02:07:09 +0300 Subject: [PATCH 23/28] Update test_pipeline.py --- tests/test_pipeline/test_pipeline.py | 13 ++++++++++--- 1 file changed, 10 insertions(+), 3 deletions(-) diff --git a/tests/test_pipeline/test_pipeline.py b/tests/test_pipeline/test_pipeline.py index 4853bfbba..cb8b43a72 100644 --- a/tests/test_pipeline/test_pipeline.py +++ b/tests/test_pipeline/test_pipeline.py @@ -577,7 +577,14 @@ def test_backtest_nans_at_beginning_with_mask(ts_name, request): def test_forecast_backtest_correct_ordering(step_ts: TSDataset): ts, _, expected_forecast_df = step_ts - HORIZON = 5 - pipeline = AutoRegressivePipeline(model=NaiveModel(), horizon=5, step=1) - _, forecast_df, _ = pipeline.backtest(ts, metrics=[MAE()], n_folds=3) + pipeline = AutoRegressivePipeline( + model=NaiveModel(), + horizon=5, + step=1 + ) + _, forecast_df, _ = pipeline.backtest( + ts=ts, + metrics=[MAE()], + n_folds=3 + ) assert np.all(forecast_df.values == expected_forecast_df.values) From 2c8b632560108f7fd21ca2f79c43e1faa1ba569c Mon Sep 17 00:00:00 2001 From: mvakhmenin <84391322+mvakhmenin@users.noreply.github.com> Date: Wed, 6 Jul 2022 09:01:52 +0300 Subject: [PATCH 24/28] Update test_pipeline.py --- tests/test_pipeline/test_pipeline.py | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/tests/test_pipeline/test_pipeline.py b/tests/test_pipeline/test_pipeline.py index cb8b43a72..5102f40eb 100644 --- a/tests/test_pipeline/test_pipeline.py +++ b/tests/test_pipeline/test_pipeline.py @@ -20,7 +20,6 @@ from etna.models import NaiveModel from etna.models import ProphetModel from etna.models import SARIMAXModel -from etna.pipeline import AutoRegressivePipeline from etna.pipeline import FoldMask from etna.pipeline import Pipeline from etna.transforms import AddConstTransform @@ -577,10 +576,9 @@ def test_backtest_nans_at_beginning_with_mask(ts_name, request): def test_forecast_backtest_correct_ordering(step_ts: TSDataset): ts, _, expected_forecast_df = step_ts - pipeline = AutoRegressivePipeline( + pipeline = Pipeline( model=NaiveModel(), - horizon=5, - step=1 + horizon=5 ) _, forecast_df, _ = pipeline.backtest( ts=ts, From abc1312be5996b63ec7597922e111035eaf5c5f2 Mon Sep 17 00:00:00 2001 From: mvakhmenin <84391322+mvakhmenin@users.noreply.github.com> Date: Wed, 6 Jul 2022 09:15:13 +0300 Subject: [PATCH 25/28] Update CHANGELOG.md --- CHANGELOG.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 42f6cc36d..44d50d641 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -40,7 +40,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 - Fix missing prophet in docker images ([#767](https://github.com/tinkoff-ai/etna/pull/767)) - Add `known_future` parameter to CLI ([#758](https://github.com/tinkoff-ai/etna/pull/758)) - FutureWarning: The frame.append method is deprecated. Use pandas.concat instead ([#764](https://github.com/tinkoff-ai/etna/pull/764)) -- +- Correct ordering if multi-index in backtest ([#771](https://github.com/tinkoff-ai/etna/pull/771)) - - - From 6eb031dba0f3168523c3c40dbef4ce905d3a15d5 Mon Sep 17 00:00:00 2001 From: mvakhmenin Date: Tue, 12 Jul 2022 14:38:10 +0300 Subject: [PATCH 26/28] make format --- tests/test_pipeline/test_pipeline.py | 12 +++--------- 1 file changed, 3 insertions(+), 9 deletions(-) diff --git a/tests/test_pipeline/test_pipeline.py b/tests/test_pipeline/test_pipeline.py index 5102f40eb..695a26418 100644 --- a/tests/test_pipeline/test_pipeline.py +++ b/tests/test_pipeline/test_pipeline.py @@ -574,15 +574,9 @@ def test_backtest_nans_at_beginning_with_mask(ts_name, request): n_folds=[mask], ) + def test_forecast_backtest_correct_ordering(step_ts: TSDataset): ts, _, expected_forecast_df = step_ts - pipeline = Pipeline( - model=NaiveModel(), - horizon=5 - ) - _, forecast_df, _ = pipeline.backtest( - ts=ts, - metrics=[MAE()], - n_folds=3 - ) + pipeline = Pipeline(model=NaiveModel(), horizon=5) + _, forecast_df, _ = pipeline.backtest(ts=ts, metrics=[MAE()], n_folds=3) assert np.all(forecast_df.values == expected_forecast_df.values) From b938d017705e4237358dbc8e67e1c184e0d146a8 Mon Sep 17 00:00:00 2001 From: mvakhmenin <84391322+mvakhmenin@users.noreply.github.com> Date: Wed, 13 Jul 2022 15:01:49 +0300 Subject: [PATCH 27/28] Update conftest.py --- tests/test_pipeline/conftest.py | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/tests/test_pipeline/conftest.py b/tests/test_pipeline/conftest.py index 073a34ab2..02559acf7 100644 --- a/tests/test_pipeline/conftest.py +++ b/tests/test_pipeline/conftest.py @@ -166,9 +166,8 @@ def step_ts() -> Tuple[TSDataset, pd.DataFrame, pd.DataFrame]: index=timestamp_forecast, ) forecast_df.columns = pd.MultiIndex.from_product( - [[segment], ["target", "fold_number"]], names=("segment", "feature") + [[segment], ["fold_number", "target"]], names=("segment", "feature") ) - forecast_df.sort_index(axis=1, inplace=True) return ts, metrics_df, forecast_df From 3dc128dae42fc1afbe7f2b8a2aa779e61da93f10 Mon Sep 17 00:00:00 2001 From: mvakhmenin <84391322+mvakhmenin@users.noreply.github.com> Date: Wed, 13 Jul 2022 16:00:07 +0300 Subject: [PATCH 28/28] Update conftest.py --- tests/test_pipeline/conftest.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tests/test_pipeline/conftest.py b/tests/test_pipeline/conftest.py index 02559acf7..e3dbb3464 100644 --- a/tests/test_pipeline/conftest.py +++ b/tests/test_pipeline/conftest.py @@ -162,7 +162,7 @@ def step_ts() -> Tuple[TSDataset, pd.DataFrame, pd.DataFrame]: target_forecast += [start_value + i * add_value] * horizon fold_number_forecast += [i] * horizon forecast_df = pd.DataFrame( - {"target": target_forecast, "fold_number": fold_number_forecast}, + {"fold_number": fold_number_forecast, "target": target_forecast}, index=timestamp_forecast, ) forecast_df.columns = pd.MultiIndex.from_product(