เริ่มต้นกับ Isolation Forests

การตรวจจับความผิดปกติใน Python

Bekhruz (Bex) Tuychiev

Kaggle Master, Data Science Content Creator

ข้อมูลแบบสำรวจ

  • ตัวอย่างผู้ตอบแบบสอบถาม:
    • อายุ 12 ปี
    • สูง 160 ซม.
    • น้ำหนัก 190 ปอนด์

ภาพการ์ตูนเด็กชายอายุ 12 ปี สวมหมวก

การตรวจจับความผิดปกติใน Python

Multivariate anomalies

Multivariate anomalies:

  • มีแอตทริบิวต์ตั้งแต่สองรายการขึ้นไป
  • แต่ละแอตทริบิวต์ไม่จำเป็นต้องผิดปกติเอง
  • ผิดปกติเมื่อพิจารณาทุกแอตทริบิวต์รวมกัน
การตรวจจับความผิดปกติใน Python

Decision trees

โหนดรากและโหนดสิ้นสุดของ decision tree ที่ตรวจสอบว่า 5 เป็นจำนวนเฉพาะหรือไม่

การตรวจจับความผิดปกติใน Python

Decision trees

Decision tree แบบเต็มสามระดับที่ตรวจสอบว่า 5 เป็นจำนวนเฉพาะหรือไม่

การตรวจจับความผิดปกติใน Python

Isolation Trees

iTrees:

  • ย่อมาจาก isolation trees
  • เป็น decision trees แบบสุ่ม
  • การแบ่ง (branching) เกิดขึ้นแบบสุ่ม
  • การแบ่งแบบสุ่มมักเกิดในช่องว่างระหว่าง inlier และ outlier
การตรวจจับความผิดปกติใน Python

ตัวอย่างข้อมูล 2D

ชุดข้อมูล 2D ตัวอย่างที่มี 9 จุดข้อมูล โดยสองจุดเป็น outlier

การตรวจจับความผิดปกติใน Python

การ fit iTree

ชุดข้อมูล 2D ถูกแบ่งออกเป็นสองส่วนในระนาบ 2D ด้วยเส้นสีเขียว

โหนดรากของ iTree ที่ fit กับชุดข้อมูล 2D

การตรวจจับความผิดปกติใน Python

การ fit iTree

ชุดข้อมูล 2D ถูกแบ่งออกเป็นสี่ส่วนในระนาบ 2D ด้วยเส้นตั้งฉากสองเส้น

สองโหนดของ iTree ที่พบ outlier 2 จุด

การตรวจจับความผิดปกติใน Python

การ fit iTree

ชุดข้อมูล 2D ถูกแบ่งออกเป็นหลายส่วนในระนาบ 2D ด้วยเส้น 6 เส้นที่มีสีต่างกัน

ส่วนที่เหลือของ iTree ที่กำลัง fit กับชุดข้อมูล 2D

การตรวจจับความผิดปกติใน Python

การจำแนกประเภทจุดข้อมูล

จุดที่เป็น outlier:

  • อยู่ใกล้โหนดราก
  • หรือใช้จำนวนการแบ่งน้อยกว่า

ส่วนที่เหลือของ iTree ที่กำลัง fit กับชุดข้อมูล 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

กรอง outlier

outliers = airbnb_df[labels == 1]

print(outliers.shape)
(1000, 6)
การตรวจจับความผิดปกติใน Python

มาฝึกกันเถอะ!

การตรวจจับความผิดปกติใน Python

Preparing Video For Download...