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

Рис. 1: Принцип работы детектора трендов — в красном окне обнаружен тренд
Рис. 1: Принцип работы детектора трендов — в красном окне обнаружен тренд

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

Однако в промышленности важен не только сам факт обнаружения предотказного состояния, но и надёжность этого расчёта. На крупных предприятиях количество сенсоров может исчисляться десятками тысяч. Если детектор трендов будет часто срабатывать, это может привести к лавинообразному росту количества зарегистрированных событий с сообщением “обнаружен тренд”. Представьте инженера, который ежедневно получает сотни или тысячи уведомлений о потенциа��ьных проблемах (среди которых есть некоторое количество верно обнаруженных трендов, но большая часть представляет собой ложные сработки — так называемые false positives). Очевидно, что обработать такой поток информации физически невозможно. Система, которая перегружает оператора шумом, быстро теряет доверие и перестаёт использоваться. Даже несмотря на то, что в этом шуме могут быть действительно важные предупреждения.

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

Линейная регрессия и анализ тренда

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

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

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

Рис. 2: Анализ тренда по всего лишь двум точкам может быть ненадёжным
Рис. 2: Анализ тренда по всего лишь двум точкам может быть ненадёжным

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

Рис. 3: Тренд пока что является незначительным по отношению к уставке
Рис. 3: Тренд пока что является незначительным по отношению к уставке

Здесь также полезно заметить, что крайне маловероятно получить строго нулевой наклон прямой, проведённой по данным. Почти наверняка хотя бы небольшой наклон вверх или вниз присутствовать всё же будет. Однако значимость наклона может быть разной в зависимости от уставки. Ведь если на картинке выше красная линия была бы на уровне y = 3, то уже можно было бы утверждать о наличии тренда. А вот при уставке на уровне y = 5.5 тренд незначителен, хотя данные те же самые. Поэтому мы анализируем тренд в паре «данные — уставка». Т.е. в рамках нашего инструмента не имеет смысла говорить просто о тренде в данных. Имеет смысл говорить о тренде в паре «данные — уставка».

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

Рис. 4: Пример тренда, о котором нужно предупреждать — точек достаточно, а достижение уставки произойдёт скоро (наклон значителен относительно уставки)
Рис. 4: Пример тренда, о котором нужно предупреждать — точек достаточно, а достижение уставки произойдёт скоро (наклон значителен относительно уставки)

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

Решение: статистическая и практическая значимости

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

Рис. 5: Общая схема проверки наличия тренда в данных
Рис. 5: Общая схема проверки наличия тренда в данных

1. Статистический модуль

Здесь центральным элементом является тест Манн-Кендалла. Данный тест проверяет, есть ли тренд в данных и обладает ли он статистической значимостью. И если тренд статистически не подтверждается — сигнал не передаётся дальше.

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

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

2. Практический модуль

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

После построения модели система решает несложное уравнение: находит момент времени, когда построенная кривая пересечёт заранее установленный порог (уставку). Вот по этой дате мы и определяем, значим ли наш тренд с практической точки зрения. Если эта дата находится далеко в будущем (например, если ширина окна, в котором ищем тренд, равна 3 дням, а пересечение уставки ожидается через 5 месяцев), то это признаётся чересчур далёким событием, и система не выдаёт предупреждение о тренде. А вот в противном случае можно продолжить анализ, чтобы попытаться свести к минимуму число ложных срабатываний.

Что же ещё можно сделать? Подбор гиперпараметров с целью минимизации числа ложных срабатываний — не совсем наш случай. Во-первых, из гиперпараметров сейчас имеются только ширина окна, форма кривой и уровень значимости, который в статистике обычно по умолчанию равен 0.05 (более того, мы специально стремились к минимизации числа параметров, чтобы использование инструмента было максимально простым). А во-вторых, с точки зрения ложных сработок лучше всего вообще никогда не показывать наличие тренда. Вместо этого было решено добавить дополнительные проверки:

  1. Строим две вспомогательные кривые, в результате чего получается как бы «доверительный коридор для будущих данных» (в который должно попасть 95% имеющихся точек), и проверяем, пересекут ли уставку в ближайшем будущем обе стенки получившегося коридора

  2. Исследуем, насколько хорошо построенный тренд ложится на данные (в том числе с помощью коэффициента детерминации и критерия Шапиро‑Уилка)

  3. Смотрим, нет ли противоречия между статистическим трендом и практическим и так далее

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

Пример работы на реальном оборудовании

Рассмотрим пример срабатывания детектора трендов на реальных производственных данных, полученных с шаровой мельницы мокрого помола, применяемой в горнодобывающей отрасли. В качестве входного сигнала использовалась температура обмотки главного привода электродвигателя (таких датчиков несколько, но они сильно коррелируют друг с другом, поэтому мы взяли один случайный). Дискретизация данных — 1 измерение в 10 минут. Значение верхней уставки — 95 градусов.

На рисунке ниже показан фрагмент временного ряда за одни сутки. Давайте представим, что ширина скользящего окна составляет 12 часов (т.е. детектор ищет тренд в окнах шириной 12 часов), а сейчас на часах 19:00. На анализ детектору трендов подаётся интервал 07:00 - 19:00. В течение этого периода времени наблюдается устойчивый рост температуры, но уставка ещё не достигнута. Такая динамика может указывать, например, на неисправности в системе питания или какие-либо механические проблемы.

Использовались следующие настройки:

  1. Ширина окна: 12 часов

  2. Форма тренда: линейная

  3. Уровень значимости: 0.05 (стандартное значение в статистике)

В результате анализируемое временное окно 07:00 - 19:00 было признано окном с возрастающим трендом, для которого генерируется событие «обнаружен тренд» (с выдачей соответствующего предупреждения по��ьзователю). Также вычисляются предсказательный коридор (синяя пунктирная линия) и прогнозируемый интервал пересечения уставки (19:34 - 00:24). В действительности пересечение уставки произошло в 22:25, что попадает в предсказанный нами интервал.

Рис. 6: Обнаруженный нагрев обмотки электродвигателя
Рис. 6: Обнаруженный нагрев обмотки электродвигателя

Таким образом, при ширине скользящего окна в 12 часов (красная область на рисунке выше) инструмент позволил обнаружить проблемное состояние примерно за 3.5 часа до выхода параметра за уставку, что даёт дополнительное время на соответствующее реагирование и принятие решения о техническом обслуживании.

Итог

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