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

В начале года нам поставили задачу предсказывать отказы оборудования с горизонтом 7, а лучше 14, дней до момента отказа. Мы были весьма оптимистичны и думали, что сейчас быстро сделаем что-нибудь блистательное и полезное.

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

Нам выдали данные за 2019 год (и это была первая ошибка, которая очень замедлила исследования). Мы почистили данные, определили ключевые параметры. Построили несколько тестовых моделей используя Random Forest и XGBoost. Результат нас очень порадовал: первые модели показывали точность при обучении 76-86%. Мы уже собирались открывать шампанское, но тут нас настигла суровая реальность: на неизвестных ранее данных результаты модели оставляли желать лучшего. 

После непродолжительных обсуждений, мы пришли к выводу, что задействовали слишком мало данных для обучения. Получили данные за 2020 год. Следующим этапом мы стали обучать на 2019, а тестировать модель на 2020 годе. Результат печален: прогнозировали всего лишь 30% отказов, и только в последние сутки.

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

  1. Прогнозировать более 50% отказов, и чем больше, тем лучше. Простой оборудования из-за отказов очень дорого обходится заказчику.

  2. И самое главное: увеличить горизонт предсказания отказов, так как за сутки многие профилактические мероприятия провести нельзя.

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

А дальше были месяцы экспериментов с параметрами и тонкой настройкой. Мы конструировали агрегированные параметры, добавляли типы оборудования, создавали новую разметку событий, выкидывали и добавляли данные при обучении модели, добавили нейросеть на базе Keras. И увы мы должны признать, что точность на реальных данных стала снижаться, и приближаться к человеку мы стали прогнозировать 5-20% отказов.

Сейчас я вижу в этом несколько проблем:

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

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

  • Мы зря пытались выжать из XGBoost больше, чем он мог нам дать.

Этап принятия и старт с чистого листа

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

Мы проанализировали все, что было сделано и заметили, что в какой-то момент  стали агрегировать отрезки времени по 3-8-12 часов и делать по ним прогнозы. Это давало неплохие результаты для последних суток, но при расширении горизонта точность сильно падала. Поэтому было мы решили двигаться сразу в двух направлениях:

  1. XGBoost - регрессия.

  2. TimeSeriesForestClassifier - с кластеризацией отрезков времени.

XGBoost Regression

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

На графике представлен тренд отказа, чем ниже тем ближе событие отказа.

TimeSeriesForestClassifier

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

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

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

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

Как следствие, первые сборки и тест показывали, что мы начали прогнозировать почти 70% отказов в последние сутки и примерно 30% за пять суток.

Красная точка это непосредственный отказ. Черные квадраты это простои оборудования не приведшие к отказу.

Что сейчас?

Мы несколько улучшили качество прогноза, подняли его до 78% реальных отказов в последние сутки. Идут эксперименты по конструированию агрегированных параметров, которые в теории должны работать, но на практике часто ухудшают результаты. И самое главное: идет работа по сглаживанию пиков и ложно-положительных срабатываний. Очень надеюсь, что мы в ближайшее время сможем довести количество предсказанных случаев до 85%.

Если бы выбрали этот путь изначально, пришли бы мы к результату быстрее? Скорее всего, да. Мы бы собрали на 100 моделей меньше. Но самым важным оказалось, не количество и различные типы моделей, а чистота данных и понимание процессов, которые пришли, только в результате экспериментов с XGBoost.