Авторы: Варун Айенгар, Абхишек Вайдьянатан, Адитья Чандрасекхар, Киран Бодипати

Вступление

Энергия необходима для экономического и социального роста любой экономики. Согласно отчету, опубликованному в World Energy Outlook в 2017 году, спрос на энергию постоянно растет, идя в ногу с глобализацией, индустриализацией и глобальным экономическим ростом, и ожидается, что спрос вырастет примерно на 30% в период между 2015 и 2035 годами. Таким образом, необходимо разработать прогноз спроса на энергию, поскольку точные прогнозы спроса на энергию помогают разработчикам политики в улучшении графика энергоснабжения и дают ценные предложения по планированию работы системы энергоснабжения.

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

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

Задача

Целью этого проекта было создание модели машинного обучения, которая могла бы прогнозировать энергопотребление здания на следующий день с 15-минутными интервалами на основе исторических данных с 2014 по 2016 год. Доступные нам данные в основном имели три фактора для прогнозирования - недавний энергопотребление, температура в прилегающих регионах и время года. Поскольку такие данные не очень указывают на использование энергии, за исключением довольно широкого смысла, мы прогнозировали потребление энергии только за 24 часа - и хотя такой короткий период времени упрощает прогнозирование, это также означает, что постоянство дает очень хорошие результаты по потерям и было трудно победить без значительного запаздывания прогнозов.

Основной процесс построения модели прогнозирования спроса на энергию показан на блок-схеме ниже:

Набор данных

Набор данных, предоставленный нам Schneider Electric, состоял из 6 столбцов, вместе представляющих следующие данные с 15-минутными интервалами:

  • Потребление энергии
  • Показания температуры в трех ближайших зданиях
  • День недели
  • Дата и время записи

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

Анализ данных

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

После удаления этих данных у нас осталось около 56 000 точек данных, которые мы разделили на обучение и тестирование. Вы можете увидеть общую статистику на картинке ниже.

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

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

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

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

Интересно посмотреть, имеет ли потребление энергии модели на ежемесячном, недельном и дневном уровне, мы увеличили масштаб графика и проанализировали его:

На графике выше показано потребление энергии за несколько дней. В ночное время наблюдается явное падение потребления, поэтому мы поняли, что нам понадобится функция, указывающая время дня, чтобы обнаруживать и прогнозировать эти, казалось бы, незначительные изменения, которые на самом деле важны, поскольку мы прогнозируем только на 24 часа вперед. Исходя из обычного времени подъемов и падений, мы решили считать с 6 утра до 7:30 вечера днем, а остальное время - ночью.

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

Предварительная обработка и разработка функций

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

Работа с отсутствующими данными

В предоставленных нам данных было несколько пробелов в показаниях. Это не годится - работа с данными таймсерий требует согласованных интервалов для работы окон и извлечения функций. Итак, мы боролись с этим, используя линейную интерполяцию перед разделением поезд-тест. Возможно, это приводит к незначительной утечке данных в тестовых данных. Однако важно понимать, что «тестовые» данные здесь просто для целей проверки, и наличие плавной кривой для замены отсутствующих точек данных не дает модели какой-либо формы «несправедливого преимущества» над тестовыми данными.

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

Извлечение функций

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

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

Во-первых, мы добавили столбец, состоящий из дня года, нормализованного к диапазону [0, 1] путем деления на 365. Это дает модели информацию о времени года и, следовательно, позволяет ей обнаруживать сезонные изменения в структура энергопотребления.

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

Наконец, мы добавили флаг, показывающий, были ли измерения сняты днем ​​или ночью. Мы классифицировали дневное время как с 6:00 до 19:30, а с 19:30 до 6:00 считалось ночным временем. Эти времена были основаны на внезапных подъемах / падениях, которые мы наблюдали ежедневно, и с этими данными теперь модель могла бы распознавать дневные закономерности для большей точности.

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

  • Разница первого, второго и третьего порядка по потреблению энергии, то есть разность, импульс и сила.
  • Первые четыре момента, мин. И макс. Для потребления энергии, а также для разницы в потреблении энергии.
  • Прогноз температуры на этот день
  • День недели
  • День года (нормализованный, так что на самом деле это дробная часть, показывающая, насколько далеко в году)
  • Рабочий день или нет
  • Дневное или ночное время

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

Всего у нас было 19 уникальных функций, охватывающих 211 входов.

Предварительная обработка подсетей

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

Наша подсеть масштабирования ввода использует tanh для ограничения входных значений, нормализации их до диапазона [0,1], а также для избавления от шума и выбросов в процессе.

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

Построение модели

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

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

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

Тестовая потеря: 0,358616

Итераций: 10000

Решатель: Адам

Нет. перцептронов в самом верхнем слое: 64

Коэффициент масштабирования для nn слоев: ⅔

Нет. слоев: 7 + линейный сумматор (LC)

Вероятность прекращения обучения: 0,05

Активация: ReLU (с квадратными перцептронами)

Снижение веса: 10 ^ -4

Модели, которые мы тестировали, сравнивались на основе потерь в тестах и ​​запаздывания. Мы выбрали эту конфигурацию как лучшую, поскольку она незначительно превосходила задержку, а также имела довольно большой вторичный всплеск задержки при t = 0. К сожалению, ни одна из наших моделей, превосходящих настойчивость, в том числе и эта, не смогла иметь задержку первичного тестирования при t = 0. Эта модель оказалась наилучшим «балансом» из двух, по нашему мнению, подробности вы можете увидеть ниже.

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

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

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

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

Наш график запаздывания действительно достигает пика на 24-часовой отметке (потребление энергии за 24 часа), но также имеет вторичный пик на 0. Значение объясненной дисперсии (R²) при 0 показывает, что мы можем ожидать несколько точных результатов от нашей модели при прогнозировании. потребление энергии в реальном времени. С доступными нам данными это был лучший график лагов, которого мы смогли достичь, сохранив при этом потери ниже, чем у настойчивых.

Заключение

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

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

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