ラベルなしで異常を見つける機械学習手法の定番、Isolation Forest と LOF(Local Factor) を扱います。両手法とも scikit-learn で 5 行で実装可。
Isolation Forest
「異常な点ほど少ない分割で隔離できる」という直感に基づく。決定木の深さの平均値で異常スコアを算出。
Isolation Forest の実装
Python
from sklearn.ensemble import IsolationForest
clf = IsolationForest(contamination=0.05, random_state=42)clf.fit(X_train)predictions = clf.predict(X_test) # -1 が異常、1 が正常scores = clf.score_samples(X_test) # 連続的な異常度LOF(Local Outlier Factor)
「周辺の密度に対して、自分の密度が低い点」を異常と判定。Isolation Forest が大局的、LOF が局所的なアプローチ。
LOF の実装
Python
from sklearn.neighbors import LocalOutlierFactor
clf = LocalOutlierFactor(n_neighbors=20, contamination=0.05)predictions = clf.fit_predict(X) # -1 = 異常、1 = 正常ハイパーパラメータの決め方
- contamination:データに占める異常の割合(事前知識から)
- n_estimators(IF):100 が標準、増やしても効果薄
- n_neighbors(LOF):20 が標準、データの密度パターンで調整
ふくふくの進め方
ラベルなしの異常検知を取り入れたいケースで、データ特性に応じた手法選定からハイパーパラメータ調整までご支援します。
次回予告
EP.04 は時系列の異常検知:STL 分解と Prophet。
この記事の感想を教えてください
あなたの 1 クリックで、本当にこの記事は更新されます。「もっと詳しく」「続編希望」が一定数集まった記事は、 ふくふくが 実際に内容を拡充したり続編記事を公開 します。 送信したリアクションはお使いのブラウザに記録され、再カウントされません。