Рекомендуемый метод обнаружения аномалии для простого, одномерного сценария?

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

Например, со следующими данными в качестве примера:

a = 10
b = 14
c = 25
d = 467
e = 12

d ясно аномалия, и я хотел бы выполнить определенное действие на основе этого.

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

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


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

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

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

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


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

Что такое рекомендуемый метод обнаружения аномалии для простых, одномерных данных?

29
задан Grundlefleck 21 February 2010 в 17:29
поделиться

2 ответа

Проверьте правило трех сигм:

mu  = mean of the data
std = standard deviation of the data
IF abs(x-mu) > 3*std  THEN  x is outlier

Альтернативным методом является IQR outlier test:

Q25 = 25th_percentile
Q75 = 75th_percentile
IQR = Q75 - Q25         // inter-quartile range
IF (x < Q25 - 1.5*IQR) OR (Q75 + 1.5*IQR < x) THEN  x is a mild outlier
IF (x < Q25 - 3.0*IQR) OR (Q75 + 3.0*IQR < x) THEN  x is an extreme outlier

этот тест обычно используется Box plots (обозначается усами):

boxplot


EDIT:

Для вашего случая (простые одномерные данные), я думаю, мой первый ответ вполне подходит. Однако он не применим к многомерным данным.

@smaclell предложил использовать K-means для поиска выбросов. Помимо того, что это в основном алгоритм кластеризации (не совсем метод обнаружения выбросов), проблема с k-means в том, что он требует заранее знать хорошее значение для числа кластеров K.

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

dbscan_clustering

DBSCAN требует двух параметров: epsilon и minPoints. Он начинает с произвольной точки, которая не была посещена. Затем он находит все соседние точки на расстоянии epsilon от начальной точки.

Если число соседей больше или равно minPoints, формируется кластер. Начальная точка и ее соседи добавляются в этот кластер, а начальная точка помечается как посещенная. Затем алгоритм повторяет процесс оценки для всех соседей рекурсивно.

Если число соседей меньше, чем minPoints, точка помечается как noise.

Если кластер полностью расширен (посещены все точки в пределах досягаемости), то алгоритм переходит к итерациям по оставшимся непосещенным точкам, пока они не будут исчерпаны.

Наконец, набор всех точек, помеченных как шум, считается выброшенными.

43
ответ дан 28 November 2019 в 01:43
поделиться

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

После того, как у вас появятся средства, вы можете попытаться выяснить, далека ли какая-либо точка от любого из средств. Вы можете определить «далеко», как хотите, но я бы порекомендовал предложения @Amro в качестве хорошей отправной точки.

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

2
ответ дан 28 November 2019 в 01:43
поделиться
Другие вопросы по тегам:

Похожие вопросы: