<jupyter_start><jupyter_text>Прогнозирование временного ряда выработки электроэнергииИмеются два временных ряда: первый — это среднесуточная выработка электроэнергии ветряной установкой. Другой — среднесуточная выработка электроэнергии при помощи дизельного генератора. Оба показателя измеряются в кВт⋅ч.Помимо данных двух временных рядов имеются временные ряды дополнительных параметров, таких как скорость ветра, температура воздуха и т.д.Расшифровка представлена ниже (целевая переменная выделена жирным начертанием):* datetime - День* **diesel_fuel_kWh - Выработка эл.энергии ДЭС,  кВтч** * wind_power_kWh - Выработка эл.энергии ВЭУ,  кВтч* diesel_time_h - Время работы дизельной электростанции (ДЭС),  ч* wind_time_h - Время работы ветряной электроустановки (ВЭУ),  ч * velocity_max_msec - Скорость ветра (мах), м/с * velocity_mean_msec - Скорость ветра (ср), м/с* tmp_grad - Температура окр. среды (ср), градЗадача: построить модель, которая позволяет предсказывать значения временного ряда diesel_fuel_kWh на заданное количество суток вперёд. Таким образом, решается задача предсказания временного ряда.Для решения задачи используется AutoML фреймворк FEDOT.<jupyter_code>import numpy as np
import pandas as pd
from sklearn.metrics import mean_squared_error, mean_absolute_error

# Additional custom functions
from processing import prepare_multimodal_data, plot_results, multi_automl_fit_forecast, plot_diesel_and_wind

from pylab import rcParams
rcParams['figure.figsize'] = 15, 7<jupyter_output><empty_output><jupyter_text>Ниже представлен пример прогнозирования временного ряда на основе использования многомерных временных рядовВ рамках данного ноутбука будем варьировать размер обучающей выборки и длину прогнозирования. Вспомогательные функцииРеализуем функцию, которая будет запускать AutoML алгоритм.<jupyter_code>def clip_dataframe(df, forecast_horizon, history_size):
    # Take last n elements from dataframe to train
    dataframe_cutted = df.tail(history_size+forecast_horizon)
    
    return dataframe_cutted

def run_automl(df: pd.DataFrame, features_to_use: list, target_series: str, 
               forecast_horizon: int = 10, history_size: int = 397, 
               timeout: int = 1):
    """ Launch AutoML FEDOT algorithm for time series forecasting task """
    
    dataframe_cutted = clip_dataframe(df, forecast_horizon, history_size)
    
    ts = np.array(dataframe_cutted[target_series])
    mm_train, mm_test, = prepare_multimodal_data(dataframe=dataframe_cutted,
                                                 features=features_to_use,
                                                 forecast_length=forecast_horizon)
    # Prepare parameters for algorithm launch
    # timeout 2 - means that AutoML algorithm will work for 2 minutes
    composer_params = {'max_depth': 6,
                       'max_arity': 3,
                       'pop_size': 20,
                       'num_of_generations': 100,
                       'timeout': timeout,
                       'preset': 'ultra_light',
                       'metric': 'rmse',
                       'cv_folds': None,
                       'validation_blocks': None}
    forecast, obtained_pipeline = multi_automl_fit_forecast(mm_train, mm_test,
                                                            composer_params,
                                                            ts, forecast_horizon,
                                                            vis=False)    
    
    return forecast, obtained_pipeline    


def plot_automl_forecast(df, forecast_horizon, history_size, forecast):
    dataframe_cutted = clip_dataframe(df, forecast_horizon, history_size)
    ts = np.array(dataframe_cutted[target_series])
    
    # Visualise predictions
    plot_results(actual_time_series=ts,
                 predicted_values=forecast,
                 len_train_data=len(ts) - forecast_horizon)<jupyter_output><empty_output><jupyter_text>Загрузим датасет<jupyter_code>df = pd.read_csv('pw_dataset.csv', parse_dates=['datetime'])
# Make visualisation
plot_diesel_and_wind(df)<jupyter_output><empty_output><jupyter_text>Общее количество элементов в рядах: 397.Определим целевой временной ряд и ряды, которые будут использовать как предикторы<jupyter_code>features_to_use = ['wind_power_kWh', 'diesel_time_h', 'wind_time_h',
                   'velocity_max_msec', 'velocity_mean_msec', 'tmp_grad',
                   'diesel_fuel_kWh']
target_series = 'diesel_fuel_kWh'<jupyter_output><empty_output><jupyter_text>Запуск алгоритма для прогноза на 30 элементов, размер обучающей выборки 200, время работы 0.2 минуты<jupyter_code>forecast, obtained_pipeline = run_automl(df=df, features_to_use=features_to_use, 
                                         target_series=target_series, 
                                         forecast_horizon=30,
                                         history_size=200,
                                         timeout=0.2)
obtained_pipeline.show()
plot_automl_forecast(df, forecast_horizon=30, history_size=200, forecast=forecast)<jupyter_output><empty_output><jupyter_text>Запуск алгоритма для прогноза на 60 элементов, размер обучающей выборки 300, время работы 2 минуты<jupyter_code>forecast_horizon = 60
history_size=300
timeout=2
forecast, obtained_pipeline = run_automl(df=df, features_to_use=features_to_use, 
                                         target_series=target_series, 
                                         forecast_horizon=forecast_horizon,
                                         history_size=history_size,
                                         timeout=timeout)
obtained_pipeline.show()
plot_automl_forecast(df, forecast_horizon, history_size, forecast=forecast)<jupyter_output><empty_output>
{'fraction_non_alphanumeric': 0.06462821403752605, 'fraction_numerical': 0.009034051424600417, 'mean_word_length': 2.935064935064935, 'pattern_counts': {'":': 0, '<': 25, '<?xml version=': 0, '>': 25, 'https://': 0, 'lorem ipsum': 0, 'www.': 0, 'xml': 0}, 'pii_count': 0, 'substrings_counts': 0, 'word_list_counts': {'cursed_substrings.json': 26, 'profanity_word_list.json': 0, 'sexual_word_list.json': 0, 'zh_pornsignals.json': 0}}
{'chain_length': '6', 'dir': 'jupyter-structured-clean-dedup', 'id': '657392', 'license': 'BSD-3-Clause', 'n_tokens_mistral': 1894, 'n_tokens_neox': 1976, 'n_words': 382, 'path': 'cases/industrial/forecast_vs_history.ipynb', 'repo_name': 'rozlana-g/FEDOT', 'size': '5756'}