yProcessingClub

すみません、許してください

ホテリングのT^2法メモ

今年に入ってからずっと強化学習の勉強をやっていたのだが,会社より異常検知を完全に理解しろという命令が来たのでやっていくことにする.



まずはホテリングのT^2法と和解を行う.

ホテリングのT^2法は古典的な異常検知手法である.
データ{\mathcal D}=(x_1, x_2, \ldots, x_N)正規分布に従っていると仮定して,データx^{'}の異常度a (x^{'})を以下のように定義する.


\displaystyle
a ( x^{'} ) = \frac{(x-\hat{\mu})^2}{\hat{\sigma} ^ 2}

ここで\hat{\mu}及び\hat{\sigma} ^ 2はそれぞれ標本平均と標本分散である.
異常度は平均値からの距離(の二乗)を表していることが分かる.
平均値から離れるほど異常度が大きくなっていくということだ.

分散で割っているのはバラつきの大小を考慮するのが目的だろう.

ポンチ絵を描くと下みたいな感じ.
f:id:Yuri-Processing-Club:20220122202304p:plain
データは正規分布に従っているので,\muを中心にした左右対称の山のような形だ.
\mu付近にデータが多く現れ,\muと離れるほどその出現頻度は低くなる.

\muからの距離は|x-\mu|で表される.
距離を二乗している理由は,異常度は正規分布{\mathcal N}(\mu, \sigma^2)の自然対数を取って式変形をしているためである.


\displaystyle
{\mathcal N}(\mu, \sigma^2) = \frac{1}{\sqrt{2 \pi \hat{\sigma}^2}}\exp{ \Biggl( - \frac{(x-\hat{\mu})^2}{2\hat{\sigma} ^ 2} \Biggr) }
これの自然対数を取って,不要な項や係数を削除することで異常度を定義している.

また,二乗することは外れている値をより重視することでもある.
\mu=3x=1ならば,|x-\mu|=2及び(x-\mu)^2=4である.
\mu=3x=10ならば,|x-\mu|=7及び(x-\mu)^2=49である.
距離が2倍になれば,異常度は4倍になるということである.

さて,異常度の分布はどのようになるだろう.
データは,平均\mu付近に多く分布している.
\muに近いデータはその異常度は0に近い値となる.
そして,異常度が大きいデータほど出現頻度が低くなる.

ポンチ絵を描くと下のようになる.
f:id:Yuri-Processing-Club:20220122204757p:plain

さて,異常度aの分布は自由度1,スケール因子1カイ二乗分布に従うそうなのだ.
カイ二乗分布はガンマ関数が出てきたりして非常に複雑な式で表されるが,その辺を理解する必要はあまり無くて,結果のみを利用する.


さて,異常検知を行うにあたって,「異常度がいくら以上になったら異常である」と言いたいので,この閾値a_{\rm th}を決定したい.
閾値の決め方については,異常度の出現確率を基準にする.
\alphaの確率(例えば\alpha=0.01\alpha=0.03など)でしか出ない異常度が出てしまったら,異常と判断しよう.
a_{\rm th}以上となる確率\alphaは自由度1,スケール因子1カイ二乗分布確率密度関数\chi^2(a | 1, 1)から,


\displaystyle
\alpha = \int_{a_{\rm th}}^{\infty} \chi^2(a | 1, 1)da
で求められる.ポンチ絵は以下だ.

f:id:Yuri-Processing-Club:20220122210610p:plain
これの水色の斜線部の面積が確率\alphaである.
しかしながら今回求めたいのは確率が例えば\alpha=0.01の時のa_{\rm th}であり,上記の積分を逆側に解くような感じである.

どうしたらええんじゃと思ってしまうが,これについてはカイ二乗分布の分布表を見れば一発である.
以下から値を引用させていただくと,
https://www.koka.ac.jp/morigiwa/sjs/chi-square_distribution.htm

確率\alpha=0.01と設定した場合に,閾値a_{\rm th}=6.63になるということである.
f:id:Yuri-Processing-Club:20220122212339p:plain


このようにして,異常度の閾値カイ二乗分布より決定する手法がホテリングのT^2法である.