Снижение пиков с помощью нейронных сетей: Часть I

Использование нейронных сетей для прогнозирования завтрашнего потребления электроэнергии

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

Исследования в сочетании с Open Modeling Framework (OMF)

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



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

Малейшая неточность может означать разницу в десятки тысяч долларов - реализация стратегии сокращения пиковых нагрузок с неверным прогнозом нагрузки может даже увеличить расходы. К счастью, достижения в области глубокого обучения и нейронных сетей могут предложить коммунальным предприятиям невероятно точную картину энергопотребления на следующий день. Open Modeling Framework (OMF) и я использовали нейронные сети для создания модели прогнозирования нагрузки на сутки вперед, которую можно легко реализовать для информирования при принятии решений об отправке.

Почему не что-нибудь попроще?

Первоначально мы создали модель линейной регрессии с помощью пакета python sci-kit learn. Хотя эта более простая модель достигла 10 средней абсолютной процентной ошибки (MAPE), она не была достаточно точной, чтобы надежно уменьшить пики.

Самым большим препятствием была разница в суточных пиках между зимними и летними месяцами. Зимние месяцы достигают пика дважды в день, а летние - в середине дня. Линейная модель не может создавать эти две формы суточной нагрузки одновременно. В то время как линейная регрессия может находить простые взаимосвязи (+ 500 кВт, потому что понедельник, -100 кВт, потому что это март), нейронная сеть может рассчитывать более сложные взаимосвязи (+ 5100 кВт, потому что 15:00 в понедельник в апреле, -1500 кВт, потому что 5:00 в День Благодарения). Это уменьшило нашу ошибку обучения примерно до 3,5 MAPE, что позволило сэкономить десятки тысяч долларов.

Детали программного обеспечения

Наша модель написана на Python для включения программного обеспечения для прогнозирования нагрузки в базу данных OMF. Мы используем пакет pandas для управления данными, а также внедрили Keras Tensorflow (программное обеспечение машинного обучения Google) для создания нейронной сети. Вот ссылка на репозиторий. Код прост в использовании:

import loadForecast as fc
import pandas as pd
df = pd.read_csv('test.csv')
all_X = fc.makeUsefulDf(df)
all_y = df[‘load’]
predictions, accuracy = fc.neural_net_predictions(all_X, all_y)

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

Состав

Структура нейронной сети постоянно обновляется, поскольку мы ищем более точные и эффективные методы; однако в настоящее время мы остановились на пятиуровневой полностью подключенной сети, в которой каждый уровень содержит 71 узел. Мы используем функцию ReLU на каждом уровне и минимизируем среднеквадратичную ошибку.

Входы

Мы рекомендуем обучать модель данным по крайней мере за три года. Модель принимает CSV в качестве входных данных, где в каждой строке указывается нагрузка и погода для данного года, месяца, дня и часа. Если у коммунального предприятия нет данных о температуре, OMF также предлагает «weatherPull» - программу, которая может легко собирать и возвращать почасовую погоду для заданного почтового индекса. Если есть какие-либо нулевые значения температуры, функция прогноза нагрузки использует метод «прямого заполнения», где нулевые значения заменяются последним ненулевым значением. Например, «38, 39, 41, NaN, NaN, 38, NaN, 32» будет читаться как «38, 39, 41, 41, 41, 38, 38, 32».

Функции

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

  • Годы с 2000 года *
  • Загрузить за 24 часа до *
  • Час дня (12:00, 1:00,… 23:00)
  • День недели (воскресенье, понедельник, суббота)
  • Месяц года (январь, февраль,… декабрь)
  • Температура * **
  • Температура² ***
  • Загрузка за предыдущий день * (12:00 предыдущего дня, 1:00 предыдущего дня,… 23:00 предыдущего дня)
  • Праздники (праздники NERC6) **** (isNewYears, isMemorialDay… isChristmas)

* Эти характеристики нормализованы путем вычитания из среднего и деления на стандартное отклонение, что помогает собрать все точки данных близко к нулю. Разделив на стандартное отклонение вместо диапазона (как предлагают некоторые специалисты по данным), мы повысили точность на один процент.

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

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

**** Наблюдаемые праздники также имеют значение «1» (или «True»). Например, День независимости 2015 года был в субботу, поэтому он отмечался в пятницу, 3 июля. И 3 июля, и 4 июля 2015 года помечены как «1» для функции «isIndependenceDay».

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

Мы обучили эту нейронную сеть на данных ERCOT в Хьюстоне за 2002–2017 годы и протестировали модель с нагрузкой на 2018 год. Мы достигли точности примерно 96,5% (3,5 MAPE). Вся программа часто выполняется в течение 10 минут. Мы развернули эту нейронную сеть по модели сокращения спроса с коммунальной услугой, использующей батареи для переключения нагрузки для снижения спроса, и обнаружили, что мы сэкономили 40 процентов оптимального решения (например, если бы все работало идеально, коммунальное предприятие сэкономило бы 95000 долларов на зарядке по требованию, но потому что прогнозы не идеальны, это сэкономило примерно 40 000 долларов США. Это предполагает типичную плату за потребление в размере 20 долларов США за кВт. Плата за потребление, среди других значений, является входной частью нашей модели рентабельности, и мы в процессе распространения этих результатов на другие коммунальные услуги.)

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

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

Вы нашли ошибки? У вас есть вопросы? Свяжитесь со мной и узнайте больше о проектах на моем сайте.