Pythonによる異常検知入門
前説
内容
- 異常検知処理の概要
- 異常検知の種類に応じて、よく用いられるアルゴリズム
- 異常検知処理を業務で活用するために注意すべき点
ターゲット
- Pythonの基本的文法がわかる
- 統計・機械学習に触れたことがある
- 異常検知に興味がある
講師
大山 匠先生の授業・プロフィール - Schoo(スクー) https://t.co/Sg0vr4z4F8
— FUMI@PythonLifeなう (@FumiProgrammer) 2018年9月18日
『Pythonによる異常検知入門』の登壇者の方。#pyconjp_3
アジェンダ
異常とは? 異常検知アルゴリズムの紹介・Python
異常とは?
これは異常?
- 9月中旬に最高気温が5度
- PyCon JP 初来場
- 会場の火災報知器が発砲
→ これだけでは、異常かどうかわからない。
様々なタイプの異常
色々な異常がある。
前提
教師あり学習と教師なし学習があるが、異常検知には「教師なし学習」を使う。
普段の正常状態を学習して、正常からどれだけ外れているかを調べる。
異常検知の種類
外れ値検知
- ホテリング法
→ 平均からどれだけズレているかを見ていく。正規分布を前提にしている。 - 近傍法
→距離を見る。密度が違うとなかなか距離がわからなくなる。 - LOF
→密度を見る。 - One-Class SVM
→カーネルトリックを使って、高次元空間に射影し、異常なものは原点近くに集まる。非線形性も扱える。ただし、パラメータのチューニングが必要。
変化点検知
- 複数予定モデルのあてはめ
→予測モデルを適用し、予測からの誤差を見る。計算量が多く、オンラインに適用できない。 - 累積和法
→ 平均から超えたところを累積して、閾値から超えたら異常とする。 - Change Finder
→ 3つのステップで変化検知を行う。外れ値検知を利用して、変化点を見つける方法。外れ値スコアをみている。オンラインでの変化検知ができる。(changefinderというモジュールがある)
異常部位検知
- 近傍法 (異常部位検知Ver)
→ 時系列データをウィンドウで区切って、外れ値検知の近傍法を利用する。
NNを使った異常検知
- Autoencoder
→ EncoderとDecoderの2プロセスで行なっている。学習してモデルにデータを入力し、同様に再現できれば正常と判定。計算量が多いので、オンラインには厳しいかも。
GUNやCNNを利用できる。
異常検知の実践TIPS
- データの状態を考慮する
状態を考慮しないと違う原因で異常となってしまう。(ON/OFF時やアイドリング時など。) - データのクレンジング
季節性の除去、トレンドの除去、分布の変換 - 判定結果のフィードバックを考慮する
異常判定→フィードバック→検知方法に反映
本日のまとめ
- 異常に汎用的な定義はない。データの裏側を理解しよう。
- 異常検知には色々なアルゴリズムがある。
- 全部Pythonで実装できる。