Slide 1

Slide 1 text

時系列データの異常検知

Slide 2

Slide 2 text

自己紹介 ・大串 正矢 ・株式会社カブク ・機械学習エンジニア Twitter: @SnowGushiGit 2

Slide 3

Slide 3 text

プレゼン内容に関係する notebook goo.gl/B6GjLA 3

Slide 4

Slide 4 text

Table of Contents 1. 異常とは 2. 異常検知問題のタイプ 3. 時系列データのタイプ 4. データの前処理 a. データのクリーニング b. データの選定 5. 異常検知手法 6. 性能検証 a. 異常データの作成 b. 評価 7. 発展 4

Slide 5

Slide 5 text

異常とは 5

Slide 6

Slide 6 text

異常とは ▸ 異常 ▹ 自然現象 ▹ 外れ値 ▹ 変動 ▹ ノイズ ▹ 人間起因 ▹ 不正 ▹ 侵入 ▹ 不適切動作 6

Slide 7

Slide 7 text

異常とは ▸ 異常 ▹ システム起因 ▹ 故障 ▹ エラー 7

Slide 8

Slide 8 text

データごとの異常 ▸ 数値ベクトルデータ ▹ 偏差値 ▹ 母集団からの外れ値検知 ▸ センサー系 ▹ 工場監視センサー ▹ 故障検知 ▹ 故障予兆検知 8

Slide 9

Slide 9 text

データごとの異常 ▸ イベント系列 ▹ クレジットカード利用履歴 ▹ クレジット不正利用検知 ▸ ネットワーク系 ▹ トラフィック流量 ▹ DDos攻撃検知 9

Slide 10

Slide 10 text

データごとの異常 ▸ 非構造化データ ▹ 音声 ▹ 異音検知 ▹ 画像・動画 ▹ 異常状態・侵入者検知 ▹ テキスト ▹ ノイズ文章除去 ▹ トレンドワード検出 10

Slide 11

Slide 11 text

異常検知問題のタイプ 11

Slide 12

Slide 12 text

異常検知問題のタイプ ▸ ここからの問題の分離はデータマイニング による異常検知に基づく ▹ https://www.amazon.co.jp/dp/4320018826 12

Slide 13

Slide 13 text

外れ値検出問題 ▸ データが分布の範囲を超えているものを検 知 ▹ 個々のデータ点の分布のみ考慮 13

Slide 14

Slide 14 text

変化点検知 ▸ 単一の観測対象の時系列データ 14 変化点

Slide 15

Slide 15 text

異常状態検知 ▸ 複数の観測対象の時系列データ ▹ 別の入力によって状態が変わるケー ス ▹ 入力がないのに変わっているケース は異常状態とする 15 異常状態 連動して変化

Slide 16

Slide 16 text

3つの問題の関係性 ▸ 変化点検出&異常状態検出 ▹ 時系列データを多次元ベクトルデータに変換して外れ 値検出として扱う ▸ 外れ値検出 ▹ 個々のデータの分布のみ考慮 16

Slide 17

Slide 17 text

本発表で扱う範囲 ▸ 変化点検知 ▹ 単一の観測対象の時系列データ 17 異常値

Slide 18

Slide 18 text

時系列データのタイプ 18

Slide 19

Slide 19 text

時系列データの捉え方 ▸ 複数の時系列データ(一定の区間で区切っ たデータ) ▹ センサー系 19

Slide 20

Slide 20 text

時系列データの捉え方 ▸ 単一の時系列データ ▹ イベント系列 ▹ ネットワーク系 20

Slide 21

Slide 21 text

時系列データのタイプ ▸ 時系列データはこれから見せる2つに大きく 分類されます。 ▹ 複数の時系列データがある場合のみ ▹ 周期性 ▹ 定期的に同じことが繰り返される事象 ▹ 同期性 ▹ 複数の事象が同時に起こること 21

Slide 22

