[論文紹介コード付き] Isolation Forest (2008)
アブストラクト
まずは論文のアブストラクトを日本語に訳します.
理解
Isolation Forestは2008年に提案されたもので,技術解説が多く存在します.そのため,ここからは既存の解説ブログをベースに理解していきます.
上記により,iForestは異常検出に特化したモデルであり,「何が正常か」を定義せずに異常を特定していくのが特徴のようです.これは,論文のアブストラクトに「正常点のプロファイリングではなく、明示的に異常を分離する」と書いてあるとおりで,検証の始まりである木の根本から葉までの距離を元に異常値かどうかを見つけ出しているようです.
コード
では試しにiForestをクレジットカードの不正利用検出に使ってみましょう.iForestはpyodというライブラリに組み込まれているので,簡単に試すことができます.下記がそのコードです.
import pandas as pd
from pyod.models.iforest import IsolationForest
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)
# IsolationForestモデルを初期化する
iforest = IsolationForest(random_state=42)
# モデルを訓練する
iforest.fit(X_train)
# テストデータで予測を行う
y_pred = iforest.predict(X_test)
# 評価指標を表示する
print(classification_report(y_test, y_pred))
クレジットカードの取引データは下記からダウンロードすることができます.
ちなみにスコアは以下のようになりました.高い精度とは言い難いですね.
precision recall f1-score support
-1 0.00 0.00 0.00 0
0 0.00 0.00 0.00 56864
1 0.00 0.17 0.00 98
accuracy 0.00 56962
macro avg 0.00 0.06 0.00 56962
weighted avg 0.00 0.00 0.00 56962
この記事が気に入ったらサポートをしてみませんか?