Обзор обнаружения аномалий, обзор многомерного распределения Гаусса и реализация базового алгоритма обнаружения аномалий в Python с двумя примерами

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

Эта статья познакомит вас с основами обнаружения аномалий и реализацией статистической модели обнаружения аномалий.

Что такое обнаружение аномалий?

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

Обычно встречаются три типа аномалий. Первый тип включает отдельные экземпляры, которые считаются аномальными по отношению ко всему набору данных (например, отдельный автомобиль, движущийся на очень низкой скорости по шоссе, является аномальным по сравнению со всем движением по шоссе). Второй тип включает случаи, которые являются аномалиями в определенном контексте (например, транзакции по кредитным картам, которые кажутся нормальными по сравнению со всеми транзакциями по кредитным картам, но являются аномальными для модели расходов конкретного человека). Третий тип аномалий — коллективный — набор экземпляров может считаться аномальным, даже если каждый экземпляр сам по себе соответствует определенному ожиданию (например, одна мошенническая транзакция по кредитной карте на Amazon может показаться не необычной, а набор транзакций, которые требуют поставить спиной к спине в течение короткого промежутка времени подозрительно) [1].

Методы обнаружения аномалий делятся на три категории:

  1. Контролируемое обнаружение требует наличия положительных и аномальных меток в наборе данных. Алгоритмы контролируемого обучения, такие как нейронные сети или усиленные леса, могут применяться для классификации точек данных по ожидаемым классам/классам аномалий. К сожалению, наборы данных об аномалиях, как правило, очень несбалансированы и, как правило, не имеют достаточного количества обучающих выборок, чтобы можно было использовать методы повышения или понижения дискретизации, чтобы помочь обучению с учителем.
  2. Полуконтролируемое обнаружение работает с частично помеченными данными. Методы с полуконтролем предполагают, что входные данные содержат только положительные экземпляры и что входные данные соответствуют ожидаемому шаблону. Эти методы пытаются изучить распределение положительных случаев, чтобы иметь возможность генерировать положительные случаи. Во время тестирования алгоритм оценивает вероятность того, что аномальный экземпляр мог быть сгенерирован моделью, и использует эту вероятность для прогнозирования аномальных случаев. [2]
  3. Неконтролируемое обнаружение использует полностью немаркированные данные, чтобы создать границу ожидания, и все, что выходит за пределы этой границы, считается аномальным.

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

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

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

Распределение Гаусса для обнаружения аномалий

Один из основных методов обнаружения аномалий использует мощность распределения Гаусса (т.е. нормального) для выявления выбросов.

Открытое Карлом Фридрихом Гауссом распределение Гаусса моделирует многие природные явления и поэтому является популярным выбором для моделирования функций в наборе данных. Функция плотности вероятности этого распределения представляет собой колоколообразную кривую с центром в среднем арифметическом, а ширина кривой определяется дисперсией набора данных. Поскольку большинство наблюдений находится в центре или рядом с ним, функция плотности вероятности имеет два удлиненных хвоста на каждом конце. Чем реже экземпляр — чем дальше он от центра — тем больше вероятность того, что он будет выбросом или аномалией. Эврика! — мы можем использовать эту концепцию для моделирования аномалий в нашем наборе данных.

Функция плотности вероятности, определяемая как f(x), измеряет вероятность некоторого результата x в нашем наборе данных. Формально,

Предположим, что в нашем наборе данных была только одна функция, и эта функция следовала нормальному распределению, тогда мы можем смоделировать наш алгоритм обнаружения аномалий, используя f (x) из приведенного выше. Затем мы можем установить некоторый пороговый эпсилон, который будет определять, является ли случай аномальным или нет. Эпсилон следует устанавливать эвристически, и его значение будет зависеть от варианта использования и предпочтительной чувствительности к аномалиям.

При нормальном распределении 2,5% случаев имеют два стандартных отклонения ниже среднего значения. Таким образом, если мы установим пороговое значение 0,054, то около 2,5% событий в нашем наборе данных будут классифицированы как аномалии (CDF на 2 стандартных отклонения ниже среднего составляет 2,5, а PDF при -2 составляет 0,054). Более низкие пороги дадут меньше классифицированных аномалий, а более высокие пороги будут менее чувствительными.

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

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

Для случая с двумя некоррелированными признаками это становится

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

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

Здесь x — входной вектор, μ — вектор средних признаков, а Σ — ковариационная матрица между признаками.

Чтобы упростить нашу жизнь, мы можем использовать библиотеку scipy для реализации этой функции: scipy.stats.multivariate_normal принимает в качестве входных данных вектор средних признаков и стандартных отклонений и имеет метод .pdf для возврата плотности вероятности с учетом набора точек.

Давайте попробуем эту реализацию на реальном примере.

Реализация двухфункциональной модели в Python

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

На следующей диаграмме рассеяния показан результат: функция x1 отложена по оси x, функция x2 отложена по оси y, аномалии аннотированы, а цвет представляет вероятность из многомерной функции плотности вероятности.

Как только мы установим порог достаточно низким, мы сможем отличить аномалии от ожидаемых значений. На двух диаграммах ниже сравниваются значения эпсилон между 1x10^-7 и 1x10^-9. Значение эпсилон 1x10^-9 имеет тенденцию лучше фиксировать предполагаемые выбросы, в то время как 1x10^-7 идентифицирует некоторые положительные образцы как выбросы.

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

Реализация многомерной модели с помощью Python

Для этого примера я буду использовать винный набор данных из библиотеки ODDS [3]. Этот набор данных содержит 13 числовых признаков и 129 экземпляров. Функции собирают информацию о вине, а исходный набор данных использовался для задач классификации на основе анализа вина. В целях обнаружения аномалий один из целевых классов был подвергнут субдискретизации и представлен как выброс. Всего среди 129 экземпляров 10 аномалий (~8%). Мы работаем с довольно чистым набором данных без пропущенных значений.

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

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

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

По мере увеличения эпсилон увеличивается отзыв. Точность для предложенных значений эпсилон довольно низкая, но имеет тенденцию достигать максимума около 0,0035 и 0,0065. AUC пытается найти баланс между точностью и полнотой и имеет пик около 0,0065. Давайте посмотрим на матрицу путаницы.

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

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

Потенциальные недостатки обнаружения гауссовских аномалий

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

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

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

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

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

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

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

Источники:

  1. https://www.kaggle.com/code/matheusfacure/semi-supervised-anomaly-detection-survey
  2. https://ai.googleblog.com/2023/02/unsupervised-and-semi-supervised.html
  3. Сакет Сатхе и Чару С. Аггарвал. LODES: локальная плотность соответствует обнаружению спектральных выбросов. Конференция SIAM по интеллектуальному анализу данных, 2016 г.
  4. Накао, Т., Ханаока, С., Номура, Ю. et al. Неконтролируемое обнаружение глубоких аномалий на рентгенограммах грудной клетки. J Digit Imaging 34, 418–427 (2021). https://doi.org/10.1007/s10278-020-00413-2
  5. https://github.com/viyaleta/Anomaly-Detection/blob/main/Examples/1%20Anomaly%20Detection%20with%20Guassian%20Distribution.ipynb

Математическая верстка предоставлена ​​онлайн-редактором Codecogs LaTeX.

Jupyter Notebook с примерами можно найти здесь.