KNN per il rilevamento di outlier

Rilevamento delle anomalie in Python

Bekhruz (Bex) Tuychiev

Kaggle Master, Data Science Content Creator

Applicazioni di KNN

  • Supervisionato:
    • Regressione
    • Classificazione
  • Non supervisionato:
    • Clustering
    • Rilevamento outlier
Rilevamento delle anomalie in Python

Semplicità di KNN

Gli anomaly score si calcolano con
  • Isolation Forest:
    • Profondità degli alberi
    • Dimensione del sotto-campione
    • Molti altri componenti
  • KNN:
    • Solo la distanza tra istanze
Rilevamento delle anomalie in Python

Dataset Ansur maschile

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
  ...
Rilevamento delle anomalie in Python

KNN in pratica

from pyod.models.knn import KNN

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

knn.fit(males)
Rilevamento delle anomalie in Python

KNN con probabilità di outlier

probs = knn.predict_proba(males)


# Usa soglia 55% per il filtro is_outlier = probs[:, 1] > 0.55 # Isola gli outlier outliers = males[is_outlier] len(outliers)
13
Rilevamento delle anomalie in Python

Numero di vicini

# k=20 quando la contaminazione <=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

Un grafico con 8 istanze: A è un outlier, con frecce verso i suoi 4 vicini più prossimi.

Rilevamento delle anomalie in Python

Caratteristiche di KNN

Un grafico con 8 istanze: A è un outlier, con frecce verso i suoi 4 vicini più prossimi.

Rilevamento delle anomalie in Python

Svantaggi di KNN

  • Memorizza il dataset: inefficiente in memoria
  • Predizione lenta
  • Sensibile alla scala delle feature
Rilevamento delle anomalie in Python

Passiamo alla pratica !

Rilevamento delle anomalie in Python

Preparing Video For Download...