Обнаружение аномалий: какой алгоритм использовать?

10

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

Что я сделал до сих пор:

Для количественной оценки правдоподобия до сих пор я пытался нормализовать данные, а затем вычислить значение правдоподобия для точки p на основе ее расстояния до известных точек данных в наборе D (= обучающий набор):

правдоподобие(п)знак равноΣQDгаусс(расстояние(п,Q))

С помощью этого количественного определения я могу затем выбрать порог, который отделяет правдоподобные данные от неправдоподобных данных. Я использую python / numpy.

Мои проблемы:

  1. Этот алгоритм не может обнаружить независимые измерения. В идеале, я мог бы поместить в алгоритм все, что я знаю о записи, и позволить ему самому обнаружить, что измерение X не влияет на достоверность записи.
  2. Алгоритм на самом деле не работает для дискретных значений, таких как логические значения или выбор входных данных. Они могут быть отображены на непрерывные значения, но нелогично, что Выбор 1 ближе к Выбору 2, чем к Выбору 3.

Вопрос:

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

Любой совет высоко ценится.

[Изменить] Пример:

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

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

Georg
источник
Пожалуйста, смотрите мой ответ на stats.stackexchange.com/questions/97946/changepoints-in-r, поскольку он рассматривает этот неприятный (для некоторых!) Вопрос.
IrishStat
Будет ли stats.stackexchange.com/questions/213 тем, что вы ищете?
whuber
Я сомневаюсь, что вы можете сделать эту работу для логических.
Аксакал
@whuber Я не уверен, кажется, это не покрывает, как несущественные измерения могут быть проигнорированы.
Георг
1
Кстати, я также изо всех сил пытаюсь найти формализацию для подхода, который я описал. Если бы я знал формальный термин, это также помогло бы мне в моем исследовании. Возможно, в этом алгоритме есть вариант, который решает, по крайней мере, проблему независимого / нерелевантного измерения.
Георг

Ответы:

7

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

п(Икс)знак равноΠязнак равно1мп(Икся;μя,σя2)

где каждый распределен по Гауссу:x iN ( μ i , σ 2 i )ИксяИкся~N(μя,σя2)

аномалия возникает всякий раз, когдап(Икс)<ε

Распределение каждого не обязательно должно быть нормальным, но лучше, если оно будет хотя бы нормальным. Но используемые вами функции являются произвольными; они могут быть взяты непосредственно из необработанных данных или вычислены, поэтому, например, если вы считаете, что функция лучше смоделирована с использованием тогда установите для функции а не .x i l o g l o g ( x i ) x iИксяИксяLогLог(Икся)Икся

Похоже, это очень похоже на то, что вы уже делаете, если вы берете .Qзнак равноμ

Определениеε

Алгоритм подходит для отрицательных примеров (не аномалии). Но определяется из набора перекрестной проверки и обычно выбирается в качестве значения, которое обеспечивает лучший результатF 1εF1

F1знак равно2*пресяsяоN*ресaLLпресяsяоN+ресaLL

Но для вычисления F1 вам нужно знать, что является аномальным, а что нет; это действительно положительные результаты, когда система предсказывает аномалию, а на самом деле это аномалия, ложные срабатывания - это предсказанные аномалии, которые на самом деле не являются и так далее. Поэтому, если у вас этого нет, то вам, возможно, придется вернуться к догадкам.

Проблема взаимосвязанных функций

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

п(Икс)знак равно1(2π)м2(йеΣ)1/2е-12(Икс-μ)TΣ-1(Икс-μ)

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

waTeim
источник
Я уже попробовал этот подход, включая многомерное распределение Гаусса. Действительно, несвязанные функции не являются большой проблемой с этим подходом. Я обнаружил, что этот подход не подходит для сложных моделей. Например, если бы у меня был двумерный набор данных с объектами F1, F2, где случается так, что примерно F2 = F1 ^ 3, многомерное распределение Гаусса будет только рисовать эллипс вокруг данных и моделировать данные очень грубо. Вот почему я пошел за подход, описанный в вопросе (где есть не один q, а много qs).
Георг
Итак, есть ли способ взять многомерный гауссовский подход и применить его для захвата более сложных моделей данных? Например, могут ли модели смешивания помочь мне в этом случае? Я немного читал о них в своем исследовании, но еще не совсем понял, как их применять.
Георг
@ Георг Хмм Интересно, проблема не в сложных моделях, а в сложных данных и слишком упрощенных моделях? Или, другими словами, подгонка. В случае выше, что произойдет, если вместо вы используете ? Функции могут быть взяты из данных или вычислены. (F1,F2)(F1,F21/3)
WaTeim
Да, я имею в виду нехватку одежды. И да, это сработало бы, но я хочу, чтобы алгоритм обнаружил это автоматически. Я не могу вручную изменить функции, это должно работать в любом случае.
Георг
Вот пример: на двух графиках отображаются данные для роста (ось x) и веса (ось y) (извините за немецкие подписи;)). Первый график показывает результат многомерного гауссовского подхода, второй подход описан в вопросе. В обоих случаях порог был выбран таким, чтобы 97% данных CV считались правдоподобными. Второй подход позволяет лучше уловить сложность данных. 1: dl.dropboxusercontent.com/u/26034024/anomaly/gauss.png 2: dl.dropboxusercontent.com/u/26034024/anomaly/distance.png
Георг,
3

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

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

Независимые Особенности

Независимые характеристики могут быть отфильтрованы путем измерения коэффициента корреляции . Я сравнил все особенности по парам и измерил корреляцию. Затем я взял максимальный абсолютный коэффициент корреляции каждой функции в качестве коэффициента масштабирования. Таким образом, объекты, которые не коррелируют с другими, умножаются на значение, близкое к 0, и, следовательно, их влияние на евклидово расстояние(иначе ) незначительно.||Икс1-Икс2||dяsTaNсе(Икс1,Икс2)

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

Дискретные значения

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

Georg
источник