Local Outlier Factor

Python으로 배우는 이상치 탐지

Bekhruz (Bex) Tuychiev

Data Science Writer

Local Outlier Factor(LOF)란?

특징

  • 밀도 기반 알고리즘
  • 2000년에 제안됨
  • 중고차원 데이터에 잘 작동
  • KNN 및 Isolation Forest보다 더 빠를 수 있음
Python으로 배우는 이상치 탐지

LOF는 어떻게 작동할까요?

  • 점들은 local outlier factor(LOF)라는 점수로 분류됨
  • LOF는 지역 밀도 개념에 기반함
  • 지역성은 n_neighbors 값으로 결정함
  • 밀도가 낮은 점은 이상치로 분류됨

LOF 알고리즘 시각화

Python으로 배우는 이상치 탐지

지역성의 중요성

  • 핵심은 지역성(local)입니다
  • LOF 점수는 가까운 점들의 점수와만 비교합니다
Python으로 배우는 이상치 탐지

LOF 시각화

LOF 알고리즘 시각화

Python으로 배우는 이상치 탐지

LOF 시각화

LOF 알고리즘 시각화

Python으로 배우는 이상치 탐지

LOF 시각화

LOF 알고리즘 시각화

Python으로 배우는 이상치 탐지

변환된 데이터셋

import pandas as pd

males_transformed = pd.read_csv("males_transformed.csv")

males_transformed.head()
   abdominalextensiondepthsitting  acromialheight  acromionradialelength  ...
0                        0.365531        0.427976               0.113152   
1                       -0.492137       -0.724973              -0.529301   
2                        0.857097       -0.146048               0.357496   
3                       -0.462610       -1.521525              -1.467860   
4                       -0.026349        2.151957               1.985876
Python으로 배우는 이상치 탐지

LOF 실습

from pyod.models.lof import LOF


# Fit lof = LOF(n_neighbors=20, metric="manhattan") lof.fit(males_transformed) print(lof.labels_)
array([0, 0, 0, ..., 0, 0, 1])
Python으로 배우는 이상치 탐지

LOF에서의 필터링

# Isolate the outliers
probs = lof.predict_proba(males_transformed)

is_outlier = probs[:, 1] > 0.55
outliers = males_transformed[is_outlier]

len(outliers)
2
Python으로 배우는 이상치 탐지

LOF 세부사항

  • n_neighbors가 가장 중요함
  • n_neigbors 튜닝 경험칙:
    • 오염도 <10%이면 이웃 20명
  • 집계 불가:
    • method는 항상 largest
Python으로 배우는 이상치 탐지

LOF의 한계

  • 해석이 어려움
  • LOF 점수는 다음을 결합함:
    • 점들 간 거리
    • 도달 가능 거리(reachability)
    • 기타 여러 구성요소
  • 이상치에 대한 LOF 점수의 고정 범위 없음
Python으로 배우는 이상치 탐지

Let's practice!

Python으로 배우는 이상치 탐지

Preparing Video For Download...