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

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

Презентация варианта использования и выборка данных

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

Следует отметить, что Франция является вторым по величине производителем и потребителем электроэнергии в Европе после Германии с годовым потреблением около 470 ТВтч.

Кроме того, во Франции самая большая доля электрического отопления в Европе в натуральном и процентном выражении. По этой причине это самая термочувствительная страна, а это означает, что изменение температуры оказывает наибольшее влияние на спрос. Обычно в 19:00 зимой, если температура на 1 °C ниже сезонных норм, потребление увеличится примерно на 2,3 ГВт, или примерно на 5%. Таким образом, при моделировании мы постараемся точно отразить это поведение.

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

Цель

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

Функции

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

Также известно, что погода играет ключевую роль в спросе на энергию: когда становится холодно, люди включают свои системы отопления, некоторые из которых работают на электричестве (электрические радиаторы, тепловые насосы), а когда становится жарко, их система кондиционирования воздуха включена. Enedis, главный дистрибьютор электроэнергии во Франции, предоставляет некоторые исторические данные о температуре и освещенности здесь, которые используются внутри компании для прогнозирования нагрузки.

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

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

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

Вот таблица, которая обобщает все функции, которые будут использоваться для моделирования:

Предварительный анализ данных

Общий анализ и моделирование выполняются на Jupyter Notebook. Фрагмент кода ниже используется для форматирования данных. Мы решили работать с отметкой времени UTC, так как панды не могут легко анализировать данные с несколькими часовыми поясами.

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

Это подтверждает наше интуитивное предположение о тесной взаимосвязи между температурой и потреблением электроэнергии. Мы также видим сильную сезонность в сигнале нагрузки.

График ниже поможет нам понять, как историческая нагрузка изменяется с температурой. Данные агрегированы на дневном уровне (среднее значение), и мы видим, что независимо от дня недели зависимость очень похожа: ниже 17°C потребление увеличивается при понижении температуры.

Единственная разница между разными днями недели — это уровень потребления: в выходные дни он ниже, чем в будни. Это действительно имеет смысл, так как в выходные дни многие компании закрыты и, таким образом, потребляют меньше энергии. Мы обязательно зафиксируем это поведение, добавив день недели в список функций модели.

Моделирование

Введение

Теперь, когда наш набор данных готов, давайте перейдем к части моделирования.

Прогнозирование временных рядов является очень активной темой исследований. Heka осуществляет строгий технологический контроль в этой области.

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

Методология

Sia Partners активно инвестирует в свою технологическую экосистему Heka. Среди других тем, был разработан сильный опыт работы с временными рядами. Вот типичный рабочий процесс, который будет реализован для прогнозирования временных рядов:

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

В Heka мы разработали индивидуальный пакет под названием sia_ts_modelling, который теперь используется внутри компании для автоматизации процесса моделирования. Эта инициатива предлагает огромный список преимуществ:

  • Ускорьте создание новой модели с нуля
  • Избегайте небрежных ошибок при перестроении одних и тех же функций
  • Включите некоторые специальные знания Heka о временных рядах, которые нелегко развернуть, если они не упакованы (например, модели в час, определенные ниже).
  • Предоставьте сравнительную таблицу, позволяющую пользователям легко сравнивать производительность каждой модели, выбирать и развертывать лучшую из них.
  • Обеспечьте простой способ получения результатов
  • Легко включайте и сравнивайте любые пользовательские показатели

Параметризация

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

Обязательными параметрами являются следующие:

  • Различные наборы функций для тестирования
  • Все модели для тестирования
  • Разделение периода обучения/испытания
  • Метрики, которые будут использоваться

Тестируются несколько моделей:

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

Кроме того, еще один метод, который мы будем использовать в этом тесте, — это концепция модели на мгновение. То есть вместо того, чтобы иметь одну большую модель, действительную для каждого отдельного наблюдения, мы можем построить одну модель на мгновение, что в нашем случае означает одну модель в час. На приведенном ниже графике показано, как реализована эта методология:

Существует очень значительное преимущество в производительности при использовании моделей в час вместо одной большой модели: в нашем случае MAPE с моделью GAM вырастет с 5–8% до 3–4%. Это объясняется общей декорреляцией, полученной при наличии одной модели в час. Это еще более применимо к линейным моделям, поскольку они оптимизированы с учетом лежащего в их основе ограничения для соблюдения определенной непрерывности от одного значения к другому для каждого временного признака. Это не относится к модели случайного леса, где разделение функций уже является встроенным атрибутом модели.

Единственное ограничение, на которое следует обратить внимание при построении одной модели для каждого момента времени, заключается в том, чтобы убедиться, что для каждого момента времени доступно достаточное количество данных, чтобы избежать недообучения. В нашем случае, например, было бы неразумно иметь одну модель на час в неделю, так как каждая модель будет построена примерно с 52 * 5 наблюдениями.

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

Полученные результаты

Выбор модели

Функция конвейера возвращает три результата:

  • Фрейм данных бенчмаркинга (отображен на графике ниже)
  • Подогнанные модели в виде списка
  • Кадр данных прогноза. Его столбец — это прогнозы всех конфигураций

Вот что возвращает эталонный фрейм данных:

Из этой сравнительной таблицы видно, что наилучшей моделью является обобщенная аддитивная модель (GAM) с MAPE на тестовых данных ~2,03 %, что уже вполне удовлетворительно. Мы также можем построить лучший прогноз по сравнению с историческим сигналом, чтобы лучше визуализировать выходные данные:

Анализ модели

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

Анализ остатков

Остатки — это разница в каждой временной метке между прогнозами и наблюдениями. Этот анализ дает нам соответствующее представление о точности модели. В нашем примере ожидается, что остатки:

  • Быть некоррелированным. Если в остатках существует корреляция, это означает, что некоторая информация не была захвачена нашей моделью.
  • Имейте среднее значение нуля. Если среднее значение не равно нулю, то прогноз необъективен.

Более подробную информацию можно найти здесь".

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

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

Частичные графики зависимости

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

Наш анализ сосредоточится здесь на графике частичной зависимости температуры, хотя мы могли бы также взглянуть на этот график для других календарных функций (день недели, месяц, час дня). Посмотрим на график частной зависимости для температуры:

Из этого графика мы можем легко проверить несколько предыдущих предположений:

  • Влияние обогрева помещения на сеть начинает проявляться ниже 15°C.
  • Эффект охлаждения помещений заметен при температуре выше 20°C, но увидеть его гораздо труднее.
  • Модель улавливает тот факт, что влияние отопления помещений на спрос на электроэнергию во Франции намного выше, чем влияние охлаждения помещений.

Значения формы

Основываясь на теории игр, ценности Шепли фиксируют предельный вклад каждого игрока (= особенность) в результат игры (= цель). Эти значения становятся очень популярным способом понять, как каждая функция влияет на общий прогноз модели.

В нашем случае использования они помогут нам понять на одном графике, какая функция больше всего влияет на результат. Фрагмент кода для построения значений Shapley можно найти ниже:

Среднее значение Шепли по всему набору данных для каждой функции возвращает следующие результаты:

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

Заключение

В этой первой статье мы увидели, как легко построить модель машинного обучения для прогнозирования временных рядов с общей хорошей производительностью около 2% MAPE. Опыт Heka был высоко оценен и отмечен на протяжении всей презентации, поскольку он предложил нам очень полезный пакет собственной разработки с соответствующими функциями, которые можно легко воспроизвести в других проектах.

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