Прогноз спроса на электроэнергию во временных рядах

Использование метода декомпозиции и LSTM

При анализе данных временных рядов важно проверять лежащие в основе модели, чтобы помочь понять данные и предоставить точные прогнозы.

Данные временных рядов обычно состоят из четырех компонентов:

  • Компонент тренд указывает на увеличение или уменьшение данных за длительный период времени.
  • Компонент циклический заставляет данные расти и падать в течение периода времени, который длиннее сезона.
  • Компонент сезонный указывает, что данные регулярно колеблются вокруг линии тренда. Сезонный компонент имеет одинаковые или близкие значения для каждого события определенного сезона или периода.
  • Компонент шум представляет собой часть данных, не учитываемую другими компонентами.

Данные, использованные в модели, были получены от Kaggle и содержат информацию о потреблении электроэнергии, выработке и ценах в Испании за четырехлетний период.

Для создания модели мы будем использовать столбец потребления электроэнергии или «Общая нагрузка».

Для построения точной модели прогноза методом декомпозиции данные временных рядов должны быть сезонными.

График временных рядов данных показан ниже, он показывает, что данные являются сезонными, а их сезонные изменения относительно постоянными во времени.

Три вертикальные линии показывают закономерность в данных, которая повторяется каждые 24 часа. Это указывает на то, что данные имеют 24 сезона, поскольку количество сезонов во временном ряду равно количеству периодов в повторяющейся закономерности.

Для этих данных подходит аддитивная модель, поскольку сезонные изменения относительно постоянны во времени. При аддитивной декомпозиции данные временного ряда Yt представляют собой сумму декомпозированных компонентов, т. е.

𝑌(𝑡)﹦𝑇(𝑡)﹢𝑆(𝑡)﹢𝐸(𝑡)

Где 𝑇(𝑡) — компонент тренда, 𝑆(𝑡) — сезонный компонент, а 𝐸(𝑡) — компонент шума временного ряда.

Для декомпозиции временных рядов мы будем использовать функцию seasonal_decompose из статистических моделей.

После декомпозиции из данных временного ряда вычитаем сезонную составляющую, десезонализованная модель разбивается на обучающую и тестовую выборки.

Затем мы переходим к обучению сети LSTM (долговременная кратковременная память) с десезонализованной моделью. Сеть LSTM — это тип рекуррентной нейронной сети, которая изучает и фиксирует закономерности из прошлых данных в течение длительных периодов времени, чтобы делать прогнозы о будущих значениях.

LSTM чувствительны к масштабу и диапазону обучающих данных. Если сеть LSTM обучается на данных, которые не масштабируются или имеют большой диапазон, это может привести к тому, что модель станет нестабильной и будет работать плохо. MinMaxScaler использовался для масштабирования данных между значениями 0 и 1.

При использовании LSTM для прогнозов временных рядов входные данные должны быть преобразованы в последовательность пар вход-выход. Обычно это делается путем создания входной последовательности (X) и выходной (Y), где входная последовательность состоит из прошлых nнаблюдений, а выходная последовательность состоит из n+1-е наблюдение.

Например, вы можете создать пару вход-выход, которая принимает 3 наблюдения в качестве входных данных и 4-е наблюдение в качестве выходных данных.

TimeseriesGenerator от Keras использовался для разделения десезонализованных данных на пакеты, каждый из которых имел 5 входных наблюдений. При обучении LSTM вы можете попробовать использовать разную длину ввода, чтобы получить лучшее обучение.

Сеть LSTM была обучена на данных, и были настроены следующие параметры для повышения производительности модели, количества нейронов в сети и количества эпох.

Получив удовлетворительную производительность на обучающих данных, мы продолжаем прогнозировать значения для десезонированных тестовых данных. Затем тестовые данные были масштабированы и разделены на пакеты с помощью генератора TimeseriesGenerator. Генератор прогнозов использовался дляпрогнозирования выходных данных на основе значений во входной последовательности каждого пакета.

Прогнозируемые значения были преобразованы обратно в исходный масштаб с помощью функции inverse_transform в MinMaxScaler, и для получения окончательного прогноза был добавлен сезонный компонент.

Весь этот процесс был также повторен для модели LSTM, обученной на данных без применения декомпозиции.

Показатели среднеквадратической ошибки (RMSE), среднеквадратической ошибки (MSE) и средней абсолютной ошибки (MAE) использовались для оценки производительности этой модели на тестовых наборах.

Значения показателей производительности показывают, что сеть лучше обучается, когда данные временных рядов десезонализованы. Такой подход обеспечивает более точные результаты прогнозирования и может использоваться коммунальными предприятиями для оптимизации своих систем производства и распределения электроэнергии.

Код, используемый для этого проекта, можно найти здесь.