From 533334548eda829df9d57898945efec86dea9ebe Mon Sep 17 00:00:00 2001
From: Dreamlone <mik_sar@mail.ru>
Date: Fri, 3 Sep 2021 15:55:42 +0300
Subject: [PATCH 1/6] fitted values added

---
 examples/time_series/ts_fitted_values.py | 38 ++++++++++++++++++++++++
 fedot/core/pipelines/ts_wrappers.py      | 36 +++++++++++++++++++++-
 2 files changed, 73 insertions(+), 1 deletion(-)
 create mode 100644 examples/time_series/ts_fitted_values.py

diff --git a/examples/time_series/ts_fitted_values.py b/examples/time_series/ts_fitted_values.py
new file mode 100644
index 000000000..8704fb053
--- /dev/null
+++ b/examples/time_series/ts_fitted_values.py
@@ -0,0 +1,38 @@
+import numpy as np
+import pandas as pd
+
+from matplotlib import pyplot as plt
+
+from fedot.core.data.data import InputData
+from fedot.core.pipelines.ts_wrappers import fitted_values
+from fedot.core.repository.tasks import Task, TaskTypesEnum, TsForecastingParams
+from fedot.core.pipelines.node import PrimaryNode, SecondaryNode
+from fedot.core.pipelines.pipeline import Pipeline
+from examples.time_series.ts_forecasting_tuning import get_complex_pipeline
+
+
+def show_fitted_time_series(len_forecast=24):
+    task = Task(TaskTypesEnum.ts_forecasting,
+                TsForecastingParams(forecast_length=len_forecast))
+
+    ts_input = InputData.from_csv_time_series(file_path='../../cases/data/time_series/metocean.csv',
+                                              task=task, target_column='value')
+
+    node_lagged = PrimaryNode('lagged')
+    node_lagged.custom_params = {'window_size': 4}
+    node_final = SecondaryNode('ridge', nodes_from=[node_lagged])
+    pipeline = Pipeline(node_final)
+    train_predicted = pipeline.fit(ts_input)
+
+    fitted_ts_10 = fitted_values(train_predicted, 10)
+    fitted_ts_act = fitted_values(train_predicted)
+    plt.plot(ts_input.idx, ts_input.target, label='Actual time series')
+    plt.plot(fitted_ts_10.idx, fitted_ts_10.predict, label='Fitted values horizon 10')
+    plt.plot(fitted_ts_act.idx, fitted_ts_act.predict, label='Fitted values all')
+    plt.legend()
+    plt.grid()
+    plt.show()
+
+
+if __name__ == '__main__':
+    show_fitted_time_series()
diff --git a/fedot/core/pipelines/ts_wrappers.py b/fedot/core/pipelines/ts_wrappers.py
index 9ab1f6580..cc0fe2eb0 100644
--- a/fedot/core/pipelines/ts_wrappers.py
+++ b/fedot/core/pipelines/ts_wrappers.py
@@ -1,9 +1,11 @@
+from copy import copy
 from typing import Union
 
 import numpy as np
 
-from fedot.core.data.data import InputData
+from fedot.core.data.data import InputData, OutputData
 from fedot.core.data.multi_modal import MultiModalData
+from fedot.core.operations.evaluation.operation_implementations.data_operations.ts_transformations import _ts_to_table
 from fedot.core.repository.dataset_types import DataTypesEnum
 from fedot.core.repository.tasks import TaskTypesEnum
 
