Upgrade to Pro — share decks privately, control downloads, hide ads and more …

ディープじゃない異常検知の話

 ディープじゃない異常検知の話

異常検知とは?
時系列ではないデータの異常検知
異常検知の性能評価
時系列データの異常検知

masa-ita

June 01, 2019
Tweet

More Decks by masa-ita

Other Decks in Technology

Transcript

  1. ⾃⼰紹介 š 板垣 正敏(いたがき まさとし) š 1955年新潟県村上市⽣まれ š 株式会社BSNアイネット 技術顧問

    š 中⼩企業診断⼠ š NPO法⼈ 新潟オープンソース協会 理事 š ⽇本Rubyの会 会員 š Python機械学習勉強会 in 新潟 世話⼈
  2. はじめに š 今⽇のネタ本はこれです š 「⼊⾨ 機械学習による異常検知―Rに よる実践ガイド」井⼿剛著 コロナ社 š http://www.coronasha.co.jp/np/isbn/97

    84339024913/ š 異常検知に関する⽇本語の書籍はい くつかありますが、コード例を⽰し た本ということで参考にしました
  3. 確率分布を基にした異常検知 š 「距離」を基にした異常検知でも、実はデータの分布についての仮定を⾏っていた š 「正常なデータ」はかたまっているはず š 分布に関する仮定がないと閾値の設定が難しい š 分布にはいろいろあり、データの性質に基づいた分布を仮定するのが正しいやり⽅ š

    ただし、「⼤数の法則」があるため、「正規分布」を仮定することが多い š 「異常」とは「めったに起こらないことが起きた」という定義 š 正規分布での「正常なデータのかたまりからの距離」すなわち「異常度」は、次の式で 定義される 1 = 1 − 2 2 . ′ は新たな観測値、 2 は標本平均、 2 は標本標準偏差
  4. クラスタリングによる⽅法 š データをクラスタリングによって「塊(クラスター)の集合」ととらえ、どの 塊にも属さないデータを異常と考える⼿法 š クラスタリングの⼿法として次のようなものが使われる š k-means法 š クラスターの中⼼からの距離を使って、あるデータ点がどのクラスターに属するかを決

    め、中⼼を更新しながら繰り返す⼿法 š 混合正規分布モデル š クラスターを正規分布と仮定して、データ点を最も所属する確率の⾼いクラスターに分 類していく⼿法 š scikit-learnによる実装例 šhttps://github.com/masa-ita/anomaly-detection-with- python/blob/master/05_gaussian_mixture.ipynb
  5. 異常検知の性能評価 š 適合率(Precision) = AN ANOPQ š 再現率(Recall) = AQ

    AQOPU š 調和平均である F値 = .×適合率×再現率 適合率O 再現率 = .AQ .AQOPUOPQ を使って評価することが多い (井⼿さんの書籍の定義は⼀般的な定義と異なっている︖)
  6. 特異スペクトル変換法のイメージ š出典 特異スペクトル変換法による時系 列データの異常検知(Python) - Fire Engine https://blog.tsurubee.tech/entry/20 17/10/11/221255 šNumPyによる実装例

    šhttps://github.com/masa- ita/anomaly-detection-with- python/blob/master/11_sst_1.ipyn b šhttps://github.com/masa- ita/anomaly-detection-with- python/blob/master/12_sst_2.i pynb
  7. ⾃⼰回帰モデルによる異常検知 š 時系列を⾃⼰回帰モデルとしてフィッティングし、予測値と観測値の間 の距離を異常度とする š 次数 r の⾃⼰回帰モデル X =

    & '() Y X>' X>' + \ š 次数 r の決定には、AIC(⾚池情報量基準)が使われることが多い š statsmodelsによる実装例 šhttps://github.com/masa-ita/anomaly-detection-with- python/blob/master/13_ar_model.ipynb
  8. ⾃⼰回帰型モデルのバリエーション š AR(Autoregressive model︓⾃⼰回帰モデル) š 基本となる⾃⼰回帰モデル š ARMA(Autoregressive and Moving

    Average model︓⾃⼰回帰移動平均モデル) š ARモデルに過去の変動の影響を加えたモデル š ARIMA(Autoregressive, Integrated and Moving Average model︓⾃⼰回帰和分移動平均モ デル) š ARMAモデルに和分要素(トレンド)を加えた⾮定常モデル š SARIMA(Seasonal, Autoregressive, Integrated and Moving Average model︓季節変動⾃⼰ 回帰和分移動平均モデル) š ARIMAモデルに季節変動要素を加えたモデル
  9. 状態空間モデルによる異常検知 š 観測対象が持つ内部状態 z と観測で得られる観測値 をモデル化したも ので、⼀時点前の内部状態 z ^>) から現時点の内部状態

    X を得るため の関数 と、内部状態 X から観測値 X を得る関数 を想定し、そ れぞれにノイズがあると考える X>. X>) X XO) XO. X>. X>) X XO) XO.
  10. 状態空間モデルによる異常検知 š 状態空間モデルを定義する関数が線形関数であるものを線形状態空 間モデルと呼ぶ X ≈ X X ≈ X>)

    ≈ は確率的ノイズを別にすれば等しいという意味 š 線形状態空間モデルのパラメータ推定法 š部分空間同定法 šカルマンフィルタを⽤いた⽅法
  11. よくある疑問 š データの前処理はどうする︖ š 中央化(平均値を引いてゼロに) š 標準化(中央化に加えて分散を1に) š 対数変換(⽐率などのデータを扱いやすく) š

    Box-Cox変換(スパイクなどの影響を軽減) = e − 1 š 分類モデルで異常検知はできないか︖ š 異常サンプルは正常サンプルに⽐較して⾮常に少ないことが多いため、「⾮均衡データ」の取扱いをする 必要がある š ダウンサンプリング、アップサンプリング、重み付き損失(尤度)関数等
  12. 参考ページ š 教師なし学習による異常値検知: マハラノビス距離 (実装編) š https://qiita.com/shopetan/items/30f6e0932485c976a946 š Robust covariance

    estimation and Mahalanobis distances relevance š https://scikit-learn.org/stable/auto_examples/covariance/plot_mahalanobis_distances.html š Pythonとカーネル密度推定(KDE)について調べたまとめ š https://vaaaaaanquish.hatenablog.com/entry/2017/10/29/181949 š Kernel Density Estimation in Python š https://jakevdp.github.io/blog/2013/12/01/kernel-density-estimation/ š Rで計量時系列分析︓AR, MA, ARMA, ARIMAモデル, 予測 š https://tjo.hatenablog.com/entry/2013/07/12/184704
  13. 参考ページ š Pythonによる時系列データの異常検知 š https://blog.brains-tech.co.jp/entry/2017/10/17/170140 š Time Series Analysis by

    State Space Methods š https://www.statsmodels.org/stable/statespace.html#module- statsmodels.tsa.statespace š Understanding Kalman Filters š https://www.youtube.com/playlist?list=PLn8PRpmsu08pzi6EMiYnR-076Mh-q3tWr š PyOD š https://github.com/yzhao062/pyod