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

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

Постановка задачи

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

Данные

Наборы дат можно скачать с Kaggle.

Существует 29 характеристик для описания энергопотребления бытовой техники:

1. дата: время год-месяц-день час: минута: секунда

2. Освещение: потребление энергии осветительными приборами в доме в Втч.

3. T1: Температура на кухне в градусах Цельсия.

4. T2: Температура в гостиной в градусах Цельсия.

5. T3: Температура в прачечной.

6. T4: Температура в офисном помещении по Цельсию.

7. T5: Температура в ванной комнате по Цельсию.

8. T6: Температура снаружи здания (северная сторона) в градусах Цельсия.

9. T7: Температура в гладильной по Цельсию.

10.T8: Температура в подростковой комнате 2, по Цельсию

11. T9: Температура в комнате родителей по Цельсию.

12. T_out: Температура на улице (от метеостанции Chievres) в градусах Цельсия.

13. Tdewpoint: (от метеостанции Chievres), ° C

14. RH_1: Влажность на кухне, в%

15. RH_2: Влажность в гостиной, в%.

16. RH_3: Влажность в помещении прачечной, в%

17. RH_4: Влажность в офисном помещении, в%

18. RH_5: Влажность в ванной, в%

19. RH_6: Влажность за пределами здания (северная сторона), в%.

20. RH_7: Влажность в гладильной, в%

21. RH_8: Влажность в подростковой комнате 2, в%

22. RH_9: Влажность в комнате родителей, в%

23. RH_out: Влажность на улице (от метеостанции Chievres), в%.

24. Давление: (по данным метеостанции Chievres), в мм рт. Ст.

25. Скорость ветра: (от метеостанции Chievres), м / с.

26. Видимость: (от метеостанции Chievres), в км.

27. Rv1: Случайная величина 1, безразмерная.

28. Rv2: Случайная величина 2, безразмерная

29. Бытовые приборы: общая энергия, потребляемая бытовыми приборами, в Вт-ч.

Исследование потребления бытовой техники

import numpy as np # linear algebra
import pandas as pd # data processing
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
import seaborn as sns
from sklearn import preprocessing, model_selection, metrics
data = pd.read_csv("../input/KAG_energydata_complete.csv")
data.head()

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

Независимые переменные: 28 (11 температур, 10 влажности, 1 давление, 2 случайных значения)

Зависимая переменная: 1 (Приборы)

Основные наблюдения:

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

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

3. Количество независимых переменных на этом этапе - 26.

4. Количество зависимых переменных на данном этапе - 1

5. Общее количество рядов - 19735

6. Набор данных будет разделен на 75–25% между обучением и тестированием.

7. Общее количество строк в обучающей выборке - 14801.

8. Общее количество строк в тестовой выборке - 4934.

9. Все характеристики имеют числовые значения. Нет никаких категориальных или порядковых признаков.

10.Количество пропущенных значений и нулевых значений = 0

Описательная статистика:

Столбцы температуры

Столбцы влажности

Столбцы погоды

Столбец устройства (зависимая переменная)

Диапазон возможностей

1. Температура: от -6 до 30 градусов

2. Влажность: от 1 до 100%

3. Скорость ветра: от 0 до 14 м / с

4. Видимость: от 1 до 66 км.

5. Давление: от 729 до 772 мм рт.

6. Энергопотребление устройства: от 10 до 1080 Втч.

Визуализация данных

Независимое распределение переменных

RH_6, RH_out, видимость, неравномерное распределение скорости ветра

Распределение зависимых переменных

Наблюдения на основе графика распределения

1. Все значения влажности, кроме RH_6 и RH_out, соответствуют нормальному распределению, то есть все показания датчиков внутри дома относятся к нормальному распределению.

2. Точно так же все показания температуры соответствуют нормальному распределению, за исключением T9.

3. Из оставшихся столбцов мы видим, что видимость, скорость ветра и приборы искажены.

4. Случайные переменные rv1 и rv2 имеют более или менее одинаковые значения для всех записей.

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

6. Ни один столбец не имеет такого распределения, как целевая переменная Appliances.

Следовательно, нет независимого от признаков объекта с линейной связью с целью.

График родства

Наблюдения, основанные на графике корреляции

