Введение

В последние годы проблемы энергопотребления стали горячей темой в обществе из-за увеличения использования многих видов энергии во всем мире. По данным Global Energy Statistical Yearbook 2019, темпы роста потребления энергии в Китае составляют 3,7%. Это означает, что в такой развивающейся стране, как Китай, потребность в энергии огромна и постоянно растет. Однако растущий спрос на потребление энергии может привести к ряду проблем, таких как нехватка энергии.

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

Цель

Цель нашего проекта — прогнозировать потребление на 24 часа вперед на основе:

· исторические 15-минутные данные об энергопотреблении одного здания (ID: 126)

· значения прогноза погоды (температуры) во время прогноза для нескольких мест рядом со зданием (всего 4 набора данных температуры)

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

Наш набор данных

Компания Schneider Electric предоставила наборы данных, использованные в этом проекте. Наши полные наборы данных состоят из записи энергии от 24/7/2014 12:30 до 26/5/2016 20:15 для одного здания (ID 126) и четырех записей температуры в разных местах рядом со зданием. Данные об энергии и температуре записываются каждые 15 минут. Переменная, которую мы хотим предсказать, — это потребление энергии на 24 часа вперед.

Причины использования этих наборов данных следующие:

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

2) Также необходимо использовать предыдущие записи энергии, чтобы прогнозировать потребление энергии на 24 часа вперед. Потребляемая мощность меняется время от времени в течение дня, поэтому нам нужны предыдущие записи, чтобы изучить характер изменения энергии с течением времени.

Методология предварительной обработки данных

Выбор данных

На изображении ниже видно, что Consumer-126, wx1–126, wx2–126 и wx3–126 имеют более 50 000 значений. Однако wx4–126 имеет только 2240 значений. Это показывает, что большинство значений в wx4–125 отсутствует. Трудно восполнить недостающие данные в этом наборе данных. Поэтому мы не собираемся использовать wx4–126 для прогнозирования энергопотребления.

Мы также обнаружили, что в «потреблении-126» значения до 7:00 24.11.2014 (красная линия) намного меньше, чем значения после него. Данные до 24.11.2014 настолько отличаются от других, что их нельзя использовать для прогнозирования будущего энергопотребления. Поэтому мы удаляем эти данные до 24 ноября 2014 г. из набора данных "consumer-126".

Постоянство

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

Что делать с отсутствующими данными

При проверке набора данных, загруженного с сервера, мы обнаруживаем, что в наборе данных есть некоторые исправления. Например, в наборе данных «потребление-126» данные не являются непрерывными, то есть примерно каждые 14 дней есть пробел в данных на 2 дня.

Кроме того, для набора данных, относящихся к прогнозу погоды, «wx1–126», «wx2–126» и «wx3–126», каждый прогноз дается в разном временном интервале и существуют некоторые пробелы в данных. Более того, чтобы получить прогноз потребления энергии с 15-минутным интервалом, мы должны использовать данные о погоде с 15-минутным интервалом, чтобы зафиксировать временной интервал. Учитывая периодичность в одну неделю, мы используем 7-дневную линейную интерполяцию, чтобы заполнить весь набор данных с выравниванием по 15 минутам. Мы считаем, что это приведет к более точному представлению прогноза энергопотребления по сравнению с использованием только набора данных с утечкой.

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

Чтобы уменьшить избыточность данных и улучшить целостность данных, мы решили выполнить нормализацию всего набора данных, который у нас есть. После заполнения недостающих данных для получения набора данных с 15-минутным интервалом мы вычисляем среднее значение и стандартное отклонение «потребление-126», «wx1–126», «wx2–126» и «wx3–126». Среднее значение и стандартное отклонение каждого набора данных используются для нормализации прежних данных. Формула, используемая для выполнения этой части, приведена ниже.

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

Начальная функция

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

· энергопотребление при Т + 96 (на этикетке, как на самом деле)

· энергопотребление при Т + 0 (y0, подготовка к использованию разностной сети для дальнейшей настройки)

Кроме того, для признаков, рассматриваемых от T-4 до T + 0, имеется в виду часовой интервал времени, который является периодичностью для всего прогноза данных. Таким образом, мы используем следующие 4 функции из набора данных о потреблении энергии при первоначальном выборе функций:

· максимальные значения каждого энергопотребления с периодов Т-4 до Т+0

· минимальные значения каждого энергопотребления от периодов Т-4 до Т+0

· средние значения каждого энергопотребления с периодов Т-4 до Т+0

· стандартное отклонение каждого энергопотребления от периодов Т-4 до Т+0

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

· Бланк прогноза погоды корп.-1 на Т+96

· Бланк прогноза погоды корп.-2 на Т+96

· Бланк прогноза погоды корп.-3 на Т+96

· день недели (чтобы содержать информацию о днях недели)

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

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

После того, как все данные полностью подготовлены, мы создали нашу первую наивную сеть, состоящую из сети, обучения, развертывания и решателя. Мы определили собственный персептрон и выбрали сатуратор relu, так как tanh был слишком медленным. Мы использовали 4 слоя, размер которых nn-size, nn-size/2, nn-size/4 и nn-size/8 (nn-size относится к размеру нейронной сети). Кроме того, мы использовали отсев, чтобы уменьшить переобучение, и установили вероятность отсева равной 0,3. Для функции обучения мы загружаем как обучающий, так и тестовый набор данных. В части решателя количество итераций было установлено равным 1000, затухание — 0,00001. Адам был выбран в качестве решателя, поскольку мы пробовали и знали, что он работает лучше.

