Введение

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

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

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

Цель

Цель нашего проекта — построить модель для прогнозирования энергопотребления конкретного здания на основе прошлого энергопотребления 15-минутных интервалов и прогнозов температуры от четырех разных метеостанций, расположенных рядом со зданием. Эффективная модель сможет прогнозировать будущее на 24 часа (T+96) и обеспечивать точные прогнозы потребления энергии. Используя многоуровневую сеть персептрона, наша команда попытается создать модель прогнозирования энергопотребления с высокой точностью.

Исследовательский анализ данных

Набор данных о потреблении энергии

Используя набор данных о потреблении энергии, предоставленный Schneider Electric, мы провели предварительный анализ данных, чтобы получить представление о сезонной разбивке потребления энергии. Набор данных содержит данные о потреблении энергии с 15-минутными интервалами с 24 июля 2014 г. по 26 мая 2016 г. (рис. 2).

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

После дальнейших исследований мы поняли, что с 23.11.2014 произошел скачок потребления энергии. Мы сделали анализ среднего количества энергопотребления с 23.11.2014 по 31.12.2014 и за аналогичный период 2015 года:

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

Поскольку наш проект направлен на прогнозирование потребления на 24 часа вперед (T+96), мы также проводили еженедельный анализ потребления. Мы взяли одну неделю из набора данных о потреблении и создали 24-часовое окно, чтобы разделить данные о потреблении по дням недели. Как и ожидалось, потребление энергии в будние дни было намного выше, чем в выходные (рис. 4). Мы также могли наблюдать еще одну сезонную тенденцию в течение дня, поскольку потребление энергии достигало пика поздним утром и ближе к вечеру с падением между ними. Это может быть связано с тем, что здание представляет собой фабрику, где потребление энергии увеличивается в рабочее время и падает в обеденное время, когда работа временно останавливается.

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

Набор данных прогноза температуры

Прогнозы температуры в градусах Цельсия также были предоставлены четырьмя различными метеостанциями, расположенными в непосредственной близости от здания. Четыре метеостанции, названные wx1, wx2, wx3 и wx4, расположены в порядке расстояния относительно здания. Мы построили наборы данных прогноза температуры в зависимости от энергопотребления для всего диапазона дат. Мы заметили, что температура следует годовой сезонности. В целом существует обратная зависимость между температурой и энергопотреблением здания. Это может быть связано с более высоким потреблением энергии из-за использования обогревателей в холодную погоду.

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

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

Отсутствуют данные

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

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

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

Затем мы объединили прогнозы температуры с метеостанций wx1, wx2 и wx3 с данными о потреблении энергии. Мы заполняем пустые строки 4-дневной линейной интерполяцией, поскольку у нас будет все прогнозируемое значение раньше T+0, поэтому риск утечки данных будет минимальным или отсутствовать.

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

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

  • Историческое потребление
  • Прогноз температуры по 3 метеостанциям
  • Месяц (закодировано)
  • Рабочий/нерабочий день
  • Циклическая синусоидальная функция с использованием часа

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

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

Нормализация функций

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

Затем мы нормализовали значения каждой из наших функций, используя скаляр min-max, используя параметры поезда на нашем этапе предварительной обработки, используя формулу, как показано ниже:

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

Мин-макс скаляр является нашим предпочтительным выбором по сравнению с другими методами масштабирования, поскольку мы хотим сохранить нормализованное значение между 0 и 1, чтобы модель могла лучше учиться. Анализ потребления также показал, что данные имеют согласованные «границы» в максимуме и минимуме, следовательно, любые выбросы будут больше 1, и модель научится их игнорировать. Наконец, распределение потребления не является распределением по Гауссу, чтобы оправдать использование стандартизации.

Упорство

Мы устанавливаем ориентир как настойчивость. Постоянство — это когда прогнозируемое значение T+96 совпадает со значением при текущем T+0. Используя потери RMSE, мы рассчитываем постоянство до удара как 0,014842.

Наивная модель

Первоначально мы использовали простую 4-слойную сеть только с наивным окном. После обучения с помощью решателя Adam и изменения размера сети мы пришли к наилучшей тестовой потере 0,01387 с размером сети 32, что превосходит постоянство.

Графики потерь и прогнозы модели следующие:

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

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

Методология нейронной сети

Разработка функций

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

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

Затем мы использовали прогноз температуры T+96 и T+96:0 MEAN от wx1, wx2 и wx3 в качестве входных данных для прогноза температуры. Прогноз температуры для каждой станции — это функция отдельно для учета разности потенциалов из-за разного расстояния между метеостанциями. Температуру также учитывали сезонные изменения в течение года от лета к зиме. Возможно, поэтому закодированный месяц был бесполезен и только добавлял шума.

Наконец, мы использовали исторические данные о потреблении энергии за 24 часа в качестве входных данных прошлое потребление энергии с ежедневными (T0:-96) средним значением и стандартным отклонением. Среднее суточное потребление энергии дает базовый прогноз, а стандартное отклонение отслеживает степень отклонения от среднего. Исторический минимум и максимум потребления за 6 дней (T0:-576) также использовался для фиксации «границ» в течение недели.

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

Мы обучили модель с нашими новыми входными переменными. Благодаря новым функциям мы добились потери при тестировании 0,009526, что по-прежнему превосходит устойчивость. Разрыв между потерями в поезде и тесте сократился. Отставание также улучшилось, а вторичный пик при Т+0 стал более выраженным.

Тонкая настройка модели

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

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

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

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

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

Мы заметили, что чем больше размер nn, тем меньше потери при тестировании. Однако использование большого размера nn приведет к экспоненциальному увеличению времени обучения. Таким образом, наша группа пришла к выводу, что 32 является оптимальным размером nn.

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

Чтобы уменьшить переоснащение, мы решили выбрать высокое затухание веса 0,0001 и вероятность отсева 0,1.При такой конфигурации модель будет иметь тенденцию для обучения на 3000–4000 итераций с немного лучшими графиками обучения и тестирования.

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

Наилучшие результаты:
Потери при тестировании: 0,00925955
nn-size: 32
Распад веса: 0,0001
Вероятность отсева: 0,1
Размер узкого места: 1,5< br /> Решатель: Адам

Затем мы используем возведенные в квадрат персептроны, которые вводят квадрат входных переменных (x²) в нейрон. Это активирует более быстрое обучение и лучшее обучение по сравнению с использованием обычных персептронов.

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

Потери при тестировании: 0,00982457
nn-size: 32
Распад веса: 0,0001
Вероятность отсева: 0,1
Размер узкого места: 1,5
Решатель: Адам

Хотя потери при тестировании увеличились, они все еще значительно ниже устойчивости. Что еще более важно, основной пик запаздывающей корреляции теперь находится около T+0, что указывает на то, что модель способна прогнозировать потребление энергии при T+96 с нулевой задержкой. График тестового прогноза также показывает, что прогнозируемое значение модели не слишком далеко от фактического.

План реализации

Мы планируем создать конвейер модели от API-интерфейса источника данных (например, станции прогноза погоды) до алгоритма ETL, который автоматически выполняет очистку и обработку данных перед их подачей в модель. Затем модель будет прогнозировать потребление энергии на ежедневной основе.

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

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

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

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

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

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

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

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

Сценарий: Чиа Сюнь Мин, Клэр Тан, Финни Нео, Лянь Пэн Ченг