Začínáme s Isolation Forests

Detekce anomálií v Pythonu

Bekhruz (Bex) Tuychiev

Kaggle Master, Data Science Content Creator

Data z průzkumu

  • Ukázkový respondent:
    • 12 let
    • výška 160 cm
    • váha 86 kg

Obrázek kreslené 12leté postavy v klobouku

Detekce anomálií v Pythonu

Vícerozměrné anomálie

Vícerozměrné anomálie:

  • mají dva nebo více atributů
  • atributy nemusí být samy o sobě anomální
  • anomální jsou až při zohlednění všech atributů
Detekce anomálií v Pythonu

Rozhodovací stromy

Kořenový uzel a jeden koncový uzel rozhodovacího stromu, který ověřuje, zda je 5 prvočíslo

Detekce anomálií v Pythonu

Rozhodovací stromy

Plně rozvinutý rozhodovací strom se třemi úrovněmi, který ověřuje, zda je 5 prvočíslo

Detekce anomálií v Pythonu

Izolační stromy

iStromy:

  • zkratka pro izolační stromy
  • randomizované verze rozhodovacích stromů
  • větvení probíhá náhodně
  • náhodné rozdělení je pravděpodobnější v mezeře mezi vnitřními/odlehlými hodnotami
Detekce anomálií v Pythonu

Příklad 2D dat

Ukázkový 2D dataset s 9 datovými body, z nichž dva jsou odlehlé hodnoty

Detekce anomálií v Pythonu

Trénování iStromu

2D dataset rozdělený na dvě části v kartézské rovině zelenou čarou

Kořenový uzel iStromu natrénovaného na 2D datasetu

Detekce anomálií v Pythonu

Trénování iStromu

2D dataset rozdělený na čtyři části v kartézské rovině dvěma kolmými čarami

Dva uzly iStromu, který nalézá 2 odlehlé hodnoty

Detekce anomálií v Pythonu

Trénování iStromu

2D dataset rozdělený na více částí v kartézské rovině 6 barevnými čarami

Zbytek iStromu trénovaného na 2D datasetu

Detekce anomálií v Pythonu

Klasifikace bodů

Body jsou odlehlé hodnoty:

  • pokud jsou blízko kořenového uzlu
  • nebo vyžadují méně rozdělení

Zbytek iStromu trénovaného na 2D datasetu

Detekce anomálií v Pythonu

Data Airbnb v USA

import pandas as pd

airbnb_df = pd.read_csv("airbnb.csv")
Detekce anomálií v Pythonu

Data Airbnb v 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)
Detekce anomálií v Pythonu

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])

Detekce anomálií v Pythonu

Filtrování odlehlých hodnot

outliers = airbnb_df[labels == 1]

print(outliers.shape)
(1000, 6)
Detekce anomálií v Pythonu

Pojďme si procvičit!

Detekce anomálií v Pythonu

Preparing Video For Download...