Bắt đầu với Isolation Forests

Phát hiện bất thường với Python

Bekhruz (Bex) Tuychiev

Kaggle Master, Data Science Content Creator

Dữ liệu khảo sát

  • Một người trả lời mẫu:
    • 12 tuổi
    • cao 160 cm
    • nặng 190 pound

Hình minh họa một bé trai 12 tuổi đội mũ

Phát hiện bất thường với Python

Ngoại lệ đa biến

Ngoại lệ đa biến:

  • có từ hai thuộc tính trở lên
  • từng thuộc tính không nhất thiết bất thường
  • chỉ bất thường khi xét cùng tất cả thuộc tính
Phát hiện bất thường với Python

Cây quyết định

Nút gốc và một nút kết thúc của cây quyết định kiểm tra số 5 có phải số nguyên tố không

Phát hiện bất thường với Python

Cây quyết định

Cây quyết định hoàn chỉnh ba mức kiểm tra số 5 có phải số nguyên tố không

Phát hiện bất thường với Python

Isolation Trees

iTrees:

  • viết tắt của isolation trees
  • phiên bản ngẫu nhiên của cây quyết định
  • tách (phân nhánh) ngẫu nhiên
  • tách ngẫu nhiên dễ rơi vào khoảng trống giữa điểm bình thường/ngoại lệ
Phát hiện bất thường với Python

Ví dụ dữ liệu 2D

Một tập dữ liệu 2D với 9 điểm, trong đó có hai điểm ngoại lệ

Phát hiện bất thường với Python

Huấn luyện một iTree

Tập dữ liệu 2D được chia đôi trên mặt phẳng tọa độ bởi một đường xanh

Nút gốc của một iTree khớp với dữ liệu 2D

Phát hiện bất thường với Python

Huấn luyện một iTree

Tập dữ liệu 2D được chia thành bốn phần bởi hai đường vuông góc

Hai nút của một iTree phát hiện 2 ngoại lệ

Phát hiện bất thường với Python

Huấn luyện một iTree

Tập dữ liệu 2D được chia thành nhiều phần trên mặt phẳng tọa độ bởi 6 đường màu khác nhau

Phần còn lại của iTree đang được khớp với dữ liệu 2D

Phát hiện bất thường với Python

Cách phân loại điểm

Điểm là ngoại lệ khi:

  • gần nút gốc
  • hoặc cần ít lần tách hơn

Phần còn lại của iTree đang được khớp với dữ liệu 2D

Phát hiện bất thường với Python

Dữ liệu Airbnb Hoa Kỳ

import pandas as pd

airbnb_df = pd.read_csv("airbnb.csv")
Phát hiện bất thường với Python

Dữ liệu Airbnb Hoa Kỳ

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)
Phát hiện bất thường với 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])

Phát hiện bất thường với Python

Lọc ngoại lệ

outliers = airbnb_df[labels == 1]

print(outliers.shape)
(1000, 6)
Phát hiện bất thường với Python

Ayo berlatih!

Phát hiện bất thường với Python

Preparing Video For Download...