Использование Python, Pandas, Sklearn, случайного леса и алгоритмов повышения градиента

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

Введение

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

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

Цели

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

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

Лучшие модели будут запущены в серийное производство. для получения полного исходного кода этого проекта нажмите на эту ссылку

Оглавление

  1. Объяснительный анализ данных (EDA)
  2. Предварительная обработка данных
  3. Модели поездов
  4. Настройка гиперпараметров модели
  5. Создание прогнозов и производство окончательной модели
  6. Выводы

E D A

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

Затем мы читаем в наших обучающих данных, которые имеют 40 функций (столбцы) и 40 000 наблюдений (строки).

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

Теперь мы проводим наше исследование, рассматривая распределение целевой метки и признаков предиктора;

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

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

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

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

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

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

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

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

Обучение моделей

В этой задаче мы используем 2 модели классификации;

  1. Ансамбль случайного леса
  2. Повышение градиента

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

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

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

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

Настройка гиперпараметров модели

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

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

мы можем наблюдать из сравнительной таблицы выше производительность двух используемых классификаторов, и мы можем ясно видеть, что классификатор случайного леса работал лучше, чем два других, с улучшенным показателем F1 0,92 и показателем точности модели 0,99, это означает, что мы можем доверять способности моделей давать точные прогнозы нашей целевой метки. Чем Gradient Boost, который имеет оценку F1 0,70.

  • ** примечание ** мы видим улучшенный показатель отзыва по сравнению с производительностью моделей в наборе данных с избыточной выборкой, а также улучшенный минимум по сравнению со стоимостью модели (0,82), который превышает пороговое значение 0,78.
  • Таким образом, модель случайного леса является нашей моделью выбора, чтобы давать точные и точные прогнозы в этой проблеме классификации.

Производство окончательной модели

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

Выводы

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

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

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