Slide 22 text

時系列データのタイプ ▸ 周期性と同期性をもつ 22

Slide 23

Slide 23 text

時系列データのタイプ ▸ 非周期性と非同期性をもつ 23

Slide 24

Slide 24 text

データのクリーニング 24

Slide 25

Slide 25 text

データのクリーニング ▸ クリーニングの必要性 ▹ 正常データ中のノイズ除去 ▹ 計測不具合で混ざった計測対象外なデータの除去 25

Slide 26

Slide 26 text

データのクリーニング ▸ クリーニングの手法 ▹ ノイズ除去 ▹ 時系列データの傾向のみを把握したい ▹ 時系列データの選定(時系列データが複数ある場合 のみ) ▹ 完全なノイズデータは除きたい 26

Slide 27

Slide 27 text

データのクリーニング ▸ ノイズ除去 ▹ スムージング ▹ 移動平均などの手法でノイズを除去して波形の 傾向のみを明らかにする 27 スムージング

Slide 28

Slide 28 text

複数の時系列データ があるケースのみ 28

Slide 29

Slide 29 text

データの選定 ▸ 波形の選定 ▹ 目で検査 ▹ 利点 ▹ 全ての時系列データに対して適用可能 ▹ 欠点 ▹ 時間がかかる ▹ 人によってばらつきが生じる 29

Slide 30

Slide 30 text

データの選定 ▸ 時系列データの選定 ▹ 正常な時系列データを1件用意しMSE(略称:Mean Squared Error)が一定以下のデータを取得 30

Slide 31

Slide 31 text

データの選定 ▸ 時系列データの選定 ▹ MSEとは 31

Slide 32

Slide 32 text

データの選定 ▸ 時系列データの選定 ▹ MSE ▹ 制約条件 ▹ 同期性がある時系列データの選定に有効 32

Slide 33

Slide 33 text

データの選定 ▸ 時系列データの選定 ▹ 時系列データを1件用意しDTW(略称:Dynamic Time Wrapping)が一定以下のデータを取得 33

Slide 34

Slide 34 text

データの選定 ▸ 時系列データの選定 ▹ DTWとは ▹ ユークリッド距離が最小 になるように各点を選 択 34 ユークリッド距離が最小の点を選択

Slide 35

Slide 35 text

データの選定 ▸ 時系列データの選定 ▹ DTW ▹ 利点 ▹ 同期性がない波形の選定に有効 ▹ 欠点 ▹ 計算時間がかかる(波形サイズをnとすると) ▹ 35

Slide 36

Slide 36 text

データの選定 ▸ 時系列データの選定 ▹ Windowごとにユークリッド距離を計算してその合 計値が一定以下のものを使用 36 windowごとにユーク リッド距離を計算

Slide 37

Slide 37 text

データの選定 ▸ 時系列データの選定 ▹ Window ▹ 利点 ▹ 波形が安定しないものでも適用可能 ▹ 欠点 ▹ Window幅の適切な設定が必要 ▹ Windowの移動幅(ストライド)の適切な設定が必要 37

Slide 38

Slide 38 text

異常検知手法 38

Slide 39

Slide 39 text

異常検知手法 39 手法 教師あり機械学習 教師なし機械学習 (異常ラベルデータが ないことを意味) ルールベース メリット 明確化できない既知 の異常に効果を発揮 異常ラベルをつけた データが不要 明確化できる特定 のケースに有効 デメリット 異常データが必要 性能検証や性能保証 が難しい 複雑なルールの組 み合わせや属人 性が上がる

Slide 40

Slide 40 text

異常検知手法 ▸ 今回はルールベースと教師なし機械学習を 紹介 ▹ 異常データが存在しないもしくは十分にない場合 が多い ▹ 未知の異常にも対応したい ▹ 組み合わせが容易 ▹ ルールベースで数を絞ってから教師なし機械 学習で検知 40

Slide 41

