Fumiのブログ

Pythonによる異常検知入門


03-204_Pythonによる異常検知入門(大山匠)

前説

内容

  • 異常検知処理の概要
  • 異常検知の種類に応じて、よく用いられるアルゴリズム
  • 異常検知処理を業務で活用するために注意すべき点

ターゲット

  • Pythonの基本的文法がわかる
  • 統計・機械学習に触れたことがある
  • 異常検知に興味がある

講師

アジェンダ

異常とは? 異常検知アルゴリズムの紹介・Python

異常とは?

これは異常?

  • 9月中旬に最高気温が5度
  • PyCon JP 初来場
  • 会場の火災報知器が発砲

→ これだけでは、異常かどうかわからない。

様々なタイプの異常

f:id:fantm21:20180918155513p:plain

色々な異常がある。

前提

教師あり学習と教師なし学習があるが、異常検知には「教師なし学習」を使う。
普段の正常状態を学習して、正常からどれだけ外れているかを調べる。

異常検知の種類

f:id:fantm21:20180918155833p:plain

外れ値検知

  • ホテリング法
    → 平均からどれだけズレているかを見ていく。正規分布を前提にしている。
  • 近傍法
    →距離を見る。密度が違うとなかなか距離がわからなくなる。
  • LOF
    →密度を見る。
  • One-Class SVM
    →カーネルトリックを使って、高次元空間に射影し、異常なものは原点近くに集まる。非線形性も扱える。ただし、パラメータのチューニングが必要。

変化点検知

  • 複数予定モデルのあてはめ
    →予測モデルを適用し、予測からの誤差を見る。計算量が多く、オンラインに適用できない。
  • 累積和法
    → 平均から超えたところを累積して、閾値から超えたら異常とする。
  • Change Finder
    → 3つのステップで変化検知を行う。外れ値検知を利用して、変化点を見つける方法。外れ値スコアをみている。オンラインでの変化検知ができる。(changefinderというモジュールがある)

異常部位検知

  • 近傍法 (異常部位検知Ver)
    → 時系列データをウィンドウで区切って、外れ値検知の近傍法を利用する。

NNを使った異常検知

  • Autoencoder → EncoderとDecoderの2プロセスで行なっている。学習してモデルにデータを入力し、同様に再現できれば正常と判定。計算量が多いので、オンラインには厳しいかも。
    GUNやCNNを利用できる。

異常検知の実践TIPS

  • データの状態を考慮する
    状態を考慮しないと違う原因で異常となってしまう。(ON/OFF時やアイドリング時など。)
  • データのクレンジング
    季節性の除去、トレンドの除去、分布の変換
  • 判定結果のフィードバックを考慮する
    異常判定→フィードバック→検知方法に反映

本日のまとめ

  • 異常に汎用的な定義はない。データの裏側を理解しよう。
  • 異常検知には色々なアルゴリズムがある。
  • 全部Pythonで実装できる。