「Elastic Machine Learning」は、時系列データに教師なし機械学習を行うことで、閾値監視では気付けないような「いつもと違う」データを異常として検知可能にするツールです。前回の基礎編では、異常値の検知、原因の分析、将来予測など等の基本的な操作方法を紹介しました。

Elastic Machine Learningは2017年7月に正式リリースされましたが、バージョンアップとともに様々な新機能が追加されています。今回は、Elastic Machine Learningの機能に大きな変化があったElastic Stack 7.2.0以降で追加された新機能を中心に紹介します(本稿はElastic Stack 7.4.2リリース時に作成しており、本稿執筆の時点でベータ版として公開されている機能が含まれるため、利用の際は注意してください)。

○Transform:ピボットテーブル形式にデータを変換

Elastic Machine Learningでは、前回紹介した「いつもと違う」値の検知だけでなく、外れ値の検知もできるようになりました。この外れ値検知に向けたデータ変換を、「Transform」機能で行うことができます。Transformでは、ピボットテーブルを作成し、データを見やすく、分析しやすいようにまとめます。

今回は、例としてEコマースの購買ログを対象にします。このログには購入者の名前、ID、注文日、品物、量、金額などが含まれています。このログを名前を軸として、注文した回数、注文した品数、支払い金額をまとめ、新たに作成したピボットテーブルをElasticsearchに格納します(図1)。機械学習をしない場合でも、このようにデータの変換をすることで分析に役立つ形でデータの保管ができます。

図1:Eコマースのログをピボットテーブルに変換

○Data Frame Analytics:外れ値検知

続いて、Transformで作成したピボットテーブルを使って、「Data Frame Analytics」機能で外れ値検知を行います。難しい設定は不要で、外れ値検知をする対象のデータとして先ほど作成したピボットテーブルを指定し、アウトプット先として外れ値検知の結果を格納する場所の名前を指定するだけで実行できます。

図2:外れ値検知の結果の表示

機械学習の結果、それぞれの値(注文した回数、注文した品数、支払い金額)がまわりの値とどの程度異なるのかが「outlier score」として表示されます。各セルで青くなっているものが外れ値と判断したデータになっており、色が濃いほどこのデータが外れ値として判断するのに強く影響したことを表しています。(図2の「ml.anomaly_score」列に0から1の値が表示され、1に近いほど外れ値である可能性が高い)。

ここで気になるのは、これらの機械学習の結果が、どれだけ正しいのかということです。そこで、この外れ値検知の結果を評価する方法も提供されています。

外れ値の真偽を判断する教師データを別途準備する必要がありますが、その教師データとoutlier scoreを比較して、Confusion Matrix(混合行列)を生成し、Precision(適合率)や Recall(検出率)等を計算してくれます。なお、図3で使った教師データは乱数で作成したため、結果は参考値となります。本操作ではCLIも含まれており、結果は文字列で返ってくるため、よりわかりやすい可視化のためにはさらに数ステップ必要です。

図3:外れ値検知の評価

○Elastic Machine Learningの結果の活用

最後に、分析結果の活用に触れます。Elastic Machine Learningそのものの解説からは少し離れますが、機械学習で発見した異常や外れ値を、その次のアクションにつなげることも重要だからです。

例えば、機器に異常があった場合、その異常に対処するとともに、原因も探す必要があります。非常に古典的なやり方であれば、各機器からログを抽出し、そのログの時刻を照らし合わせながら時系列に事象をまとめ、原因を特定するかもしれません。

それが図4のように、例えばメモリの使用率のグラフ上に、異常が発生した時刻が表示されているだけでも、原因特定の助けになります。もちろん、ログそのものを見たい場合は、tail -fを実行した時のように各機器のログを見ることも可能です。事前の設定次第では、監視対象の機器へログインすることなく、Kibanaだけで異常の原因が特定できるかもしれません。

図4:グラフ上に異常が発生したタイミングを表示

図5:Kibanaでログをtail -fのように表示

また、通常は異常を検知した際にメールやチャットで通知します。Elastic Stackではアラート機能も有償の拡張機能として提供されており、簡単なルールのアラートであれば、KibanaからGUIで設定できます。

図6:アラートの設定

図6の右側で通知先の候補が表示されていますが、連携先にはWebhook(外部サービスとの連携)も選択できます。これによって、対応作業の自動化もでき、使い方次第で運用工数の削減にもつながります。

前回、今回と、Elastic Machine Learningを紹介してきました。異常や外れ値の検知において、プログラミングを行うことなく機械学習を活用できます。より詳細にElastic Machine Learningについて知りたい方は、実装コードがGitHub上に公開されていますので、そちらも確認してみてください。

著者プロフィール

○片野 祐

ネットワンシステムズ株式会社

ビジネス開発本部 第1応用技術部

ネットワンシステムズに新卒で入社。仮想化技術、ハイパーコンバージドインフラ、データセンタースイッチやネットワーク管理製品の製品担当を経て、現在はAI関連技術の技術調査やデータ分析業務の経験をもとに、さまざまな場面でのデータの利活用を推進している。