アノマリ検知の性能評価フレームワーク

word_path_avg

K-meansを使うアノマリ検知、これまでは
・入力のデータ
・処理(アルゴリズムや前処理・後処理など全て)
・出力される結果
の3つそれぞれをバラバラに見たり変えたりしながら、全体を通じて「ふむ、まぁ動くな…」というレベルまで作ってきたんだけど、そろそろ目で見るのではなく定量的に評価したくなった。
そこで年末の休みの時間を利用して評価するためのフレームワークを作ったら、かなり楽しいことになった。
教師なし学習だけど、データはベイジアンネットワークやシグネチャ等であらかじめ「クロ」と判断されているものと、そうではないものの2種類を用意。
それぞれoutlier/inlierというラベルをつける。inlier側には実質的にはoutlierなデータも多少混じってしまうかもしれない状況。
(たとえばbotのクロール等、攻撃ではないがアノマリな感じのアクセスをするもの)
この2つのクラスのインスタンス群に対してアノマリ検知を行う。それぞれのインスタンスについて、アノマリ側が0、正常側が12くらいの12段階くらいのスコアが計算される。
『outlierラベルが付いた群の平均点とinlier群の平均点の差が広がればアルゴリズムが改善していると考えることができる』という考え方。
実際動かすまでこれを実現できる自信がなかったんだけど、ちょうど初日の出頃の時間にうまく動いた。
・クラスタ数が5より10の方が検知精度が良い
・クラスタ数が10と15の場合、それほど変わらない
・前処理で外れ値を除去すると検知精度が良くなる
などが定量的に見えるようになった。評価のフレームワークがあると急にサイエンスっぽくなっていいね。
教師有り学習だとROC曲線に代表されるように手法が確立されているけど、今回自分で頭をひねって教師なし学習の評価フレームワークを作れたのはかなり良かった。

Advertisements


Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out /  Change )

Google+ photo

You are commenting using your Google+ account. Log Out /  Change )

Twitter picture

You are commenting using your Twitter account. Log Out /  Change )

Facebook photo

You are commenting using your Facebook account. Log Out /  Change )

w

Connecting to %s