Урок за това как да откривате извънредни стойности с помощта на стандартно отклонение, интерквартилен диапазон, изолираща гора, DBSCAN и локален фактор на извънредни стойности

„Отклонения“ са точки от данни, които са далеч от по-голямата част от наблюденията в набора от данни. Извънредните стойности могат да се появят по много причини, като например естествени отклонения в поведението на населението, измамни дейности и човешки или системни грешки. Въпреки това, откриването и идентифицирането на извънредни стойности е от съществено значение преди извършването на статистически анализ или подготовката на данни за обучение на модели за машинно обучение.

В тази статия ще разгледаме едновариантните и многовариантните отклонения, как се различават и как могат да бъдат идентифицирани с помощта на статистически методи и автоматизирани техники за откриване на аномалии. Ще видим интерквартилния обхват и методите на стандартното отклонение за откриване на едномерни извънредни стойности и изолационна гора, DBSCAN — базирано на плътност пространствено групиране на приложения с шум и LOF — Локален фактор на извънредни стойности за откриване на многовариантни извънредни стойности.

Докато следите статията, препоръчвам ви да разгледате Jupyter Notebook в моя GitHub за пълен анализ и код.

Имаме много за покриване, нека започваме! 🚀

Данни

В статията ще използваме „Набора данни за идентификация на стъкло от UCI“, който има 8 атрибута (т.е. „Na“), свързани със съдържанието на стъкло, а също и с вида на стъклото.

import pandas as pd
glass = pd.read_csv('glass.csv')

Едномерни и многомерни отклонения

Като използваме seaborn’s pairplot, можем да начертаем връзките по двойки между съдържанието на стъклото и чрез това изображение можем да видим как изглежда разпределението на основните ни данни.

import seaborn as sns
sns.pairplot(glass, diag_kws={'color':'red'})

Ако погледнем по-отблизо графиките по-горе, ще видим, че атрибутите на стъклото са по оста x и y. Заедно с диагонала в червено можем да видим графиките на хистограмата, показващи разпределенията.

Както можете да видите, не всички атрибути имат нормално разпределение, което следва камбанообразна крива, но всъщност повечето от атрибутите са изкривени към по-ниски стойности (т.е. Ba, Fe) или по-високи стойности (т.е. Mg). За да открием едномерни отклонения, трябва да се съсредоточим върху разпределението на един атрибут и да намерим точки от данни, които са далеч от по-голямата част от данните на този атрибут. Например, ако изберем „Na“ и начертаем boxplot, можем да намерим кои са точките от данни извън мустаците и могат да бъдат маркирани като извънредни стойности.

За разлика от това, за да откриеммноговариантни извънредни стойноститрябва да се съсредоточим върху комбинацията от поне две променливи в n-измерното пространство. Например в набора от данни за стъкло можем да използваме всичките осем атрибута на стъклото и да ги начертаем в n-измерно пространство и да намерим многовариантни отклонения, като открием кои са точките от данни, които попадат далеч.

Тъй като начертаването на повече от три измерения не е възможно, трябва да намерим начин да трансформираме осем измерения в по-нискоизмерно пространство. PCA — Анализ на главните компоненти е техника за намаляване на размерността, която извършва линейно картографиране на високомерното пространство в нискомерното пространство чрез максимизиране на дисперсията в нискомерното представяне. Можем да трансформираме осем измерения в триизмерно пространство, като изпълним PCA с n_components=3.

Можете да видите на графиката, че има някои точки от данни близо една до друга (съставляващи гъсти области) и някои далеч, които може да са многовариантни отклонения.

Трябва да следваме различни процедури за откриване на едномерни и многомерни отклонения. Нека започнем с едномерни извънредни стойности и да научим методите за стандартно отклонение и интерквартилен диапазон, за да ги открием.

Едномерно откриване на отклонения

1. Метод на стандартното отклонение

Да предположим, че една променлива е (почти) нормално разпределена. В този случай неговата хистограма трябва да следва камбанообразна крива и 68,3% от стойностите на данните са в рамките на едно стандартно отклонение от средната стойност, 95,4% от стойностите на данните са в рамките на две стандартни отклонения от средната стойност и 99,7% от стойностите на данните са в рамките на три стандартни отклонения от средната стойност.

Следователно можем да открием отклонения, ако има точки от данни, които се намират по-далеч от три стандартни отклонения от средната стойност.

Използвайки техниката на стандартното отклонение, премахнахме два записа въз основа на разпределението на променливата „Na“, което е екстремно. Можете да разширите и покриете всички други атрибути, за да премахнете едномерните отклонения.

Shape of original dataset: (213, 9) 
Shape of dataset after removing outliers in Na column: (211, 9)

2. Метод на междуквартилния диапазон

