Выделяем аномалии в числовых данных с помощью медианного отклонения
Сегодня вы узнаете, как найти выбросы в данных, не используя среднее и стандартное отклонение. Также мы обойдемся без межквартильного интервала.
Выброс в числовых данных — это значение, которое сильно отличается от большинства других значений в наборе. Выброс может возникнуть из-за ошибки в измерениях, а может фиксировать реальное экстремальное значение. К выбросу можно отнести как очень большое, так и очень маленькое значение.
Представим себе участок шоссе, на котором камера фиксирует количество автомобилей, проезжающих за одну минуту. Камера связана со светофором на ближайшем перекрестке. И если число автомобилей становится аномально большим, она включает красный свет.
Пусть камера зафиксировала следующие значения:
5, 6, 4, 1, 1, 8, 8, 6, 5, 12, 2.
На глаз видно, что 12 — это выброс. Но как алгоритмически определить, что указанное число действительное является выбросом?
Среднее и стандартное отклонение
В мире, где распределение значений удовлетворяет условию нормальности, выбросы находят при помощи среднего (AVG) и стандартного отклонения (STD). От среднего отнимают или прибавляют станд. откл., умноженное на k.
min = AVG - k STD, max = AVG + k STD.
Обычно k = 3 — это то самое правило трех сигм, о котором многие слышали. (Есть еще правило шести сигм, но о нем как-нибудь потом поговорим.) Все значения, меньшие или большие найденных границ, считаются выбросами.
AVG = 5,27 STD = 3,32 min = -4,69 max = 15,23
Так как {вся выборка} < max, то этот способ выбросов не зафиксировал.
Межквартильный размах
В мире ненормально распределенных данных для выявления выбросов используют межвартильный размах (IQR). Он равен разнице между третьим и первым квартилями.
IQR = Q3 - Q1.
Для определения граничных значений межвартильный размах отнимают или прибавляют к медиане (MED), умноженной на k. Обычно принимают k = 1,5.
min = MED - k IQR, max = MED + k IQR.
Тогда для нашей выборки получатся следующие величины:
MED = 5 IQR = 4 min = 0,5 max = 14,5
То есть такой способ тоже выбросов не зафиксировал.
Медианное отклонение
В реальном мире, где не работает ни первый, ни второй способ, используют медианное отклонение. Для этого находят медиану (MED), затем из каждого значения вычитают медиану и берут модуль от полученной разницы, и вновь находят медиану новой выборки.
MED = 5.
Найдем абсолютное значение разницы между медианой и данными:
исходные = 5, 6, 4, 1, 1, 8, 8, 6, 5, 12, 2 минус MED = 0, 1, 1, 4, 4, 3, 3, 1, 0, 7, 3
Теперь найдем медиану новых данных:
MED1 = 3
Затем умножим ее на специальную константу 1,4826, что даст нам аналог стандартного отклонения:
MED2 = 1,4826 ∙ 3 = 4,44.
И вот теперь определим граничный диапазон, вне которого находятся выбросы:
min = MED - k MED2, max = MED + k MED2,
min = 0,55 max = 9,44.
И выбросом оказывается число 12. То есть как только камера насчитает 12 автомобилей в минуту, она включит светофор.
Описанный алгоритм применим для непрерывно поступающих значений. В этом случае необходимо учитывать только значения из узкого окна, считая выбросами величины, превосходящие пороговую величину.
На рисунке показа пример работы алгоритма на динамически поступающих данных. Он прекрасно зафиксировал как аномально высокие, так и аномально низкие величины.
Из графика следует, что с помощью медианного отклонения можно динамически выявить аномалий в любых исследованиях. Например, таким способом мы можем выявить аномальное количество посетителей на сайте, или аномальный спрос на определенный товар, либо найти аномальные транзакции между банковскими счетами, либо найти дни, с аномальными значениями температуры.
Метод медианного отклонения прекрасно работает и на смещенных выборках. А что делать, если наше распределение является бимодальным — двувершинным. В том случае используют детектор выбросов, основанный на двойном медианном отклонение — doubleMAD outlier detector.