KNN для виявлення викидів

Виявлення аномалій у Python

Bekhruz (Bex) Tuychiev

Kaggle Master, Data Science Content Creator

Застосування KNN

  • Навчання з учителем:
    • Регресія
    • Класифікація
  • Навчання без учителя:
    • Кластеризація
    • Виявлення викидів
Виявлення аномалій у Python

Простота KNN

Оцінки аномалій обчислюються в
  • Isolation Forest:
    • Глибина дерева
    • Розмір підвибірки
    • Багато інших компонентів
  • KNN:
    • Лише відстань між екземплярами
Виявлення аномалій у Python

Набір даних Ansur Male

import pandas as pd

males = pd.read_csv("ansur_male.csv")
males.info()
<class 'pandas.core.frame.DataFrame'>
RangeIndex: 4082 entries, 0 to 4081
Data columns (total 95 columns):
 #   Column                          Non-Null Count  Dtype
 0   abdominalextensiondepthsitting  4082 non-null   int64
 1   acromialheight                  4082 non-null   int64
 2   acromionradialelength           4082 non-null   int64
 3   anklecircumference              4082 non-null   int64
 4   axillaheight                    4082 non-null   int64
  ...
Виявлення аномалій у Python

KNN у дії

from pyod.models.knn import KNN

knn = KNN(contamination=0.01, n_jobs=-1)

knn.fit(males)
Виявлення аномалій у Python

KNN з імовірностями викидів

probs = knn.predict_proba(males)


# Використайте поріг 55% для фільтрації is_outlier = probs[:, 1] > 0.55 # Віділіть викиди outliers = males[is_outlier] len(outliers)
13
Виявлення аномалій у Python

Кількість сусідів

# k=20, коли contamination <=10%
knn = KNN(n_neighbors=20, n_jobs=-1)
knn.fit(males)

probs = knn.predict_proba(males)

is_outlier = probs[:, 1] > .55
outliers = males[is_outlier]

len(outliers)
15

Графік прикладного набору з 8 екземплярами: A — викид, показані стрілки до 4 найближчих сусідів.

Виявлення аномалій у Python

Особливості KNN

Графік прикладного набору з 8 екземплярами: A — викид, показані стрілки до 4 найближчих сусідів.

Виявлення аномалій у Python

Недоліки KNN

  • Запам'ятовує набір даних — неекономно щодо пам'яті
  • Повільний етап прогнозування
  • Чутливість до масштабів ознак
Виявлення аномалій у Python

Давайте потренуємось!

Виявлення аномалій у Python

Preparing Video For Download...