Початок роботи з Isolation Forests

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

Bekhruz (Bex) Tuychiev

Kaggle Master, Data Science Content Creator

Дані опитування

  • Приклад респондента:
    • 12 років
    • зріст 160 см
    • вага 190 фунтів

Зображення мультяшного 12-річного хлопчика в капелюсі

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

Багатовимірні аномалії

Багатовимірні аномалії:

  • мають два чи більше атрибутів
  • окремі атрибути не обов'язково аномальні
  • аномальні лише разом, у поєднанні всіх атрибутів
Виявлення аномалій у Python

Дерева рішень

Кореневий вузол і термінальний вузол дерева рішень, що перевіряє, чи 5 — просте число

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

Дерева рішень

Повністю зростаюче дерево рішень із трьома рівнями, що перевіряє, чи 5 — просте число

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

Isolation Trees

iTrees:

  • скорочено від isolation trees
  • рандомізовані версії дерев рішень
  • розбиття (гілкування) відбувається випадково
  • випадковий поділ імовірніше трапляється в проміжку між «внутрішніми» та викидами
Виявлення аномалій у Python

Приклад 2D-даних

Приклад 2D-набору з 9 точками, з яких дві — викиди

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

Навчання iTree

2D-набір розбитий навпіл на декартовій площині зеленою лінією

Кореневий вузол iTree, навчений на 2D-наборі

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

Навчання iTree

2D-набір розбитий на чотири частини на декартовій площині двома перпендикулярними лініями

Два вузли iTree, що знаходять 2 викиди

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

Навчання iTree

2D-набір розбитий на кілька частин на декартовій площині 6 лініями різних кольорів

Подальше навчання iTree на 2D-наборі

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

Як класифікуються точки

Точки — це викиди, якщо:

  • вони близько до кореневого вузла
  • або потребують менше розбиттів

Подальше навчання iTree на 2D-наборі

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

Дані Airbnb у США

import pandas as pd

airbnb_df = pd.read_csv("airbnb.csv")
Виявлення аномалій у Python

Дані Airbnb у США

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)
Виявлення аномалій у Python

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

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

Фільтрування викидів

outliers = airbnb_df[labels == 1]

print(outliers.shape)
(1000, 6)
Виявлення аномалій у Python

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

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

Preparing Video For Download...