В этой наивной сети мы масштабировали наши входные данные, чтобы уменьшить влияние ненужных входных данных, шума и выбросов. Наше масштабирование в основном состояло из двух частей: диаг, зажим. Входные данные умножались на коэффициент масштабирования, а затем сеть узнавала коэффициенты масштабирования. После масштабирования входных данных Tanh использовался для ограничения выходных данных, а выбросы можно было сопоставить с «+-1». Кроме того, чтобы уменьшить размеры входных данных на случай, если большой размер повлияет на обучение, мы добавили автоэнкодер, который содержит 3 слоя, и установили размер узкого места равным 2 и 4. Автоэнкодер был обучен с помощью RMSE, так что входной вектор X и вектор

было то же самое. Нашим слоям 1 и 3 также было задано одинаковое количество нейронов: input-size (который был определен в config.m). После масштабирования и уменьшения размеров мы используем «квадратный» персептрон для замены предыдущего персептрона, поскольку он может лучше обучаться. Это должно было добавить квадраты входов, как показано ниже:

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

Разработка нейронной сети

На первом этапе мы начинаем с простой трехслойной архитектуры нейронной сети без разностного ввода (т. е. наивной нейронной сети). На этом этапе разработки мы используем модель, созданную в предыдущем разделе, и функции, разработанные в наборе обработки данных, для обучения модели. Нейронная сеть инициализируется с тремя конфигурациями в первом слое с 8, 16 и 32 узлами отдельно, для последующих слоев узел каждого слоя будет уменьшаться вдвое. В этой модели мы устанавливаем вероятность отсева на 0,3 и размер узкого места на 4, мы используем Адама в качестве решателя и затухаем с 0,0001, запускаем максимальную итерацию 10000 для каждой конфигурации и повторяем процесс 3 раза при обучении модели.

После обучения мы можем получить график потерь.

Лучший набор конфигураций:

Потеря теста: 0,385553

Количество входов: 8

Итерации: 10000

Тип решателя: Адам

NN-размер: 16

Количество слоев: 3

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

На следующем этапе мы решим реализовать разностную сеть и более сложную архитектуру нейронной сети. Поскольку потери при тестировании слишком высоки в первом раунде разработки и не превзошли настойчивость, мы собираемся реализовать более глубокую нейронную сеть с большим количеством перцептронов. Мы изменили сеть на 4 слоя и инициализировали узлы первых слоев до 16, 32 и 64. Для каждого слоя размер слоя уменьшается на 1/2. В этом раунде мы сохраняем вероятность отсева, размер узкого места и максимальную итерацию без изменений и реализуем 5 повторений для каждой конфигурации. Для функции ввода мы добавляем несколько столбцов разностного ввода и начинаем обучение.

После обучения мы можем получить график потерь.

Лучший набор конфигураций:

Потеря теста: 0,35783

Количество входов: 42

Итерации: 10000

Тип решателя: Адам

NN-размер: 64

Количество слоев: 4

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

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

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

После обучения мы можем получить график потерь:

Лучший набор конфигураций:

Потеря теста: 0,348316

Количество входов: 42

Итерации: 10000

Тип решателя: Адам

NN-размер: 64

Количество слоев: 4

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

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

После обучения мы можем получить график потерь:

Лучший набор конфигураций:

Потеря теста: 0,301729

Количество входов: 27

Итерации: 10000

Тип решателя: Адам

NN-размер: 128

Количество слоев: 4

Мы видим, что потери при тестировании уменьшились до 0,3, что является огромным улучшением для нашей нейронной сети.

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

После четырех раундов разработки сети производительность нашей нейронной сети значительно улучшилась. Наилучшей конфигурацией нейронной сети будет 4-слойная сеть с размером первого слоя 128, для каждого слоя персептрон будет уменьшаться на 2/3. Установив вероятность отсева 0,2 и размер узкого места 4, мы можем получить низкие потери при тестировании 0,3 и низкую дисперсию между потерями при поездке и потерями при тестировании.

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

В заключение мы построили довольно успешную модель, потому что потеря нашей модели превосходит постоянство. Всего мы использовали 4 набора данных (т.е. потребление-126, wx1-126, wx2-126 и wx3-126). Мы не использовали wx4-126, потому что в нем слишком много пропущенных значений (более 80%). Часть предварительной обработки данных включает выбор данных, нормализацию данных и строгий выбор признаков. С помощью этих шагов, описанных выше, мы успешно превратили необработанные данные в четырех наборах данных в квалифицированные входные данные нашей модели. Мы построили сеть с четырьмя юристами и использовали такие концепции машинного обучения, как автоэнкодер и масштабирование, для оптимизации модели. С предпринятыми выше усилиями и несколькими тестами мы получили отличную модель с низкими потерями при тестировании и приемлемой задержкой для прогнозирования энергопотребления здания (ID: 126) за 24 часа.

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

Автор сценария: Хуайюань, Фаян, Юсяо, Цзэюй, Циньюй