Slide 41 text

ルールベース 41

Slide 42

Slide 42 text

異常検知手法 ▸ 境界値 ▹ 異常を判定する境界値を設定 ▹ 利点 ▹ 運用が単純 ▹ 欠点 ▹ 波形変化などの異常は検知不可 42

Slide 43

Slide 43 text

異常検知手法 ▸ K近傍法 43 1: 新しい点 2: Window内の点と新しい 点との距離を全て計算 3: 2で計算した距離の最も 短いものK個選びその平均 値を新しい点の異常スコア とする 4: 閾値を超えているか チェック 短い距離のデータK個 平均値 (異常スコア)

Slide 44

Slide 44 text

異常検知手法 ▸ K近傍法 ▹ 距離の種類 ▹ ユークリッド距離 ▹ ばらつきがないデータに有効 ▹ マハラノビス距離 ▹ データのばらつきがある場合に有効 ▹ σはqの標準偏差 ▹ 他の距離尺度 ▹ http://wikiwiki.jp/cattail/?%CE%E0%BB%F7%C5%D9%A4%C8%B5%F7%CE%A5#fc 29bc1e 44

Slide 45

Slide 45 text

異常検知手法 ▸ K近傍法 ▹ 利点 ▹ 波形変化も検出可能 ▹ 欠点 ▹ K点の適切な決め方が難しい ▹ window幅の適切な決め方が難しい ▹ 周期性のあるデータは周期に合わせたwindow幅を設定 ▹ それ以外はバリデーションデータで決定 45

Slide 46

Slide 46 text

教師なし機械学習 46

Slide 47

Slide 47 text

異常検知手法 ▸ 教師なし機械学習 ▹ 自己回帰モデル(ARモデル:Auto Regressionモデ ル) ▹ 時間依存性について ▹ 定常性 ▹ モデリング 47

Slide 48

Slide 48 text

時間依存性について ▸ 過去の値と同じ値が出やすい ▹ 時間差(ラグと呼ぶ)を考慮した自分自身との相関 関係を自己相関関係と呼ぶ 48 時間差をつけた自分自 身との相関

Slide 49

Slide 49 text

時間依存性について ▸ ラグと自己相関関係について ▹ ラグと自己相関関係について表したものをコレグラ ムと呼ぶ。 ▹ 水色が95%信頼区間を表している(縦軸が相関、 横軸がラグのサイズ) 49

Slide 50

Slide 50 text

定常性について ▸ 定常性 ▹ 平均が一定 ▹ 分散が一定 ▹ 自己共分散がラグのみ に依存 50 緑が定常性あり 赤が定常性なし

Slide 51

Slide 51 text

定常性について ▸ 定常性 ▹ 平均が一定 ▹ 分散が一定 ▹ 自己共分散がラグのみに依存(一定のラグのサイズ で自己共分散が周期的な特徴を持っている) 51

Slide 52

Slide 52 text

定常性について ▸ モデリング ▹ データに対する仮定 ▹ 自分自身の値と自己相関関係がある ▹ 定常性を満たしており自己共分散がラグに依 存(ラグのサイズのみ考慮) ▹ 仮説 ▹ 自分自身の過去の値に対してラグを設定しそ の線形結合により次の値を予測可能では ▹ 自己回帰モデル 52

Slide 53

Slide 53 text

ARモデル ▸ 自己回帰モデル(ARモデル:Auto Regressionモデル)の定義 ▹ 自分自身の値と自己相関関係がある ▹ 定常性を満たしており自己共分散がラグに依存 ▹ 今回は簡易化のため、ホワイトノイズは考慮しない 53 平均0,分散が一定の ホワイトノイズ ラグのサイズのデータで予測

Slide 54

Slide 54 text

