Edited at

ElasticStackで機械学習Tips~Model Boundsを表示して分かりやすく


はじめに

ElasticStackに触れ始めて約3ヵ月の初心者ですが、そろそろナレッジも貯まってきたので少しずつアウトプットしてみたいと思います。

第一段として、Advent Calendar3日目の記事を書かせていただきます!


環境

この記事ではCentOS 6.8上にElasticStack 6.4.0を稼働させています。


Model Boundsってなんだ?

Model Boundsというのは、機械学習のジョブがデータの振る舞いを学習した結果、「正常な状態であればこの範囲内を推移する振る舞いをするはずだ!」と判定された範囲のことを指します(以下の画像1の中の薄い青色の帯)。

このModel Boundsから実際の値が乖離すればするほど「異常な値」と判定されることになります。

このModel Boundsが見えていると、学習モデルがデータの振る舞いをどう捉えているのかを視覚的に分かりやすいですね。


でもデフォルトでは非表示

こんな便利なModel Boundsですが、Multi Metricジョブを作成するとき、どうやらデフォルトでは表示されません。

普通に機械学習のジョブを作ると以下のように学習データの推移が見えるだけとなります。


解決策

Model Boundsを表示させるには、機械学習のジョブを作成するときにJSONを直接編集すればOKです。

analysis_configの後に以下の設定を追記してください。

  "model_plot_config": {

"enabled" : true
},

再度学習させると以下のとおりModel Bounds(薄い青色の帯)が表示されました!


注意点


  • 「EditJson」 は Advanced wizard に切り替えないと表示されません。もし Single Metric wizardMulti Metric wizardを使って機械学習ジョブを作成する場合、作成の最後に saveボタンの真上くらいにあるMove to advanced job configuration のリンクから Advanced wizardに切り替えてから操作してください。

  • 一度作成したジョブ自体をあとあからjsonをいじることはできません。既存のジョブをcloneしてからjsonをいじる必要があります。

  • 学習データのカーディナリティ2が高いとそもそも「Model Bounds表示すると大変なことになるよ?」と諭されてしまいます。
    どうやらModel Boundsのサーバリソースを多く食ってしまうため、システム的にキャップが掛かっている様です。
    試した感じ、カーディナリティが100以下なら諭されずに設定出来ました。


まとめ

機械学習における学習モデルはどうしてもブラックボックスな感じになってしまうので、それがModel Boundsで可視化できるのは非常に分かりやすいですね。

制約もありますが、使える場合は積極的に使っていく方がよいと思います。

ということで、次は whale_shark さんの「Beatsシリーズへの貢献するには」になります。お楽しみに!





  1. elastic公式より引用。https://www.elastic.co/jp/products/stack/machine-learning 



  2. カーディナリティってなんだよ?って思った方は以下の記事が分かりやすいと思います。https://qiita.com/soyanchu/items/034be19a2e3cb87b2efb