1. Температура - все температурные переменные из T1-T9 и T_out имеют положительную корреляцию с целевыми приборами. Для температур в помещении корреляции высоки, как и ожидалось, поскольку вентиляция управляется блоком HRV и сводит к минимуму разницу температур воздуха между помещениями. Четыре столбца имеют высокую степень корреляции с T9 - T3, T5, T7, T8, а также T6 и T_Out имеют высокую корреляцию (обе температуры снаружи). Следовательно, T6 и T9 могут быть удалены из обучающего набора, поскольку информация, предоставленная ими, может быть предоставлена ​​другими полями.

2. Атрибуты погоды - Visibility, Tdewpoint, Press_mm_hg имеют низкие значения корреляции.

3. Влажность - для датчиков влажности не существует значительно высоких значений корреляции (›0,9).

4. Случайные переменные не играют никакой роли

5. Случайные переменные rv1, rv2 и Visibility, Tdewpoint, Press_mm_hg имеют низкую корреляцию с целевой переменной.

Из-за сделанных выше выводов я отказался от rv1, rv2, Visibility, T6, T9.

Количество входных переменных - 21 (уменьшено с 26)

Методы моделирования и тесты

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

1. Линейные модели:

Линейная регрессия

В линейной регрессии мы хотим уместить функцию в этом

Форма Ŷ = β0 + β1X1 + β2X2 + β3X3, где X - вектор признаков, а β0, β1,

β2, β3 - коэффициенты, которые мы хотим узнать. Он обновляет β на каждом этапе,

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

Риджевая регрессия

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

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

Регрессия лассо

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

2.Поддержка векторной машины

Поддержка векторной регрессии

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

3. ближайший сосед Регрессор

KNeighborsRegressor

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

4. регрессионные модели на основе дерева

Мы разделяем пространство предикторов, то есть множество возможных значений для X1,. . . , Xp - на J различных и неперекрывающихся областей, R1,. . . , RJ. Для каждого наблюдения, попадающего в область Rj, мы делаем один и тот же прогноз, который является просто средним значением отклика для обучающих наблюдений в Rj.

Наша цель - найти ящики R1,. . . , RJ, которые минимизируют RSS, заданный

RSS = X J j = 1 X i∈Rj (yi - yˆRj) 2,

где yˆRj - средний отклик для обучающих наблюдений в j-м квадрате. Модели на основе деревьев менее подвержены выбросам по сравнению с линейными моделями. Учитывая, что между входными данными и целевой переменной нет линейной связи, вполне вероятно, что деревья будут работать лучше, чем линейные модели.

Методы ансамбля

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

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

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

Случайные леса

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

Машины для повышения градиента

Повышение градиента - это расширение метода повышения. Он использует алгоритм градиентного спуска, который может оптимизировать любую дифференцируемую функцию потерь. Ансамбль деревьев строится одно за другим, а отдельные деревья последовательно суммируются. Следующее дерево пытается восстановить потерю. Повышение градиента = спуск градиента + усиление.

Чрезвычайно рандомизированные деревья

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

5. нейронные сети

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

Контрольный показатель

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

1. Оценка R2 по данным обучения: 57%.

2. Оценка R2 по тестовым данным: 97%.

3. RMSE по обучающим данным = 17,56.

4. RMSE по тестовым данным = 66,65.

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

Масштабирование данных

Набор функций содержит данные в различных диапазонах. Температура (от -6 до 30), влажность (1–100), скорость ветра (от 0 до 14), видимость (от 1 до 66), давление (729–772) и потребление энергии приложением (10–1080). Из-за различного диапазона функций возможно, что некоторые функции будут доминировать в алгоритме регрессии. Чтобы избежать этой ситуации, необходимо масштабировать все функции. Таким образом, данные были масштабированы до 0 среднего и единичной дисперсии с использованием класса StandardScaler в модуле sklearn.preprocessing.

Выполнение

Нижеупомянутые библиотеки scikit-learn и xgboost были использованы для тестирования каждой регрессионной модели:

  1. sklearn.linear_model.Ridge
  2. sklearn.linear_model.Lasso
  3. sklearn.ensemble.RandomForestRegressor
  4. sklearn.ensemble.GradientBoostingRegressor
  5. sklearn.ensemble.ExtraTreesRegressor
  6. импортировать xgboost
  7. sklearn_neighbors
  8. sklearn.svm.SVRPipeline
  9. sklearn.neural_network. MLPRegressor

