Time-Series Anomaly Detection Service at Microsoft
2019/10/17
Abstract
大きな会社はページビューや収益など、いろんなモニタリングをしている。
マイクロソフトでは異常検出サービスを開発し、顧客が時系列データを継続的にモニタリングすることと異常検出の手助けをしている。 この論文では、accurateでefficientかつgeneralな異常検出サービスのパイプラインとアルゴリズムについて紹介する。
パイプラインは3つのモジュールから成る
data ingestion
online compute
experimentation platform
アルゴリズムは Spectral Residual (SR) と CNN /// ベースに開発した
Introduction
工業用異常検出を作るにあたって、難しいことがある。
Lack of Labels: 同時に数百の時系列データを解析する必要がある。そのため、手動で異常かどうかをラベル付するのはたいへんすぎる。よって、教師あり学習はあんまりやりたくない。
Generalization: いろんな特徴を持った時系列データがある。それに対応するのは難しい。
https://gyazo.com/d080fb194f2bfddf39e8065ea07dcf3d
Efficiency: 解析に時間がかかってはだめ。数十億とかの時系列データを十分な精度で瞬間的に解析したい。
System Overview
https://gyazo.com/d4d8475f4d990d6ea178b8e11938e1b5
以下から成り立つ
Data Ingestion
Online Compute
Experimentation Platform
Data Ingestion
ユーザーはデータフィードを作ることでモニタータスクを登録できる。
データフィードには Connect String と Greanularity を書く。
Connect String は ストレージシステムのこと。
Granularity はどれくらいの頻度でデータをアップデートするかどうか。(ミニマム1分おき)
時系列データは influxDB と Kafka に供給される。
Compute Online
データポイントを処理するところ。
スライディングウィンドウで処理する。
Flink を使っている (spark streamみたいなやつ)。
スループット的には400万個の時系列データまでイケる。
異常が見つかったらアラートしたりする。
Experimentation Platform
異常検知のパフォーマンス評価をするところ。
新しくモデルを作るときはオフラインで実験してオンラインでA/Bテストする。
ユーザーはデータが正常・異常をラベル付できるようになっているので、精度を出すことができる。
その他 efficiency と generality も評価できる。
Azure machine learning service を使っていて、モデルがいい感じになったら K8s上にホストできる。
Methodology
異常検知とは
https://gyazo.com/18e5d50003e06c67e69972fefaa39c25
らしい。
Visual Computing の領域では Saliency Detection というのがあって、それを応用してみた。
https://gyazo.com/99861dc5f4cf92288c97bacbfca1a4d3
こういうやつ。
なぜかというと、異常というのも目を引くというのでは一緒だから。
FFTをベースとしている Spectral Residual (SR) というのがよく使われているので、我々もそれを使ってみた。
SRは教師なしでefficientでeffectiveということが知られているので良い。
さらに、SRのアウトプットに対してCNNsの層を追加してみた。
これしておくと、ラベル付けをするともっと良くなる
SR
https://gyazo.com/11878a720eb888d3e7cf690443f52a31
𝔉はフーリエ変換を表している。
Aは振幅のスペクトル
Pは対応する位相のスペクトル (なんだっけ)
Sはフーリエ変換して、Residual を計算して、逆フーリエ変換したやつ (saliency mapと呼ばれれている)
下図の下側にあるやつがSで、異常点は高くなっている(赤)
https://gyazo.com/41619d1196a46a706d5afb1873d4569a
Sを正規化してスレッショルドを決めて異常点を検出する感じ。
SR-CNN
https://gyazo.com/9fa8103cb86043fab19e6451209c2cfb
スレッショルドは適当に決めてたけど、時系列データの種類とかによっても変わってくると思われる。
なので、saliency mapをインプットとして、図みたいなCNN層をつけてみた。
こうすると、ラベル付けをするに従って賢くなる。
Experiment
データセットは KPI (AIPOS) 、Yahoo, Microsoft
メトリクスは accuracy (precision, recall, f1-score), efficiency, generality
generalityの計測は時系列データをグルーピングして、それぞれのグループでどんな感じかを調べる
SR-CNNや、他の教師ありのベースラインではデータのうちの半分をラベル付けに利用
https://gyazo.com/0ff027f3d5267bd2e39012a61fb9c34b
https://gyazo.com/c7118ed3b26705796a20088908ba1875
Conclusion
SRを時系列データの異常検知に使ったのは我々が初
良い工業用異常検知システムができた
Azure使えるようになるよ