Методът на интерквартилния диапазон, показан най-добре с помощта на графика, разделя данните на квартили чрез дефиниране на три точки:

Квартил 1 (Q1) представлява 25-ти персентил
Квартил 2 (Q2) представлява 50-ти персентил
Квартил 3 (Q3) представлява 75-ти персентил

Кутията в графиката представлява диапазона на IQR, който се определя като диапазона между Q1 и Q3; IQR = Q3 — Q1 и точки от данни, които са под Q1 - 1.5*IQR или над Q3 + 1.5*IQR, се определят като отклонения.

В кутията Q1 - 1.5*IQR и Q3 + 1.5*IQRса представени от мустаците, а извънредните стойности са представени с точки отгоре или отдолу.

Shape of original dataset: (213, 9) 
Shape of dataset after removing outliers in Na column: (206, 9)

С помощта на техниката IQR премахнахме седем записа въз основа на разпределението на променливата „Na“. Както можете да забележите, методът на стандартното отклонение успя да намери само 2 отклонения, които бяха наистина екстремни точки, но с IQR метода успяхме да открием повече (още 5 записа, които не бяха толкова екстремни). От вас и вашия случай на употреба зависи да решите кой метод е по-добър за набора от данни и дали имате място да пуснете повече точки от данни.

Нека продължим с многовариантните извънредни стойности и да научим за изолационната гора, DBSCAN — базирано на плътност пространствено клъстериране на приложения с шум и LOF — локален фактор на извънредни стойности.

Многовариантно откриване на отклонения

1. Изолационен горски метод

Изолирана гора е неконтролиран алгоритъм за машинно обучение, базиран на произволна гора. Може би знаете, че произволната гора е модел на „ансамбълно обучение“, който използва съвкупност от базови модели (да речем 100 дървета за вземане на решения) и модели, които превъзхождат дадена по-голяма тежест в крайното решение.

Ако имате нужда от опресняване на обучението в ансамбъл, можете да погледнете тази статия.



Изолационната гора следва методологията на произволна гора, но за разлика от нея открива (или с други думи изолира) аномални точки от данни. За да направи това, той прави две основни предположения: отклоненията са малцинство и са необичайни.

Изолационната гора създава дървета на решения чрез произволен избор на функция и след това произволно избиране на разделно правило за разделяне на стойностите на избраната характеристика. Този процес продължава до достигане на зададените стойности на хиперпараметъра. След това изолационната гора разглежда дали дървото е по-късо и има по-малко дялове, тогава съответната стойност е отклонение (малцинство и необичайно).

Нека да видим имплементацията с помощта на IsolationForest клас от scikit-learn.

from sklearn.ensemble import IsolationForest
IsolationForest(n_estimators=100, max_samples='auto', contamination='auto', max_features=1.0, bootstrap=False, n_jobs=None, random_state=None, verbose=0, warm_start=False)

Алгоритъмът Isolation Forest има няколко хиперпараметъра като n_estimators за броя на базовите оценители за ансамбъла, max_samples за броя проби за обучение на модела, замърсяване за определяне на съотношението на извънредните стойности в данните, max_features за броя характеристики, извлечени от данни за обучение. Можете да погледнете doc за останалото.

Започваме изолираща гора, като задаваме броя на базовите модели на 100, максималните функции на общия брой функции и замърсяването на 'auto', което използва прагове на отместване и замърсяване, както е определено в оригиналния документ. Ако замърсяването е 0,1, тогава 10% от набора от данни ще бъдат определени като отклонения.

Чрез извикване на glass['outlier'].value_counts() можем да видим, че има 19 записа, маркирани като -1 — отклонения, а останалите 195 записа са маркирани като 1 — не отклонения.

Можем да визуализираме отклонения, като намалим броя на функциите до три компонента с PCA, както разгледахме по-рано.

За да поддържам съдържанието фокусирано, няма да покажа как да настроите хиперпараметри, но ако се интересувате, можете да проверите тази статия.

2. Пространствено клъстериране на приложения с шум (DBSCAN) на базата на плътност

DBSCAN е популярен алгоритъм за групиране, който често се използва като алтернатива на K-средните. Той е базиран на плътност, което означава, че се фокусира върху зони с висока плътност, където се намират много точки от данни. Той извършва пространствено клъстериранечрез измерване на пространственото разстояние на характеристиките (т.е. евклидово разстояние) между данните, за да идентифицира кои могат да бъдат групирани заедно. Той позволява приложения с шум, което означава, че можем да използваме DBSCAN върху шумни данни. Но това не е всичко, едно от най-големите предимства на DBSCAN е, че не е необходимо да дефинираме предварително броя на клъстерите.

Нека видим реализацията с помощта на клас DBSCAN от scikit-learn.