ARモデル ▸ 自己回帰モデル(ARモデル:Autoregressive モデル) ▹ 今回は自己回帰モデルのみ ▹ 発展系 ▹ ARMA(自己回帰移動平均モデル) ▹ ARIMA(自己回帰和分移動平均モデル) ▹ SARIMA(季節自己回帰和分移動平均モデル) ▹ 別のモデル ▹ 状態空間モデル ▹ ローカルレベルモデル ▹ LSTM, GRU 54

Slide 55

Slide 55 text

ARモデル ▸ 線形結合で過去の値を用いて次の出力値 を予測する ▹ 予測する一つ前の過去の値から線形結合する 55 Window幅: r 予測

Slide 56

Slide 56 text

ARモデル ▸ 自身の過去の値を用いて予測 56 Window幅: r Window幅: r Windowを1ずらす 終端まで繰り返す 予測 予測

Slide 57

Slide 57 text

ARモデル ▸ パラメータαの導出 ▹ 最小2乗法 ▹ 定義したモデル式の予測値と実測値が最小に なるようにモデルのパラメータを設定 ▹ 最尤推定 ▹ 確率分布を仮定し、実測値をもっとも導出する ような確率分布のパラメータを設定 ▹ 最小2乗法は最尤推定法で分布をガウス分布と仮 定した場合は等価 ▹ https://mathwords.net/saisyonijoho 57

Slide 58

Slide 58 text

ARモデル ▸ 最尤推定 ▹ データは正規分布から得られると仮定 ▹ 定常性(再掲) ▹ 平均、分散は一定のため時間に依存しない ▹ ラグt+1の値はラグtの値の線形結合で導出できる (再掲) ▹ 平均が自己回帰モデルと等しい正規分布は下記 58

Slide 59

Slide 59 text

ARモデル ▸ 対数にして計算を楽にする 59 ▸ 1つ先だけでなくn個先まで考慮

Slide 60

Slide 60 text

ARモデル ▸ 誤差が最小になるように先ほどの式を   で微分し0と等価として表す 60

Slide 61

Slide 61 text

ARモデル ▸ 展開すると下記のような連立方程式に書き 換えられる(ユールウォーカー方程式) ▹ 連立方程式を解くと導出可能 ▹ 自己相関関数がラグに依存することが前提 61

Slide 62

Slide 62 text

ARモデル ▸ Windowの幅rの決定方法 ▹ AIC(赤池情報量基準) ▹ 下記の数式の値が最小になるようにrを設定す る ▹ AICにより導出される分散σはrが大きいほど減 少するがrが大きいほどモデルの複雑性が上が るため、罰則項として追加 62

Slide 63

Slide 63 text

ARモデル ▸ データを表現できているか性能検証 ▹ MSE ▹ 実測値と予測値の差が少ないことを確認 ▹ 決定係数 ▹ データのばらつき度合いも考慮して評価 ▹ 平均から離れた値が多いと小さくなる 63 : 実測値 : 予測値 : 実測値の平均 : 実測値 : 予測値

Slide 64

Slide 64 text

ARモデル ▸ 異常スコアを計算し閾値を超えているか チェック 64 ARモデルなどで予測 差分を異常値として利用 (分散でスケーリングして検証データと学習 データのスケールを揃える) 学習データの異常度の分散 実測値 予測値 分散は時刻tに依存しない(定常性が成り立 つデータと仮定)

Slide 65

Slide 65 text

異常検知手法 ▸ 教師なし機械学習 ▹ 利点 ▹ 波形変化も検知可能かつ、理想的なwindow サイズはモデルから導出可能 ▹ 欠点 ▹ モデルの定期更新が必須のため運用が複雑に なる 65

Slide 66

Slide 66 text

性能検証 66

Slide 67

Slide 67 text

性能検証 ▸ 性能検証に必要なもの ▹ 異常データ ▹ ない場合は作成が必要 ▹ 評価 ▹ 閾値決定と性能検証に使用 ▹ 時系列データの閾値 ▹ 時系列データの場合は複数パターン存在 67

