5月4日にこんな記事が出ました。
Elastic StackにMachine Learningが登場
卒論で異常検知をやったのもあり、興味があったので、調べられるところまで調べてみました。本当は手法まで明らかにできると良かったんですが、イマイチ分からなかったので「調べたところまで」です。余裕があったら後日もう少し深掘りして追記したいです。
参考に出来そうなのは以下の 3 つでした。
- 発表スライド & 動画
- 論文
- ソースコード
発表スライド & 動画
調べたら、中の人による解説スライドがありました。
Machine Learning and Statistical Methods for Time Series Analysis
実際の発表の動画もありました。メアドを登録すると見られます。スライドだといまいちよく分からない式が口頭で説明されていました。
論文
上のスライドに載っている 2 人(Steve Dodson & Tom Veasey)の名前で調べたら、それらしい論文が 1 つだけ出てきました。
Anomaly Detection in Application Performance Monitoring Data
図を見た感じ、上のスライドの内容と似た図が結構出ているので、この論文を読めばある程度何をやっているか分かるかもしれません。
ソースコード
公式 GitHub でリポジトリを探しましたが、ありませんでした。 Forum を見ると、「オープンソースにはしてません」とのこと。
I want to know if the code for performing the detection is open source by any chance
No. It's not.
オープンソースにはなってないとはいえ、 X-pack(今回の異常検知拡張が入っているプラグイン)をインストールすれば .jar
ファイルが手に入るので、デコンパイルしてそれらしい単語 (anomal, detect, probability 等) を検索してみましたが、異常検知のロジックが書いてあるところには辿りつけませんでした。 org/elasticsearch/xpack/ml
以下にありそうではあるんですが、探し方が悪かったのかもしれません。
手法について
以下蛇足です。
ざっくりと発表スライドと動画を見ただけですが、学習では normal や log-normal などの分布からどの分布が一番よくヒストグラムに当てはまりそうかモデル選択してパラメータも推定し、推論では学習させた分布で確率が低いところを異常とみなす感じでした。季節性の時系列に対しては、学習時にクラスタも学習させて、同じクラスタに属しそうな時刻のデータ点だけを使って分布に当てはめるようなことをやっているみたいです。あまり良く読んでいないので、おかしかったらコメントなり編集 PR を送っていただけると助かります。
もしこれからもっと詳しく調べるなら、発表スライドと動画を見て概要を掴んでから論文を読むのが良いと思います。ソースコードを読もうとしたのは無駄足でした。