[論文紹介コード付き] Deep Isolation Forest for Anomaly Detection (2023)
アブストラクト
まずは英文を翻訳にかけた結果を下記に示します.
ポイントとなりそうなところを太字でハイライトしてみました.本研究が対処する課題は2つあり,(i) iForestの非線形なデータ空間で異常を検出できない,(ii) 人工的な領域(おそらく人工的に生成した偽データのこと)で異常を異常と判断する能力が低いことが挙げられています.本質的な課題として,iForestが線形データ分割を採用している点を挙げ,この課題に対処するために,neural networkを用いて,元のデータを写像する新しい手法を提案しています.著者らは,これを「ランダム表現アンサンブルに写像」といっているので,複数のモデルを用いたアンサンブル学習になっているのではないかと推測しました.まとめると,本研究は既存のIsolationベースの手法の良さを引き継ぎつつ,非線形データ空間に対応できるように深層学習を取り入れた手法であることがわかりました.
コード
では本手法(以下DIFとします)を動かしてみましょう.こちらもiForestと同様に,pyodというライブラリで動かすことができます.データは下記を使います.
import pandas as pd
from pyod.models.dif import DIF
from sklearn.metrics import classification_report
# クレジットカード取引データを読み込む
data = pd.read_csv('/kaggle/Credit Card Fraud Detection/creditcard.csv')
# 説明変数と目的変数に分ける
X = data.drop('Class', axis=1) # 説明変数
y = data['Class'] # 目的変数 (0: 正常, 1: 異常)
# データを訓練用とテスト用に分割する
from sklearn.model_selection import train_test_split
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)
# モデルを初期化する
dif = DIF(random_state=42)
# モデルを訓練する
dif.fit(X_train)
# テストデータで予測を行う
y_pred = dif.predict(X_test)
# 評価指標を表示する
print(classification_report(y_test, y_pred))
ちなみに結果は以下です.私が過去に書いたnoteのiForestがほぼ0だったのに対し,こちらだとf1-scoreで0.42まで出ていますね.最新の手法だけあってかなり性能が高いようです.
precision recall f1-score support
0 1.00 1.00 1.00 56864
1 0.43 0.42 0.42 98
accuracy 1.00 56962
macro avg 0.72 0.71 0.71 56962
weighted avg 1.00 1.00 1.00 56962
一点,本コードを動かす際には注意点がありまして,事前にpytorchをインストールしておく必要があります.参考までにcpu版のpytorchをインストールするための一行を記載します.
!pip3 install torch torchvision torchaudio --index-url https://download.pytorch.org/whl/cpu
この記事が気に入ったらサポートをしてみませんか?