Slide 68

Slide 68 text

異常データの作成 68

Slide 69

Slide 69 text

異常データの作成 ▸ 異常データの作成が必要な理由 ▹ 異常データがないケース ▹ 検知可能な異常を明確化するケース ▸ 注意点 ▹ 異常データの作成はあくまで検証程度。実環境で は予想外の異常が発生するため実データを使える 環境では実データで検証すべき 69

Slide 70

Slide 70 text

異常データの作成 ▸ 異常データの作成の注意点 ▹ 観測する時系列データの知識がないと異常とノイ ズまたは観測される正常な時系列データの性質の 区別が出来ない ▹ 先に観測する時系列データの知識を取得する 70

Slide 71

Slide 71 text

異常データの作成 ▸ 異常データの種類 ▹ 全ての波形タイプに共通 ▹ スパイク型 ▹ 波形変化形 ▹ レベルシフト ▹ 波形タイプの変化 ▹ 同期性 -> 非同期 71

Slide 72

Slide 72 text

異常データの種類 ▸ スパイク型 72 スパイクのように異常が発生

Slide 73

Slide 73 text

異常データの種類 ▸ 波形変化形 73 波形が変化

Slide 74

Slide 74 text

異常データの種類 ▸ レベルシフト 74 レベルシフト

Slide 75

Slide 75 text

異常データの種類 ▸ 同期性 -> 非同期 75 開始位置がずれている

Slide 76

Slide 76 text

評価 76

Slide 77

Slide 77 text

評価 ▸ 前提 ▹ 正常データの異常スコアもしくは距離は小さいはず、 異常データの異常スコアもしくは距離は大きいはず ▹ 横軸が異常スコア ▹ 縦軸が密度 ▹ 赤が正常な分布 ▹ 青が異常な分布 77

Slide 78

Slide 78 text

評価指標 ▸ 正常データを正常とした割合と異常データを 異常とした割合 78 Positive Negative Positive (Predict) True Positive (TP: 略称) False Positive (FP: 略称) Negative (Predict) False Negative (FN: 略称) True Negative (TN: 略称) 正常データの異常度の正 規分布 異常データの異常度の正 規分布 TP 閾値 FN FP TN TN と FN TPも含まれる 異常 正常

Slide 79

Slide 79 text

評価指標 ▸ 下記のようなケースに定義した場合 ▹ Positive ▹ 健康 ▹ Negative ▹ 病気 ▸ 閾値の決め方 ▹ False Positiveを減らす ▹ 医者が限られているので治療する人は限定 ▹ False Negativeを減らす ▹ 軽い症状でも病気と診断して治療 79

Slide 80

Slide 80 text

評価指標 ▸ 異常データの数が少ないのでTrue Positive とTrue Negativeだけでは不十分 ▹ ROC AUC(Receiver operating characteristic area under the curve): ▹ 異常データは少ないので分布で評価 80

Slide 81

Slide 81 text

評価指標 ▸ 上の分布が分かれており、赤の分布が左側 にあると下の図の面積が大きくなる ▹ 赤が正常データの分布 ▹ 青が正常データの分布 81

Slide 82

Slide 82 text

時系列データの閾値 82

Slide 83

Slide 83 text

時系列データの閾値 ▸ 単一の閾値(False Positive許容) ▹ 利点 ▹ 単純なので運用が楽 ▹ 欠点 ▹ 異常値が各点において異なると検知不可能 83

Slide 84

Slide 84 text

時系列データの閾値 ▸ 各点に設定(False Negative許容) ▹ 利点 ▹ 細かい設定が可能で検出率増加 ▹ 欠点 ▹ ノイズや波形変化に弱いので誤検出が増加の 可能性あり 84

Slide 85

Slide 85 text

発展 85

Slide 86

Slide 86 text