@@ -162,6 +164,38 @@ def in_sample_ts_forecast(pipeline, input_data: Union[InputData, MultiModalData]
     return final_forecast
 
 
+def fitted_values(train_predicted: OutputData, horizon_step: int = None):
+    """ The method converts a multidimensional lagged array into an
+    one-dimensional array - time series
+
+    :param train_predicted: OutputData
+    :param horizon_step: index of elements for forecast
+    """
+    copied_data = copy(train_predicted)
+    if horizon_step is not None:
+        # Take particular forecast step
+        copied_data.predict = copied_data.predict[:, horizon_step]
+        copied_data.idx = copied_data.idx + horizon_step
+        return copied_data
+    else:
+        # Perform collapse with averaging
+        forecast_length = copied_data.task.task_params.forecast_length
+        # LMatrix with indices in cells
+        indices_range = np.arange(0, len(copied_data.predict))
+        _, idx_matrix = _ts_to_table(idx=indices_range,
+                                     time_series=indices_range,
+                                     window_size=forecast_length)
+        predicted_matrix = copied_data.predict
+        predicted_matrix = predicted_matrix[-len(idx_matrix):, :]
+        final_predictions = []
+        for index in indices_range:
+            vals = predicted_matrix[idx_matrix == index]
+            mean_value = np.mean(vals)
+            final_predictions.append(mean_value)
+        copied_data.predict = np.array(final_predictions)
+        return copied_data
+
+
 def _calculate_number_of_steps(scope_len, horizon):
     """ Method return amount of iterations which must be done for multistep
     time series forecasting
-- 
GitLab


From 1ea6472dd2d4b28b64938c43b61ff288d20e95ad Mon Sep 17 00:00:00 2001
From: Dreamlone <mik_sar@mail.ru>
Date: Fri, 3 Sep 2021 18:04:45 +0300
Subject: [PATCH 2/6] improve cutting

---
 ...ts_fitted_values.py => ts_fitted_target.py} | 18 +++++-------------
 .../data_operations/ts_transformations.py      |  3 ++-
 fedot/core/pipelines/ts_wrappers.py            | 12 ++++++++----
 .../pipelines/test_pipeline_ts_wrappers.py     | 14 ++++++++++++++
 4 files changed, 29 insertions(+), 18 deletions(-)
 rename examples/time_series/{ts_fitted_values.py => ts_fitted_target.py} (60%)

diff --git a/examples/time_series/ts_fitted_values.py b/examples/time_series/ts_fitted_target.py
similarity index 60%
rename from examples/time_series/ts_fitted_values.py
rename to examples/time_series/ts_fitted_target.py
index 8704fb053..936fd1a00 100644
--- a/examples/time_series/ts_fitted_values.py
+++ b/examples/time_series/ts_fitted_target.py
@@ -1,14 +1,9 @@
-import numpy as np
-import pandas as pd
-
 from matplotlib import pyplot as plt
 
 from fedot.core.data.data import InputData
-from fedot.core.pipelines.ts_wrappers import fitted_values
+from fedot.core.pipelines.ts_wrappers import fitted_target
 from fedot.core.repository.tasks import Task, TaskTypesEnum, TsForecastingParams
-from fedot.core.pipelines.node import PrimaryNode, SecondaryNode
-from fedot.core.pipelines.pipeline import Pipeline
-from examples.time_series.ts_forecasting_tuning import get_complex_pipeline
+from test.unit.pipelines.test_pipeline_ts_wrappers import get_simple_short_lagged_pipeline
 
 
 def show_fitted_time_series(len_forecast=24):
@@ -18,14 +13,11 @@ def show_fitted_time_series(len_forecast=24):
     ts_input = InputData.from_csv_time_series(file_path='../../cases/data/time_series/metocean.csv',
                                               task=task, target_column='value')
 
-    node_lagged = PrimaryNode('lagged')
-    node_lagged.custom_params = {'window_size': 4}
-    node_final = SecondaryNode('ridge', nodes_from=[node_lagged])
-    pipeline = Pipeline(node_final)
+    pipeline = get_simple_short_lagged_pipeline()
     train_predicted = pipeline.fit(ts_input)
 
-    fitted_ts_10 = fitted_values(train_predicted, 10)
-    fitted_ts_act = fitted_values(train_predicted)
+    fitted_ts_10 = fitted_target(train_predicted, 10)
+    fitted_ts_act = fitted_target(train_predicted)
     plt.plot(ts_input.idx, ts_input.target, label='Actual time series')
     plt.plot(fitted_ts_10.idx, fitted_ts_10.predict, label='Fitted values horizon 10')
     plt.plot(fitted_ts_act.idx, fitted_ts_act.predict, label='Fitted values all')
diff --git a/fedot/core/operations/evaluation/operation_implementations/data_operations/ts_transformations.py b/fedot/core/operations/evaluation/operation_implementations/data_operations/ts_transformations.py
index fbb624593..c3ed2dfa0 100644
--- a/fedot/core/operations/evaluation/operation_implementations/data_operations/ts_transformations.py
+++ b/fedot/core/operations/evaluation/operation_implementations/data_operations/ts_transformations.py
@@ -317,8 +317,9 @@ def _ts_to_table(idx, time_series: np.array, window_size: int):
 
     transformed = np.array(lagged_dataframe)
 
-    # Generate dataset with features
+    # Remove extra column (it will go to target)
     features_columns = transformed[:, 1:]
+    # Generate dataset with features
     features_columns = np.fliplr(features_columns)
 
     # First n elements in time series are removed
diff --git a/fedot/core/pipelines/ts_wrappers.py b/fedot/core/pipelines/ts_wrappers.py
index cc0fe2eb0..72766de42 100644
--- a/fedot/core/pipelines/ts_wrappers.py
+++ b/fedot/core/pipelines/ts_wrappers.py
@@ -164,7 +164,7 @@ def in_sample_ts_forecast(pipeline, input_data: Union[InputData, MultiModalData]
     return final_forecast
 
 
-def fitted_values(train_predicted: OutputData, horizon_step: int = None):
+def fitted_target(train_predicted: OutputData, horizon_step: int = None):
     """ The method converts a multidimensional lagged array into an
     one-dimensional array - time series
 
@@ -180,19 +180,23 @@ def fitted_values(train_predicted: OutputData, horizon_step: int = None):
     else:
         # Perform collapse with averaging
         forecast_length = copied_data.task.task_params.forecast_length
-        # LMatrix with indices in cells
-        indices_range = np.arange(0, len(copied_data.predict))
+        # Extend source index range
+        indices_range = np.arange(copied_data.idx[0], copied_data.idx[-1] + forecast_length + 1)
+        # Lagged matrix with indices in cells
         _, idx_matrix = _ts_to_table(idx=indices_range,
                                      time_series=indices_range,
                                      window_size=forecast_length)
         predicted_matrix = copied_data.predict
-        predicted_matrix = predicted_matrix[-len(idx_matrix):, :]
+
+        # For every index calculate mean predictions (by all forecast steps)
         final_predictions = []
+        indices_range = indices_range[:-1]
         for index in indices_range:
             vals = predicted_matrix[idx_matrix == index]
             mean_value = np.mean(vals)
             final_predictions.append(mean_value)
         copied_data.predict = np.array(final_predictions)
+        copied_data.idx = indices_range
         return copied_data
 
 
diff --git a/test/unit/pipelines/test_pipeline_ts_wrappers.py b/test/unit/pipelines/test_pipeline_ts_wrappers.py
index 4362a8449..083c0735b 100644
--- a/test/unit/pipelines/test_pipeline_ts_wrappers.py
+++ b/test/unit/pipelines/test_pipeline_ts_wrappers.py
@@ -7,6 +7,7 @@ from fedot.core.pipelines.pipeline import Pipeline
 from fedot.core.pipelines.ts_wrappers import in_sample_ts_forecast, out_of_sample_ts_forecast
 from fedot.core.repository.dataset_types import DataTypesEnum
 from fedot.core.repository.tasks import Task, TaskTypesEnum, TsForecastingParams
+from fedot.core.pipelines.ts_wrappers import fitted_target
 
 
 def prepare_input_data(forecast_length, horizon):
@@ -88,3 +89,16 @@ def test_in_sample_ts_forecast_correct():
     is_forecast_correct = True
 
     assert is_forecast_correct
+
+
+def test_fitted_target_correct():
+    from matplotlib import pyplot as plt
+    simple_length, multi_length = 5, 5
+    ts_input, _ = prepare_input_data(simple_length, multi_length)
+
+    pipeline = get_simple_short_lagged_pipeline()
+    train_predicted = pipeline.fit(ts_input)
+
+    fitted_ts_values = fitted_target(train_predicted)
+
+    assert len(fitted_ts_values.predict) == len(ts_input.target) - 4
-- 
GitLab


From eb23300cdf983bd0f5cca8b40bf9dd129976c6e8 Mon Sep 17 00:00:00 2001
From: Dreamlone <mik_sar@mail.ru>
Date: Fri, 3 Sep 2021 19:14:17 +0300
Subject: [PATCH 3/6] in-sample fitted

---
 examples/time_series/ts_fitted_target.py |  5 ++++-
 fedot/core/pipelines/ts_wrappers.py      | 18 +++++++++++++++---
 2 files changed, 19 insertions(+), 4 deletions(-)

diff --git a/examples/time_series/ts_fitted_target.py b/examples/time_series/ts_fitted_target.py
index 936fd1a00..312343c0a 100644
--- a/examples/time_series/ts_fitted_target.py
+++ b/examples/time_series/ts_fitted_target.py
@@ -1,7 +1,7 @@
 from matplotlib import pyplot as plt
 
 from fedot.core.data.data import InputData
-from fedot.core.pipelines.ts_wrappers import fitted_target
+from fedot.core.pipelines.ts_wrappers import fitted_target, in_sample_fitted_target
 from fedot.core.repository.tasks import Task, TaskTypesEnum, TsForecastingParams
 from test.unit.pipelines.test_pipeline_ts_wrappers import get_simple_short_lagged_pipeline
 
@@ -18,6 +18,9 @@ def show_fitted_time_series(len_forecast=24):
 
     fitted_ts_10 = fitted_target(train_predicted, 10)
     fitted_ts_act = fitted_target(train_predicted)
+
+    in_sample_fitted_target(train_predicted)
+
     plt.plot(ts_input.idx, ts_input.target, label='Actual time series')
     plt.plot(fitted_ts_10.idx, fitted_ts_10.predict, label='Fitted values horizon 10')
     plt.plot(fitted_ts_act.idx, fitted_ts_act.predict, label='Fitted values all')
diff --git a/fedot/core/pipelines/ts_wrappers.py b/fedot/core/pipelines/ts_wrappers.py
index 72766de42..4cf24716d 100644
--- a/fedot/core/pipelines/ts_wrappers.py
+++ b/fedot/core/pipelines/ts_wrappers.py
@@ -164,12 +164,13 @@ def in_sample_ts_forecast(pipeline, input_data: Union[InputData, MultiModalData]
     return final_forecast
 
 
-def fitted_target(train_predicted: OutputData, horizon_step: int = None):
+def fitted_target(train_predicted: OutputData, horizon_step: int = None) -> OutputData:
     """ The method converts a multidimensional lagged array into an
-    one-dimensional array - time series
+    one-dimensional array - time series based on predicted values for training sample
 
     :param train_predicted: OutputData
-    :param horizon_step: index of elements for forecast
+    :param horizon_step: index of elements for forecast. If None - perform
+    averaging for all forecasting steps
     """
     copied_data = copy(train_predicted)
     if horizon_step is not None:
@@ -200,6 +201,17 @@ def fitted_target(train_predicted: OutputData, horizon_step: int = None):
         return copied_data
 
 
+def in_sample_fitted_target(train_predicted: OutputData) -> OutputData:
+    """ Perform in sample validation based on training sample """
+    forecast_length = train_predicted.task.task_params.forecast_length
+    all_values = []
+    step = 0
+    while step < len(train_predicted.idx):
+        all_values.extend(train_predicted.predict[step, :])
+        step += forecast_length
+    # TODO finish implementation 
+
+
 def _calculate_number_of_steps(scope_len, horizon):
     """ Method return amount of iterations which must be done for multistep
     time series forecasting
-- 
GitLab


From 5dee71f4e0391f69ba8960852e000e23e1747163 Mon Sep 17 00:00:00 2001
From: Dreamlone <mik_sar@mail.ru>
Date: Tue, 7 Sep 2021 16:04:02 +0300
Subject: [PATCH 4/6] add in-sample fitted to test & examples

---
 examples/time_series/ts_fitted_target.py      | 19 +++++++++++-------
 fedot/core/pipelines/ts_wrappers.py           | 20 +++++++++++++++++--
 .../pipelines/test_pipeline_ts_wrappers.py    | 12 +++++------
 3 files changed, 36 insertions(+), 15 deletions(-)

diff --git a/examples/time_series/ts_fitted_target.py b/examples/time_series/ts_fitted_target.py
index 312343c0a..f0889a74b 100644
--- a/examples/time_series/ts_fitted_target.py
+++ b/examples/time_series/ts_fitted_target.py
@@ -7,6 +7,10 @@ from test.unit.pipelines.test_pipeline_ts_wrappers import get_simple_short_lagge
 
 
 def show_fitted_time_series(len_forecast=24):
+    """
+    Shows an example of how to get fitted values of a time series by any
+    pipeline created by FEDOT
+    """
     task = Task(TaskTypesEnum.ts_forecasting,
                 TsForecastingParams(forecast_length=len_forecast))
 
@@ -16,18 +20,19 @@ def show_fitted_time_series(len_forecast=24):
     pipeline = get_simple_short_lagged_pipeline()
     train_predicted = pipeline.fit(ts_input)
 
-    fitted_ts_10 = fitted_target(train_predicted, 10)
+    # Get fitted values
+    fitted_ts_10 = fitted_target(train_predicted, 1)
     fitted_ts_act = fitted_target(train_predicted)
+    in_sample_validated = in_sample_fitted_target(train_predicted)
 
-    in_sample_fitted_target(train_predicted)
-
-    plt.plot(ts_input.idx, ts_input.target, label='Actual time series')
-    plt.plot(fitted_ts_10.idx, fitted_ts_10.predict, label='Fitted values horizon 10')
-    plt.plot(fitted_ts_act.idx, fitted_ts_act.predict, label='Fitted values all')
+    plt.plot(ts_input.idx, ts_input.target, label='Actual time series', alpha=0.8)
+    plt.plot(fitted_ts_10.idx, fitted_ts_10.predict, label='Fitted values horizon 10', alpha=0.2)
+    plt.plot(fitted_ts_act.idx, fitted_ts_act.predict, label='Fitted values all', alpha=0.2)
+    plt.plot(in_sample_validated.idx, in_sample_validated.predict, label='In-sample fitted values')
     plt.legend()
     plt.grid()
     plt.show()
 
 
 if __name__ == '__main__':
-    show_fitted_time_series()
+    show_fitted_time_series(55)
diff --git a/fedot/core/pipelines/ts_wrappers.py b/fedot/core/pipelines/ts_wrappers.py
index 4cf24716d..e0b9874ae 100644
--- a/fedot/core/pipelines/ts_wrappers.py
+++ b/fedot/core/pipelines/ts_wrappers.py
@@ -181,8 +181,10 @@ def fitted_target(train_predicted: OutputData, horizon_step: int = None) -> Outp
     else:
         # Perform collapse with averaging
         forecast_length = copied_data.task.task_params.forecast_length
+
         # Extend source index range
         indices_range = np.arange(copied_data.idx[0], copied_data.idx[-1] + forecast_length + 1)
+
         # Lagged matrix with indices in cells
         _, idx_matrix = _ts_to_table(idx=indices_range,
                                      time_series=indices_range,
@@ -206,10 +208,24 @@ def in_sample_fitted_target(train_predicted: OutputData) -> OutputData:
     forecast_length = train_predicted.task.task_params.forecast_length
     all_values = []
     step = 0
-    while step < len(train_predicted.idx):
+    # Glues together parts of predictions using "in-sample" way
+    while step < len(train_predicted.predict):
         all_values.extend(train_predicted.predict[step, :])
         step += forecast_length
-    # TODO finish implementation 
+
+    # In some cases it doesn't reach the end
+    if not np.isclose(all_values[-1], train_predicted.predict[-1, -1]):
+        missing_part_index = step - len(train_predicted.predict) + 1
+        # Store missing predicted values
+        all_values.extend(train_predicted.predict[-1, missing_part_index:])
+
+    copied_data = copy(train_predicted)
+    copied_data.predict = np.array(all_values)
+    # Update indices
+    first_id = copied_data.idx[0]
+    copied_data.idx = np.arange(first_id, first_id + len(all_values))
+
+    return copied_data
 
 
 def _calculate_number_of_steps(scope_len, horizon):
diff --git a/test/unit/pipelines/test_pipeline_ts_wrappers.py b/test/unit/pipelines/test_pipeline_ts_wrappers.py
index 083c0735b..56a5ef2e0 100644
--- a/test/unit/pipelines/test_pipeline_ts_wrappers.py
+++ b/test/unit/pipelines/test_pipeline_ts_wrappers.py
@@ -4,7 +4,7 @@ from sklearn.metrics import mean_absolute_error
 from fedot.core.data.data import InputData
 from fedot.core.pipelines.node import PrimaryNode, SecondaryNode
 from fedot.core.pipelines.pipeline import Pipeline
-from fedot.core.pipelines.ts_wrappers import in_sample_ts_forecast, out_of_sample_ts_forecast
+from fedot.core.pipelines.ts_wrappers import in_sample_ts_forecast, out_of_sample_ts_forecast, in_sample_fitted_target
 from fedot.core.repository.dataset_types import DataTypesEnum
 from fedot.core.repository.tasks import Task, TaskTypesEnum, TsForecastingParams
 from fedot.core.pipelines.ts_wrappers import fitted_target
@@ -92,13 +92,13 @@ def test_in_sample_ts_forecast_correct():
 
 
 def test_fitted_target_correct():
-    from matplotlib import pyplot as plt
     simple_length, multi_length = 5, 5
     ts_input, _ = prepare_input_data(simple_length, multi_length)
 
-    pipeline = get_simple_short_lagged_pipeline()
-    train_predicted = pipeline.fit(ts_input)
+    for fitted_func in [fitted_target, in_sample_fitted_target]:
+        pipeline = get_simple_short_lagged_pipeline()
+        train_predicted = pipeline.fit(ts_input)
 
-    fitted_ts_values = fitted_target(train_predicted)
+        fitted_ts_values = fitted_func(train_predicted)
 
-    assert len(fitted_ts_values.predict) == len(ts_input.target) - 4
+        assert len(fitted_ts_values.predict) == len(ts_input.target) - 4
-- 
GitLab


From b5f34acf3b8092ec3a352ee4acadc584e95030ec Mon Sep 17 00:00:00 2001
From: Dreamlone <mik_sar@mail.ru>
Date: Wed, 8 Sep 2021 11:39:27 +0300
Subject: [PATCH 5/6] add description

---
 .../{ts_fitted_target.py => ts_fitted_values.py}     | 12 +++++++++---
 1 file changed, 9 insertions(+), 3 deletions(-)
 rename examples/time_series/{ts_fitted_target.py => ts_fitted_values.py} (78%)

diff --git a/examples/time_series/ts_fitted_target.py b/examples/time_series/ts_fitted_values.py
similarity index 78%
rename from examples/time_series/ts_fitted_target.py
rename to examples/time_series/ts_fitted_values.py
index f0889a74b..3e4fd94b6 100644
--- a/examples/time_series/ts_fitted_target.py
+++ b/examples/time_series/ts_fitted_values.py
@@ -10,6 +10,10 @@ def show_fitted_time_series(len_forecast=24):
     """
     Shows an example of how to get fitted values of a time series by any
     pipeline created by FEDOT
+
+    fitted values - are the predictions of the pipelines on the training sample.
+    For time series, these values show how well the model reproduces the time
+    series structure
     """
     task = Task(TaskTypesEnum.ts_forecasting,
                 TsForecastingParams(forecast_length=len_forecast))
@@ -20,9 +24,11 @@ def show_fitted_time_series(len_forecast=24):
     pipeline = get_simple_short_lagged_pipeline()
     train_predicted = pipeline.fit(ts_input)
 
-    # Get fitted values
-    fitted_ts_10 = fitted_target(train_predicted, 1)
+    # Get fitted values for every 10th forecast
+    fitted_ts_10 = fitted_target(train_predicted, 10)
+    # Average for all forecasting horizons
     fitted_ts_act = fitted_target(train_predicted)
+    # In-sample forecasting fitted values
     in_sample_validated = in_sample_fitted_target(train_predicted)
 
     plt.plot(ts_input.idx, ts_input.target, label='Actual time series', alpha=0.8)
@@ -35,4 +41,4 @@ def show_fitted_time_series(len_forecast=24):
 
 
 if __name__ == '__main__':
-    show_fitted_time_series(55)
+    show_fitted_time_series()
-- 
GitLab


From 0545eb4f4e1e6ba1560a449429bfccd747205139 Mon Sep 17 00:00:00 2001
From: Dreamlone <mik_sar@mail.ru>
Date: Wed, 8 Sep 2021 12:32:29 +0300
Subject: [PATCH 6/6] change names

---
 examples/time_series/ts_fitted_values.py         | 8 ++++----
 fedot/core/pipelines/ts_wrappers.py              | 4 ++--
 test/unit/pipelines/test_pipeline_ts_wrappers.py | 8 ++++----
 3 files changed, 10 insertions(+), 10 deletions(-)

diff --git a/examples/time_series/ts_fitted_values.py b/examples/time_series/ts_fitted_values.py
index 3e4fd94b6..01c4e0db0 100644
--- a/examples/time_series/ts_fitted_values.py
+++ b/examples/time_series/ts_fitted_values.py
@@ -1,7 +1,7 @@
 from matplotlib import pyplot as plt
 
 from fedot.core.data.data import InputData
-from fedot.core.pipelines.ts_wrappers import fitted_target, in_sample_fitted_target
+from fedot.core.pipelines.ts_wrappers import fitted_values, in_sample_fitted_values
 from fedot.core.repository.tasks import Task, TaskTypesEnum, TsForecastingParams
 from test.unit.pipelines.test_pipeline_ts_wrappers import get_simple_short_lagged_pipeline
 
@@ -25,11 +25,11 @@ def show_fitted_time_series(len_forecast=24):
     train_predicted = pipeline.fit(ts_input)
 
     # Get fitted values for every 10th forecast
-    fitted_ts_10 = fitted_target(train_predicted, 10)
+    fitted_ts_10 = fitted_values(train_predicted, 10)
     # Average for all forecasting horizons
-    fitted_ts_act = fitted_target(train_predicted)
+    fitted_ts_act = fitted_values(train_predicted)
     # In-sample forecasting fitted values
-    in_sample_validated = in_sample_fitted_target(train_predicted)
+    in_sample_validated = in_sample_fitted_values(train_predicted)
 
     plt.plot(ts_input.idx, ts_input.target, label='Actual time series', alpha=0.8)
     plt.plot(fitted_ts_10.idx, fitted_ts_10.predict, label='Fitted values horizon 10', alpha=0.2)
diff --git a/fedot/core/pipelines/ts_wrappers.py b/fedot/core/pipelines/ts_wrappers.py
index e0b9874ae..dea6d853e 100644
--- a/fedot/core/pipelines/ts_wrappers.py
+++ b/fedot/core/pipelines/ts_wrappers.py
@@ -164,7 +164,7 @@ def in_sample_ts_forecast(pipeline, input_data: Union[InputData, MultiModalData]
     return final_forecast
 
 
-def fitted_target(train_predicted: OutputData, horizon_step: int = None) -> OutputData:
+def fitted_values(train_predicted: OutputData, horizon_step: int = None) -> OutputData:
     """ The method converts a multidimensional lagged array into an
     one-dimensional array - time series based on predicted values for training sample
 
@@ -203,7 +203,7 @@ def fitted_target(train_predicted: OutputData, horizon_step: int = None) -> Outp
         return copied_data
 
 
-def in_sample_fitted_target(train_predicted: OutputData) -> OutputData:
+def in_sample_fitted_values(train_predicted: OutputData) -> OutputData:
     """ Perform in sample validation based on training sample """
     forecast_length = train_predicted.task.task_params.forecast_length
     all_values = []
diff --git a/test/unit/pipelines/test_pipeline_ts_wrappers.py b/test/unit/pipelines/test_pipeline_ts_wrappers.py
index 56a5ef2e0..23e9713fb 100644
--- a/test/unit/pipelines/test_pipeline_ts_wrappers.py
+++ b/test/unit/pipelines/test_pipeline_ts_wrappers.py
@@ -4,10 +4,10 @@ from sklearn.metrics import mean_absolute_error
 from fedot.core.data.data import InputData
 from fedot.core.pipelines.node import PrimaryNode, SecondaryNode
 from fedot.core.pipelines.pipeline import Pipeline
-from fedot.core.pipelines.ts_wrappers import in_sample_ts_forecast, out_of_sample_ts_forecast, in_sample_fitted_target
+from fedot.core.pipelines.ts_wrappers import in_sample_ts_forecast, out_of_sample_ts_forecast, in_sample_fitted_values
 from fedot.core.repository.dataset_types import DataTypesEnum
 from fedot.core.repository.tasks import Task, TaskTypesEnum, TsForecastingParams
-from fedot.core.pipelines.ts_wrappers import fitted_target
+from fedot.core.pipelines.ts_wrappers import fitted_values
 
 
 def prepare_input_data(forecast_length, horizon):
@@ -91,11 +91,11 @@ def test_in_sample_ts_forecast_correct():
     assert is_forecast_correct
 
 
-def test_fitted_target_correct():
+def test_fitted_values_correct():
     simple_length, multi_length = 5, 5
     ts_input, _ = prepare_input_data(simple_length, multi_length)
 
-    for fitted_func in [fitted_target, in_sample_fitted_target]:
+    for fitted_func in [fitted_values, in_sample_fitted_values]:
         pipeline = get_simple_short_lagged_pipeline()
         train_predicted = pipeline.fit(ts_input)
 
-- 
GitLab