Все проекты
MetroPT — предиктивное обслуживание
Завершён
research

MetroPT — предиктивное обслуживание

Раннее детектирование утечек воздуха в компрессоре поезда метро за 30 минут до отказа — 1,5 млн показаний сенсоров, 16 моделей в сравнении, оптимизированный GradientBoosting с ROC-AUC 0,993

В цифрах

0

ROC-AUC (тест)

0

PR-AUC (тест)

0M

Показаний сенсоров

0 min

Горизонт упреждения

Проблема

Что я решала

Позитивных окон около 2%, а соседние окна автокоррелированы — при случайном разбиении будущее протекает в обучение, и любая цифра accuracy теряет смысл. Сверху на пороге 0,5 самые сильные модели выглядят бесполезными: у RandomForest F1 = 0,000, у GradientBoosting F1 = 0,231 — обычно после такого модель выбрасывают.
Мой подход

Как я делала

Временное разбиение (train до 1 июня 2020, test с этой даты), TimeSeriesSplit на три фолда внутри обучения и PR-AUC как основная метрика, потому что ROC-AUC льстит несбалансированным данным. Шестнадцать моделей по одинаковому протоколу, затем RandomizedSearch и явный подбор порога у победителя — порог здесь гиперпараметр, а не значение по умолчанию. SHAP на финальной модели, чтобы проверить логику, а не поверить в цифру.

Выбор технологий

  • Time-based split + TimeSeriesSplitОкна перекрываются, соседние строки почти одинаковые. Перемешанный сплит положил бы один и тот же отказ по обе стороны границы и вернул красивую фальшивую цифру.
  • Threshold tuning as a step, not a defaultНа 0,5 лучшая модель давала F1 0,231 и выглядела провалом. Подбор порога на валидации превратил ту же модель в F1 0,878 — на несбалансированных данных отсечка весит не меньше алгоритма.
  • PR-AUC as the primary metricПри ~2% позитивов ROC-AUC остаётся высоким даже у модели, которая пропускает большинство отказов. Двигается именно PR-AUC, когда recall по редкому классу действительно плохой.
  • SHAP over correlationКорреляционная матрица и модель разошлись в том, какой сенсор важен. SHAP объясняет ту модель, которая реально поедет в работу, поэтому спор выигрывает он.
Результат

Что получилось

Оптимизированный GradientBoosting с подобранным порогом даёт на отложенном тестовом периоде ROC-AUC 0,993, PR-AUC 0,889 и F1 0,878 (precision 0,873 / recall 0,882) — против F1 0,231 у того же алгоритма на пороге по умолчанию. Самое интересное не в цифре: SHAP поставил на первое место Oil_temperature_min со средним |SHAP| 0,361, тогда как линейная корреляция указывала на DV_pressure_mean. Корреляция Пирсона не учитывает взаимодействия признаков, а SHAP учитывает — поэтому признак, который нравился корреляционной матрице, оказался не тем, на который опиралась модель.