発展 ▸ より表現力の高いモデルを扱いたい ▹ 深層学習: LSTM、GRUなど ▸ 複数の時系列を扱いたい ▹ Multivariate LSTM, VARXなど ▸ データを変換して扱う ▹ スペクトログラム, Wavelet変換 ▸ 状態推定 ▹ HMMによる時系列状態推定 86

Slide 87

Slide 87 text

“We are hiring!! https://www.wantedly.com/projects/154408 機械学習エンジニア https://www.kabuku.co.jp/jobs/machine-learning-engineer フロントエンドエンジニア https://www.kabuku.co.jp/jobs/front-end-developer サーバーサイドエンジニア https://www.kabuku.co.jp/jobs/backend-developer エンジニア以外も https://www.wantedly.com/companies/kabuku

Slide 88

Slide 88 text

88 THANKS! Twitter @SnowGushiGit

Slide 89

Slide 89 text

参考 89

Slide 90

Slide 90 text

References 90 ▸ Deep Learning Lab 異常検知入門 ▹ https://www.slideshare.net/shoheihido/deep-learning-lab-88299 985/ ▸ How DTW (Dynamic Time Warping) algorithm works ▹ https://www.youtube.com/watch?v=_K1OsqCicBY ▸ 【統計学】ROC曲線とは何か、アニメーションで理解する。 ▹ https://qiita.com/kenmatsu4/items/550b38f4fa31e9af6f4f#3-roc %E6%9B%B2%E7%B7%9A%E3%81%AE%E5%BD%A2%E7 %8A%B6%E3%81%AE%E8%80%83%E5%AF%9F ▸ 定常性についてのまとめ ▹ https://dev.classmethod.jp/statistics/stationarity-reading/ ▸ 異常検知の世界へようこそ ▹ https://research.preferred.jp/2013/01/outlier/

Slide 91

Slide 91 text

References 91 ▸ Stationary process ▹ https://en.wikipedia.org/wiki/Stationary_process#Differencing ▸ Rで計量時系列分析:AR, MA, ARMA, ARIMAモデル, 予測 ▹ https://tjo.hatenablog.com/entry/2013/07/12/184704 ▸ scikit-learn で回帰モデルの結果を評価する ▹ https://pythondatascience.plavox.info/scikit-learn/%E5%9B%9E %E5%B8%B0%E3%83%A2%E3%83%87%E3%83%AB%E3% 81%AE%E8%A9%95%E4%BE%A1 ▸ PRML 1.2.4-1.4 ▹ https://qiita.com/mochio/items/5cf3ad0b76729ca16346#%E3%8 2%AC%E3%82%A6%E3%82%B9%E5%88%86%E5%B8%83 %E3%81%AE%E6%9C%9F%E5%BE%85%E5%80%A4%E5% B9%B3%E5%9D%87%E5%80%A4

Slide 92

Slide 92 text

References 92 ▸ ARモデルのパラメータ最尤推定を思い出す ▹ http://nekopuni.holy.jp/2014/01/rar%E3%83%A2%E3%83%87% E3%83%AB%E3%81%AE%E3%83%91%E3%83%A9%E3%83 %A1%E3%83%BC%E3%82%BF%E6%9C%80%E5%B0%A4% E6%8E%A8%E5%AE%9A%E3%82%92%E6%80%9D%E3%81 %84%E5%87%BA%E3%81%99/ ▸ 最小二乗法と最尤法の関係 ▹ https://mathwords.net/saisyonijoho ▸ A Complete Tutorial on Time Series Modeling in R ▹ https://www.analyticsvidhya.com/blog/2015/12/complete-tutorial -time-series-modeling/ ▸ 入門 機械学習による異常検知―Rによる実践ガイド ▸ 時系列解析入門

Slide 93

Slide 93 text

References 93 ▸ 異常検知と変化検知 (機械学習プロフェッショナルシリーズ) ▸ 現場ですぐ使える時系列データ分析~データサイエンティストのための基 礎知識~