Skip to content

Instantly share code, notes, and snippets.

@hdknr
Last active February 16, 2025 06:53
Show Gist options
  • Save hdknr/7ef13b17cca5ce1e6c3fc1a55ce91d68 to your computer and use it in GitHub Desktop.
Save hdknr/7ef13b17cca5ce1e6c3fc1a55ce91d68 to your computer and use it in GitHub Desktop.
scikit-learn: 異常検知

異常検知

sklearnを用いた異常検知のサンプルコード

sklearn(サイキットラーン)は、Pythonで機械学習を行うための強力なライブラリです。異常検知も、sklearnの様々なアルゴリズムを用いて行うことができます。

異常検知の手法選択

異常検知の手法は、データの種類や異常パターンによって異なります。代表的な手法としては、以下のものが挙げられます。

  • One-Class SVM: データの境界線を学習し、その境界から離れた点を異常と判定します。
  • Isolation Forest: データ点を孤立させるような決定木を複数作成し、異常度をスコア化します。
  • Local Outlier Factor (LOF): データ点の近傍の密度に基づいて異常度を計算します。

サンプルコード(Isolation Forest)

ここでは、Isolation Forestを用いた異常検知のサンプルコードをPythonで記述します。

from sklearn.ensemble import IsolationForest
import numpy as np

# サンプルデータ生成
np.random.seed(42)
X = np.random.randn(100, 2)  # 正常データ
X = np.r_[X, np.random.randn(20, 2) + [3, 3]]  # 異常データ

# Isolation Forestモデルの作成
clf = IsolationForest(contamination=0.2)  # 異常データの割合を指定
clf.fit(X)

# 異常度の予測
y_pred = clf.predict(X)

# 異常データの抽出
anomalies = X[y_pred == -1]

# 結果の表示
print("異常データ:")
print(anomalies)

コード解説

  1. データの生成: 正常なデータと異常なデータを生成します。
  2. モデルの作成: IsolationForestのインスタンスを作成し、contaminationパラメータで異常データの割合を指定します。
  3. モデルの学習: fitメソッドでモデルを学習させます。
  4. 異常度の予測: predictメソッドで各データの異常度を予測します。
  5. 異常データの抽出: 予測結果が-1のデータを異常データとして抽出します。

その他の注意点

  • contaminationパラメータ: 異常データの割合を事前にある程度把握している場合に、このパラメータを指定することで、より正確な異常検知が可能になります。
  • 特徴量のスケーリング: 特徴量のスケールが異なる場合、標準化や正規化を行うことで、モデルの性能が向上する場合があります。
  • ハイパーパラメータのチューニング: Isolation Forestには、他にも様々なハイパーパラメータが存在します。GridSearchCVなどを用いて、最適なパラメータを探索することができます。

より詳細な情報

  • sklearnの公式ドキュメント: IsolationForestの詳しい説明や他の異常検知アルゴリズムについては、sklearnの公式ドキュメントを参照してください。
  • Qiitaなどの技術ブログ: 多くの技術ブログで、sklearnを用いた異常検知の具体的な事例や解説が紹介されています。

応用

異常検知は、不正検出、故障検知、品質管理など、様々な分野で活用されています。

  • 不正検出: クレジットカードの不正利用やネットワーク攻撃の検出
  • 故障検知: 機械の異常な振動やセンサーデータの異常値検出
  • 品質管理: 製品製造過程における不良品の検出

ご自身のデータに合わせて、このサンプルコードをカスタマイズし、異常検知を行ってみてください。

さらに詳しく知りたいことや、別の異常検知手法について知りたい場合は、お気軽にご質問ください。

以下に、他の異常検知手法の例をいくつか挙げます。

  • One-Class SVM:

    from sklearn.svm import OneClassSVM
    clf = OneClassSVM(nu=0.1, kernel='rbf')
  • Local Outlier Factor:

    from sklearn.neighbors import LocalOutlierFactor
    clf = LocalOutlierFactor(n_neighbors=20, contamination=0.1)

これらの手法も、Isolation Forestと同様にsklearnで簡単に実装できます。

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment