Wprowadzenie do Isolation Forests

Wykrywanie anomalii w Pythonie

Bekhruz (Bex) Tuychiev

Kaggle Master, Data Science Content Creator

Dane z ankiety

  • Przykładowy respondent:
    • 12 lat
    • wzrost 160 cm
    • masa 190 funtów

Ilustracja przedstawiająca 12-letniego chłopca w kapeluszu

Wykrywanie anomalii w Pythonie

Anomalie wielowymiarowe

Anomalie wielowymiarowe:

  • mają dwa lub więcej atrybutów
  • atrybuty niekoniecznie są anomalne
  • anomalia pojawia się dopiero po uwzględnieniu wszystkich atrybutów
Wykrywanie anomalii w Pythonie

Drzewa decyzyjne

Węzeł główny i jeden węzeł końcowy drzewa decyzyjnego sprawdzającego, czy 5 jest liczbą pierwszą

Wykrywanie anomalii w Pythonie

Drzewa decyzyjne

W pełni rozwinięte drzewo decyzyjne z trzema poziomami sprawdzające, czy 5 jest liczbą pierwszą

Wykrywanie anomalii w Pythonie

Isolation Trees

iTrees:

  • skrót od isolation trees
  • losowe wersje drzew decyzyjnych
  • podziały (rozgałęzienia) są losowe
  • losowy podział częściej występuje w luce między wartościami typowymi a anomaliami
Wykrywanie anomalii w Pythonie

Przykładowe dane 2D

Przykładowy zbiór danych 2D z 9 punktami, z których 2 są anomaliami

Wykrywanie anomalii w Pythonie

Dopasowywanie iTree

Zbiór danych 2D podzielony na dwie części w układzie kartezjańskim za pomocą zielonej linii

Węzeł główny iTree dopasowanego do zbioru danych 2D

Wykrywanie anomalii w Pythonie

Dopasowywanie iTree

Zbiór danych 2D podzielony na cztery części w układzie kartezjańskim przez dwie prostopadłe linie

Dwa węzły iTree wykrywającego 2 anomalie

Wykrywanie anomalii w Pythonie

Dopasowywanie iTree

Zbiór danych 2D podzielony na wiele części w układzie kartezjańskim przez 6 kolorowych linii

Dalsza część iTree dopasowanego do zbioru danych 2D

Wykrywanie anomalii w Pythonie

Klasyfikacja punktów

Punkty są anomaliami:

  • jeśli są blisko węzła głównego
  • lub wymagają mniejszej liczby podziałów

Dalsza część iTree dopasowanego do zbioru danych 2D

Wykrywanie anomalii w Pythonie

Dane Airbnb dla USA

import pandas as pd

airbnb_df = pd.read_csv("airbnb.csv")
Wykrywanie anomalii w Pythonie

Dane Airbnb dla USA

airbnb_df.info()
<class 'pandas.core.frame.DataFrame'>
RangeIndex: 10000 entries, 0 to 9999
Data columns (total 6 columns):
 #   Column                          Non-Null Count  Dtype  
 0   minimum_nights                  10000 non-null  int64  
 1   number_of_reviews               10000 non-null  int64  
 2   reviews_per_month               10000 non-null  float64
 3   calculated_host_listings_count  10000 non-null  int64  
 4   availability_365                10000 non-null  int64  
 5   price                           10000 non-null  int64  
dtypes: float64(1), int64(5)
Wykrywanie anomalii w Pythonie

fit_predict

from pyod.models.iforest import IForest

iforest = IForest() labels = iforest.fit_predict(airbnb_df) print(labels)
array([0, 0, 0, ..., 1, 0, 0])

Wykrywanie anomalii w Pythonie

Filtrowanie anomalii

outliers = airbnb_df[labels == 1]

print(outliers.shape)
(1000, 6)
Wykrywanie anomalii w Pythonie

Czas na ćwiczenia!

Wykrywanie anomalii w Pythonie

Preparing Video For Download...