Хитрости Data Science. Простой метод выявления аномалий

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

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

Требования к системе

В данной статье мы рассмотрим показатель с достаточно предсказуемыми значениями. Обратите внимание на то, что предсказуемость – это не то же самое, что постоянство (прямая горизонтальная линия). Значение показателя не обязательно является константой. В общем случае, система должна эффективно работать с показателями, которым свойственны следующие особенности:

  • Суточный цикл. Показатель имеет большие значения в рабочие часы, и существенно меньшие значения в нерабочее время.

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

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

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

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

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

Решение

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

Основой нашего решения являются три компонента: экспоненциальное скользящее среднее (ЭСС, exponential moving average, EMA), экспоненциальное скользящее среднеквадратическое отклонение (ЭССКО, exponential moving standard deviation, EMS) и применение множества простых моделей вместо одной модели, пытающейся охватить все многообразие.

Экспоненциальное скользящее среднее

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

EMA <- w * EMA + (1 — w) * x,

где x – измеренное текущее значение показателя, а w – малая величина (порядка 0,05), контролирующая влияние текущего значения на ЭСС. ЭСС позволяет нам получить ожидаемое значение показателя в любой данный момент времени и обновляется при каждом новом измерении. Хорошим свойством ЭСС является автоматическая адаптация к новым условиям.

Экспоненциальное скользящее среднеквадратическое отклонение

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

EMS <- sqrt( w * EMS^2 + (1 — w) * (x — EMA)^2 ).

ЭССКО, так же, как и ЭСС, будет автоматически адаптироваться к любым новым условиям. Параметр w контролирует влияние новых значений показателя на ЭССКО.

С помощью двух рассмотренных выше величин (ЭСС и ЭССКО) мы можем создать простую модель логики оповещения:

Alarm = abs(x — EMA) > n * EMS,

где параметр n определяет чувствительность системы оповещения к значению показателя x. Если модуль разности x и ЭСС больше, чем n среднеквадратических отклонений, будет сгенерировано оповещение. Малое значение n (например, 1 или 2) может привести к большому количеству ложноположительных реакций (оповещение генерируется, хотя для этого нет оснований). Большое значение n может привести к большому количеству ложноотрицательных реакций (оповещение не генерируется, хотя для этого есть основания).

Множество моделей

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

Например, у нас будут одни значения ЭСС и ЭССКО для 9 часов утра понедельника и другие значения ЭСС и ЭССКО для 10 часов утра понедельника. Таким образом мы получим 24x7 моделей, каждая из которых имеет свои значения ЭСС и ЭССКО. Если поведение показателя соответствует ожидаемому, тогда значения ЭСС и ЭССКО каждой модели будут достаточно стабильны во времени! В зависимости от задачи и требуемого временного разрешения, мы можем создать большее или меньшее количество моделей. Например, мы можем создать различные модели для каждого 5-минутного интервала в недельном цикле.

Настройка и детали реализации

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

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

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

По материалам: Medium

Перевод Станислава Петренко 

Добавить комментарий

Ваш e-mail не будет опубликован.

закрыть

Поделиться

Отправить на почту
закрыть

Вход

закрыть

Регистрация

+ =