Рекомендуемая методика обнаружения аномалий для простого одномерного сценария?
У меня есть сценарий, где у меня несколько тысяч экземпляров данных. Сами данные представлены как одно целое значение. Я хочу иметь возможность обнаруживать, когда экземпляр является экстремальным.
Например, со следующими примерами данных:
a = 10
b = 14
c = 25
d = 467
e = 12
d
явно аномалия, и я хотел бы выполнить определенное действие, основанное на этом.
У меня возникло соблазн просто попробовать использовать мои знания о конкретном домене для обнаружения аномалий. Например, определите расстояние от полезного значения, и проверьте это на основе эвристики. Тем не менее, я думаю, что, вероятно, лучше, если я исследую более общие, надежные методы обнаружения аномалий, которые имеют некоторую теорию за ними.
Поскольку мои знания в области математики ограничены, я надеюсь найти технику, которая проста, например, с использованием стандартного отклонения. Надеемся, что одномерный характер данных сделает эту довольно распространенную проблему, но если требуется дополнительная информация для сценария, оставьте комментарий, и я расскажу больше.
Изменить: подумал, что я бы добавил больше информации о данных и о том, что я пробовал, если он делает один ответ более правильным, чем другой.
Все значения являются положительными и отличными от нуля. Я ожидаю, что значения составят нормальное распределение. Это ожидание основано на интуиции домена, а не на анализе, если это не плохо, предположите, пожалуйста, дайте мне знать. В терминах кластеризации, если не существует также стандартных алгоритмов для выбора значения k, мне было бы трудно предоставить это значение алгоритму k-Means.
Действие, которое я хочу предпринять для outlier/anomaly, представляет его пользователю и рекомендует, чтобы точка данных была в основном удалена из набора данных (я не буду вдаваться в то, как они это сделают, но это имеет смысл для моего домена), поэтому он не будет использоваться как вход для другой функции.
До сих пор я пробовал три сигмы, а тест IQR outlier на моем ограниченном наборе данных. Значения флажков IQR, которые не являются достаточно экстремальными, три сигмы указывают на примеры, которые лучше соответствуют моей интуиции в домене.
Информация об алгоритмах, методах или ссылках на ресурсы, чтобы узнать об этом конкретном сценарии, действительна и приветствует ответы.
Что такое рекомендуемый метод обнаружения аномалий для простых одномерных данных?
Ответы
Ответ 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