局所外れ値因子(LOF)

Anomaly Detection in Python

Bekhruz (Bex) Tuychiev

Data Science Writer

Local Outlier Factor (LOF) とは

特徴

  • 密度ベースのアルゴリズム
  • 2000年に提案
  • 中程度の高次元データに強い
  • KNN や Isolation Forest より速い場合あり
Anomaly Detection in Python

LOF の仕組み

  • 点は局所外れ値因子(LOF)というスコアで分類
  • LOF は局所密度に基づく
  • 局所性は n_neighbors で決める
  • 密度が低い点は外れ値と判定

LOF アルゴリズムの可視化

Anomaly Detection in Python

局所性の重要性

  • 重要なのは「局所」
  • LOF スコアは近傍の点とだけ比較する
Anomaly Detection in Python

LOF の可視化

LOF アルゴリズムの可視化

Anomaly Detection in Python

LOF の可視化

LOF アルゴリズムの可視化

Anomaly Detection in Python

LOF の可視化

LOF アルゴリズムの可視化

Anomaly Detection in 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
Anomaly Detection in 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])
Anomaly Detection in Python

LOF によるフィルタリング

# 外れ値の抽出
probs = lof.predict_proba(males_transformed)

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

len(outliers)
2
Anomaly Detection in Python

LOF の詳細

  • 最重要は n_neighbors
  • チューニングの目安:
    • 汚染率 <10% なら近傍は 20
  • 集約は不可:
    • method は常に largest
Anomaly Detection in Python

LOF の欠点

  • 解釈が難しい
  • LOF スコアは次を組み合わせる:
    • 点間距離
    • 到達距離(reachability)
    • その他多数の要素
  • 外れ値のための一定のスコア範囲はない
Anomaly Detection in Python

練習に進みましょう!

Anomaly Detection in Python

Preparing Video For Download...