Подтвердить что ты не робот

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

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

Например, со следующими примерами данных:

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

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

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

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


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

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

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

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


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

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

4b9b3361

Ответ 1

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

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

этот тест обычно используется Графики ящиков (обозначены усами):

boxplot


EDIT:

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

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

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

dbscan_clustering

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

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

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

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

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

Ответ 2

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

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

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

Ответ 3

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

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

Тест IQR должен быть:

Q25 = 25th_percentile
Q75 = 75th_percentile
IQR = Q75 - Q25         // inter-quartile range
If x >  Q75  + 1.5 * IQR or  x   < Q25 - 1.5 * IQR THEN  x is a mild outlier
If x >  Q75  + 3.0 * IQR or  x   < Q25 – 3.0 * IQR THEN  x is a extreme outlier