Введение

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

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

Цель

Цель нашего проекта - спрогнозировать потребление энергии в здании 126 компании Schneider Electric на основе исторических данных, измерений температуры вокруг здания и временных характеристик, таких как время дня и день недели. Мы стремимся создать модель нейронной сети, которая будет прогнозировать потребление энергии на 24 часа в будущем, используя данные с 15-минутными интервалами. Модель будет построена на Autocaffe, инструменте разработки AI, разработанном AI4IMPACT. Инструменты анализа данных будут построены с использованием Python на Jupyter Notebook.

Набор данных

Нам предоставляется набор данных о потреблении энергии с интервалом в 15 минут с 24 июля 2014 г. по 26 мая 2016 г. (из здания 126 от Schneider Electric). Нам также предоставляются измерения температуры от wx1 до wx4 (места около здания 126 компании Schneider Electric). Наборы данных температуры представлены нам как форма прогноза. Таким образом, нам разрешено использовать будущие данные о температуре в качестве входных данных для нашей модели.

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

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

После предварительного анализа мы обнаружили несколько характеристик исходных наборов данных.

1. На каждые 12 дней (приблизительно) в наборе данных о потреблении энергии существуют 2 дня пробелов в данных. Это составляет примерно 16,7% от общего объема данных, что является очень значительной суммой. Таким образом, соответствующий метод интерполяции чрезвычайно важен для обеспечения предсказуемости нашей модели.

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

3. Температуры от WX1 до 3 имеют одну и ту же временную шкалу, в то время как WX4 имеет временную шкалу вне временной шкалы энергопотребления. Прогноз температуры показывает сезонные тенденции с пиками летом при 33 ° C и минимумами зимой при -3 ° C. Показания температуры записываются с разными интервалами с разными пробелами в данных. Это будет более подробно описано в разделе «Предварительная обработка данных».

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

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

Выбор набора данных показаний температуры

Что касается временной шкалы, WX4 выпадает из зарегистрированного диапазона энергопотребления, поэтому не будет рассматриваться. С другой стороны, WX 1,2 и 3 имеют одинаковую временную шкалу с 1 января 2014 года по 1 января 2017 года.

WX2 имеет интервал 55–5 минут, тогда как WX3 имеет интервалы 20–30–30–30–30–30–10 минут. Хотя интервалы перехода WX1 от 15/30 минут до нерегулярных интервалов 20–30–30–30–30–30–10 минут, этот переход происходит после 27 июня 2016 г., что выходит за рамки нашего диапазона дат для потребления энергии. Таким образом, мы можем считать, что WX1 имеет общие интервалы 15/30 минут.

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

Кроме того, прогноз WX1 расположен ближе всего к зданию-126 из 4, таким образом, наиболее показательным для температуры окружающей среды в здании-126. Таким образом, для наших температурных характеристик используется только набор данных WX1.

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

Отсутствуют данные как в WX1, так и в наборе данных о потреблении энергии.

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

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

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

Выбор временной шкалы

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

Нормализация

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

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

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

Сезонность и тренд

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

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

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

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

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

Ежедневное, еженедельное и ежемесячное наблюдение

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

В будние дни потребление энергии увеличивается примерно после 05:00 и падает примерно после 20:00. Скорее всего, это соответствует графику работы персонала в здании. Кроме того, в течение дня существуют короткие циклы потребления энергии. Однако анализ требует дополнительных подробностей о работе здания. На основании предоставленной нами информации мы не можем делать выводы о ее причине.

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

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

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

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

Выбор функций

Нейронные сети плохо работают с большим количеством входов по следующим причинам.

  1. Большое количество вводимых данных значительно замедляет обучение.
  2. Это приводит к слишком сложным моделям.
  3. Это может привести к переобучению.

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

Расчет корреляции

Для непрерывных переменных наша группа использует корреляционные функции, такие как корреляция Пирсона и корреляция Спирмена, в качестве руководства для выбора наших характеристик. Корреляция Пирсона позволяет нам фиксировать линейную зависимость между прогнозом и нашими функциями, в то время как корреляция Спирмена позволяет нам фиксировать монотонную связь между прогнозом и нашими функциями. Для обеих корреляционных функций величина представляет силу корреляции, а знак представляет направление (увеличение или уменьшение). Значения вычисляются с использованием функций, включенных в библиотеку Scipy в python.

A: столбец потребления энергии

