見出し画像

[論文紹介コード付き] Deep Isolation Forest for Anomaly Detection (2023)

著者:Hongzuo Xu , Guansong Pang , Yijie Wang and Yongjun Wang
機関:National University of Defense Technology, Singapore Management University Singapore
会議:TKDE
リンク:https://arxiv.org/pdf/2206.06602.pdf

アブストラクト

まずは英文を翻訳にかけた結果を下記に示します.

Isolation Forest (iForest)は、近年、さまざまなベンチマークにおける一般的な有効性と優れた拡張性から、おそらく最も人気のある異常検知手法として台頭してきました。しかしながら、iForestの線形軸平行分離法では、(i) 高次元または非線形分離可能なデータ空間で分離が難しい異常を検出できない、(ii) 人工的な領域に予期せぬ低い異常スコアを割り当てるといった有名な手法のバイアスが生じがちです。これらの問題により、高い偽陰性誤りが発生します。いくつかのiForest拡張手法が導入されていますが、本質的にはまだ浅い線形データ分割を採用しているため、真の異常を分離する能力が制限されています。そこで本論文では、ディープIsolation Forestを提案します。ランダムに初期化された neural networksを用いて、元のデータをランダム表現アンサンブルに写像する新しい表現スキームを導入しています。その後、このランダム表現に対して軸平行のランダムな分割を適用してデータ分割を行います。この表現スキームにより、元のデータ空間における分割の自由度が高まり(変動サイズの部分空間上での非線形分割に相当)、ランダム表現とランダム分割ベース分離の間で独自の相乗効果が期待できます。広範なデータセットを用いた実験により、提案手法がIsolation-ベース手法やディープ異常検知手法に対して大幅な性能向上をもたらすことを示しています。また、iForestの望ましい拡張性も引き継いでいます。

ポイントとなりそうなところを太字でハイライトしてみました.本研究が対処する課題は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

この記事が気に入ったらサポートをしてみませんか?