from sklearn.cluster import DBSCAN
DBSCAN(eps=0.5, min_samples=5, metric=’euclidean’, metric_params=None, algorithm=’auto’, leaf_size=30, p=None, n_jobs=None)

DBSCAN има няколко хиперпараметъра като eps (epsilon)за максималното разстояние между две точки от данни, които трябва да се вземат предвид в един и същ клъстер, min_samplesза броя близки точки от данни за точка, която да се счита за основна точка, метриказа изчисляване на разстоянието между точките. Можете да погледнете doc за останалото.

Когато стартирате DBSCAN, е много важно внимателно да изберете хиперпараметри. Например, ако стойността на eps е избрана твърде малка, тогава повечето от данните могат да бъдат класифицирани като отклонения, тъй като областта на съседство е дефинирана като по-малка. За разлика от това, ако стойността на eps е избрана твърде голяма, тогава повечето от точките могат да бъдат групирани заедно, тъй като е вероятно да се намират в един и същ квартал. Тук избрахме eps като 0,4, използвайки графиката на k-разстоянието.

Освен това min_samples е важен хиперпараметър, който обикновено е равен или по-голям от 3 и в повечето случаи се избира като D+1, където D е измерението на набора от данни. В нашия пример задаваме min_samples равно на 10.

Тъй като DBSCAN идентифицира клъстери по плътност, областите с висока плътност са местата, където се появяват клъстери, а областите с ниска плътност са местата, където се появяват отклонения. Чрез извикване на glass['outlier'].value_counts() можем да видим, че има 22 записа, маркирани като -1 — отклонения, а останалите 192 записа са маркирани като 1 — не отклонения.

Можем да визуализираме отклонения с помощта на PCA.

3. Локален извънреден фактор (LOF)

LOF е популярен неконтролиран алгоритъм за откриване на аномалии, който изчислява локалното отклонение на плътността на точките от данни по отношение на техните съседи. След това изчисление точките с по-ниска плътност се считат за извънредни стойности.

Нека видим реализацията с помощта на клас LOF от scikit-learn.

from sklearn.neighbors import LocalOutlierFactor
LocalOutlierFactor(n_neighbors=20, algorithm='auto', leaf_size=30, metric='minkowski', p=2, metric_params=None, contamination='auto', novelty=False, n_jobs=None)

LOF има няколко хиперпараметъра като n_neighborsза избор на броя на съседите по подразбиране, равен на 20 и contamination за определяне на съотношението на извънредните стойности, което може да бъде равно на 'float'това е в диапазона (0, 0,5] или 'auto', който използва прагове на отместване и замърсяване, както е определено в оригиналния му документ.

Чрез извикване на glass['outlier'].value_counts() можем да видим, че има 34 записа, маркирани като -1 — отклонения, а останалите 180 записа са маркирани като 1 — не отклонения.

И накрая, можем да визуализираме тези отклонения с помощта на PCA.

Заключение

В тази статия проучихме различни методи за откриване на отклонения в нашия набор от данни. Започнахме с едномерни техники за откриване на извънредни стойности и покрихме методите на стандартното отклонение и интерквартилния диапазон. Изпълнихме тези методи в колоната „Na“ в набора от данни за идентификация на стъкло. След това преминахме към многовариантни техники за откриване на извънредни стойности и покрихме изолационна гора, DBSCAN и локален фактор на извънредни стойности. С тези методи се научихме как да откриваме отклонения, използвайки всички измерения в пространството на характеристиките. В допълнение към откриването на отклонения, научихме също как да използваме PCA - техника за намаляване на размерността за визуализиране на n-измерни данни.

Докато разглеждахме методите, не прекарахме твърде много време в настройка на хиперпараметрите. Настройката на хиперпараметъра обаче е важна стъпка в разработването на ML модел. Ако искате да научите или опресните знанията си, можете да разгледате статията по-долу.



Надявам се, че ви е харесало да прочетете за откриването на извънредни стойности и ще намерите статията за полезна за вашата работа!

Ако сте харесали тази статия, можете дапрочетете другите ми статии туки последвайте ме в Medium. Уведомете ме, ако имате въпроси или предложения.✨

Харесвате ли тази статия? Станете член за повече!

Препратки

  1. Изолационна гора от Scikit-Learn
  2. DBSCAN от Scikit-Learn
  3. Коефициент на локално отклонение от Scikit-Learn
  4. Заглавна снимка от Benjamin Voros на Unsplash
  5. Всички останали изображения са от автора
  6. „Набор от данни за идентификация на стъкло от Kaggle“ от: Dua, D. и Graff, C. (2019). Хранилище за машинно обучение на UCI [http://archive.ics.uci.edu/ml]. Ървайн, Калифорния: Университет на Калифорния, Училище по информация и компютърни науки.