Трубопровод :

1. Сохраните все алгоритмы в списке и просматривайте список.

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

3. Регрессор был настроен так, чтобы соответствовать данным тестирования и обучения.

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

5. Словарь был добавлен в глобальный список всех словарей, который преобразован в фрейм данных.

Результат:

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

Выбор функций для улучшения

Extra Trees Regressor показал наилучшие результаты с параметрами по умолчанию. Я использовал перекрестную проверку поиска по сетке с помощью функции GridSearchCV библиотеки sklearn.model_selection. Настроенные параметры:

1. n_estimators: количество используемых деревьев.

2. max_features: количество функций, учитываемых при каждом разбиении.

3. max_depth: максимальная глубина дерева. Если параметр не указан, разделение будет продолжаться до тех пор, пока все листья не станут чистыми или не будут содержать меньше указанного min_samples_split.

Показатель R2 улучшился на 10% (от 0,57 до 0,63) после параметров использования, предложенных GridSearchCV.

Проблемы и знания, полученные в ходе проекта

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

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

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

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

5. Процесс добавления алгоритмов должен быть простым в управлении.

6. Seaborn и pyplot - хорошие библиотеки для построения различных свойств фрейма данных.

7. Для выполнения исчерпывающего поиска или случайного поиска в пространстве гиперпараметров для настройки модели всегда распараллеливайте процесс, так как существует множество моделей с различными конфигурациями, которые необходимо подогнать. (Задайте для параметра n_jobs значение -1, чтобы задействовать все процессоры)

8. Один из эффективных способов проверить надежность модели - подогнать ее к сокращенному пространству признаков в случае данных большой размерности. Выберите первые «k» (обычно ›= 3) ключевых функций для этой задачи.

Результаты

Оценка модели и оценка

Особенности ненастроенной модели:

1. n_estimators: 10

2. max_features: авто

3. max_depth: Нет

Особенности лучшей модели после настройки гиперпараметров:

1. n_estimators: 200

2. max_features: «sqrt»

3. max_depth: 80

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

Проверка устойчивости:

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

· Оценка R2 на тестовой модели данных с сокращенными функциями = 0,47.

· Оценка R2 по тестовым данным для ненастроенной модели = 0,57.

· Разница = 0,10

· Оценка RMSE на тестовой модели данных с ограниченными функциями = 0,72

· Оценка RMSE по тестовым данным для ненастроенной модели = 0,65

· Разница = 0,07

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

Сравнение результатов

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

Оценка обучения R2 - 1.0

Оценка R2 при тестировании - 0,63

RMSE по тестовым данным - 0,60

Контрольная модель

Оценка тренировочного R2 - 0,97

Тестирование R2 - 0,57.

RMSE по тестовым данным - 0,66

Показатель R2 для набора для тестирования улучшился на 10,53%, с большим количеством данных и функций это можно улучшить в дальнейшем.

Выводы

Согласно наиболее подходящей модели, 5 самых и наименее важных характеристик

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

Размышления

Этот проект можно резюмировать как

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

2. Выбор между задачами классификации и регрессии.

3. Визуализировал данные, провел предварительную обработку, изучая результаты других регрессионных конкурсов из Kaggle.

4. Предварительная обработка данных и выбор функций. Ищите корреляцию между функциями.

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

6. Использование GridSearchCV вместо RandomizedSearchCV для создания тестовой модели.

7. Применение выбранных алгоритмов и визуализация результатов.

8. Настройка гиперпараметров для получения лучшего алгоритма и отчет о результатах тестирования лучшей модели.

9. Обсудите важность выбранных функций и проверьте надежность модели.

10. Сравнение моей настроенной модели с результатами тестов автора.

Улучшения

1. Выполняйте агрессивную разработку функций

2. Найдите сценарий классификации в наборе данных и исследуйте проблемы.

3. Изменение параметров области параметров Grid Search.

а. Добавьте дополнительные параметры, такие как min_samples_split, min_inpurity_decrease и т. Д.

б. max_depth может иметь больше значений

Использованная литература:

Связанные академические исследования и более ранние работы:

Http://dx.doi.org/10.1016/j.enbuild.2017.01.083



Если у вас есть какие-либо вопросы, дайте мне знать, буду рад помочь. Подпишитесь на меня в Medium или LinkedIn, если хотите получать обновления моих сообщений в блоге!