Завершён
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 учитывает — поэтому признак, который нравился корреляционной матрице, оказался не тем, на который опиралась модель.