KNN para detecção de outliers

Detecção de Anomalias em Python

Bekhruz (Bex) Tuychiev

Kaggle Master, Data Science Content Creator

Aplicações de KNN

  • Supervisionado:
    • Regressão
    • Classificação
  • Não supervisionado:
    • Agrupamento
    • Detecção de outliers
Detecção de Anomalias em Python

Simplicidade do KNN

Pontuações de anomalia são calculadas em
  • Isolation Forest:
    • Profundidade da árvore
    • Tamanho do subamplo
    • Muitos outros componentes
  • KNN:
    • Apenas a distância entre instâncias
Detecção de Anomalias em Python

Conjunto Ansur (Masculino)

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
  ...
Detecção de Anomalias em Python

KNN em ação

from pyod.models.knn import KNN

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

knn.fit(males)
Detecção de Anomalias em Python

KNN com probabilidades de outlier

probs = knn.predict_proba(males)


# Use limiar de 55% para filtrar is_outlier = probs[:, 1] > 0.55 # Isolar os outliers outliers = males[is_outlier] len(outliers)
13
Detecção de Anomalias em Python

Número de vizinhos

# k=20 quando a contaminação é <=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

Um gráfico de um conjunto de dados com 8 instâncias, com A como outlier e setas entre A e seus 4 vizinhos mais próximos.

Detecção de Anomalias em Python

Características do KNN

Um gráfico de um conjunto de dados com 8 instâncias, com A como outlier e setas entre A e seus 4 vizinhos mais próximos.

Detecção de Anomalias em Python

Desvantagens do KNN

  • Memoriza o conjunto de dados — ineficiente em memória
  • Predição lenta
  • Sensível à escala das variáveis
Detecção de Anomalias em Python

Vamos praticar!

Detecção de Anomalias em Python

Preparing Video For Download...