今日も異常検知をやっていく.
今回は多次元のホテリングの法だ.
前回はその準備編として多次元正規分布との和解を成し遂げたので和解していない人は是非ご確認願いたい.
以下のようにしてデータの異常検知を行っていく.
まず,データが次元正規分布に従うと仮定する.
次元正規分布は以下で定義される.
その異常度はデータ分布の自然対数を取って,さらに不要な係数などを消し飛ばすことで定義される.
右辺の第1項はに依存しないので取っちゃおう.第2項の係数も要らないので捨ててしまおう.
すると以下のようになる.
異常度が無事に定義された.これはマハラノビス距離(の2乗)とも呼ばれる.
なお,上式は次元正規分布の異常度を素直に多次元に拡張した形であることは数式を見比べれば分かるだろう.
さて,なぜ異常度をこのように定義するかについて,お気持ちを述べておく.
データが正規分布に従うと仮定した.
正規分布の定義は上に示した通りで,その数式にはが入っている.
あるデータが異常であると言えるのはどのような時か.
それはが分布から外れている時であり,が小さい場合であり,の中身が小さい場合であり,つまりが大きい場合である.
このようにしての中身を取り出すために自然対数を取っている()という話である.
さて,異常度の分布はどうなるだろう.
結論としては,その分布は自由度,スケール因子のカイ二乗分布に近似的に従うのである.
こうなることは頭の良い人が考えたので結果だけ使わせてもらおう.
お気持ちとしては,異常度が小さいデータほど頻度が多く,異常度が大きくなるにつれてその頻度は減少していく感じだ.
自由度のカイ二乗分布は以下であり,直観に合っている.
次元が大きくなるにつれて自由度も大きくなるという感じだ.
さて,異常度の分布が分かったので,あとは閾値を決めるだけだ.
ある異常度が起きる確率を手動で決定し,を異常度の分布の確率密度関数から求めるだけだ.
確率密度関数は全区間で積分するとになる()ので,定義域はであることも考慮すると,上式は
こう書き直したところで計算するのはシーキビであるが,例えばRではカイ二乗分布を求める関数が備わっているので,以下のように簡単に求められる.
# 1%水準の場合 th <- qchisq(0.99, M)
こうして求めたを使用して,新たなデータの異常度が閾値を超えたら警報を発すれば良い.