Пример показан выше, где мы видим, что A: 0 (текущее значение), вероятно, является хорошим предсказателем для значений 96 интервалов (24 часа) вперед. С помощью этого метода также выбираются периоды окон. Например, среди различных оконных периодов для среднего значения A: 0: -12 MEAN выбрано из-за того, что оно имеет самую высокую корреляцию с нашими предсказанными значениями.

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

Прямой выбор (добавление функций)

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

Обратное исключение (удаление компонентов)

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

Кодирование временной переменной

Как мы видели в предыдущем разделе, время является важной характеристикой для прогнозирования временных рядов. Время - это уникальная функция, которая может интерпретироваться как категориальная характеристика (понедельник, вторник, среда и т. Д.), Так и непрерывная функция.

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

Порядковая кодировка

Порядковое кодирование - это простой метод кодирования, при котором каждой категории присваивается целое число для ее представления. Например, с понедельника по воскресенье можно просто закодировать от 0 до 6.

Преимущества:

  1. Требуется только 1 переменная для представления категориальной функции
  2. Сохраните некоторую информацию о порядке функции, например, вторник после понедельника.

Недостатки:

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

Одно горячее кодирование

С другой стороны, One Hot Encoding представляет категории как уникальные векторы 1 и 0. 1 представляет наличие категории, а 0 представляет ее отсутствие. Например, понедельник можно кодировать как [1, 0, 0, 0, 0, 0, 0], а воскресенье - как [0, 0, 0, 0, 0, 0, 1].

Преимущества:

  1. Сохраняет нашу способность использовать tanh как функцию активации и квадратные перцептроны.

Недостатки:

  1. Теряет всю информацию о порядке категорий.
  2. Требуется k переменных для представления k категорий. Это не подходит при большом количестве категорий.

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

Однако тип кодирования, похоже, не показывает существенной разницы с точки зрения потерь при тестировании.

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

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

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

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

Время как непрерывная функция

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

синус_времени = грех (2 * π * t / n)

time_cosine = cos (2 * π * t / n)

Где t: час, n: общее количество часов

Если используется только одна синусоидальная функция, наша модель не сможет различать точки 1 и 2. Однако, включив другую синусоидальную функцию, мы, таким образом, можем кодировать все 24 часа как уникальные пары значений.

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

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

Разделение на набор для обучения и тестирования

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

Построение нашей модели

Чтобы оценить, насколько хорошо работает наша модель, мы используем следующий критерий:

  1. Из-за коротких временных рамок, по которым нам поручено составить прогноз (24 часа), потеря стойкости является конкурентоспособным эталоном. Наша тестовая потеря (RMSE) сравнивается с потерей стойкости. В этой задаче потеря устойчивости составляет 0,37594. Это значение получается путем вычисления RMSE всех текущих значений (T + 0) с их соответствующими прогнозируемыми значениями (T + 96). Это служит эталоном для сравнения наших потерь в тесте.
  2. Достигаем ли мы пикового лага при лаге 0
  3. Насколько наши прогнозы соответствуют реальным значениям
  4. Насколько «разрежен» или «плотен» наш график рассеяния. Чем сложнее сюжет, тем лучше наш прогноз.

Базовая модель

Размер нейронной сети: 32

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

Вот как мы можем интерпретировать приведенные выше диаграммы. A: -576 означает принятие значения столбца A на T-576 в качестве характеристики нашей сети. В этом случае A относится к столбцу потребления энергии.

Для сети реализована 3-х слойная нейронная сеть. Первый слой содержит 32 нейрона. Второй слой содержит 1/2 количества нейронов первого слоя, а третий слой содержит 1/3 количества нейронов первого слоя. Для каждого уровня используется функция активации ReLU.

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

Наша окончательная модель

Размер нейронной сети: 32

Снижение веса (L2): 0,00001

Показатель отсева: 0,1

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

Все модели построены с 30 повторами и сравниваются друг с другом, чтобы выбрать лучшие функции и сеть. Это сделано для того, чтобы на наше сравнение меньше всего влияла случайность. Большое количество повторов становится жизнеспособным без перегрузки системы из-за небольшого размера сети, небольшого количества функций, а также ReLU в качестве нашей функции активации.

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

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

Результаты

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

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

Ограничения подхода

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

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

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

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

Заключение и обзор

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

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

Авторы: Ё Ён Шань, Лью Ван Сен, Линь Бо, Ли Бо Вен, Син Вэй Чжэн. Команда Autocomp для AI4IMPACT Datathon.