はじめに
スタンフォード大学 Andrew Ng氏による機械学習の講義動画を各週社内メンバーで持ち回りで受講し、学んだことを発表、Qiitaで共有しています。
第9週は以下の内容でした。
- Anomaly Detection
主に、異常検知を説明していきます。
目次
- 異常検知
- 特徴量ごとに独立に正規分布に従う場合
- 多変量正規分布に従う場合
異常検知
例えば工場で作られた製品の重さ, 大きさ、飛行機のジェットエンジンの音や温度などを測定する。それらのデータから製品が不良品かどうか、エンジンに異常が起きているかどうかを判断したい。
正常データ, 異常データが共に十分な数が用意できるならば、ロジスティック回帰などの二値分類を行えば良い。
しかし工場の不良品も、エンジンの異常状態も正常のものより極端に少ない。これではデータ量が少なく分類は難しい。(例 : 正常 10,000 個, 異常 20 個など...)
そこで、
「正常データを"正常カテゴリ"に分類、異常データを"異常カテゴリ"に分類」という考えではなく、
「"正常" とは何かを定義し、そこから外れるものを "異常" とするような考え方で異常検知を行ってみる。
※ ここでは説明のため、二次元データを使用する。
特徴量ごとに独立に正規分布に従う場合
例えば以下のようにデータが分布していたとする。 ( $x1, x2$ には例えば製品の質量, 体積などである。 )
黒い点が正常データで、赤い点が異常データである。
これらを訓練データとして、異常検知モデルを作りたい。
$x1, x2$ がそれぞれ独立に正規分布に従うとする。平均, 分散がそれぞれ $\mu_1$, $\mu_2$, $\sigma_1$, $\sigma_2$ として確率密度関数は
$$
f_1(x_1) = \frac{1}{\sqrt{2\pi\sigma_1^2}}\ e^{-\frac{(x_1-\mu_1)^2}{2\sigma_1^2}},
\
f_2(x_2) = \frac{1}{\sqrt{2\pi\sigma_2^2}}\ e^{-\frac{(x_2-\mu_2)^2}{2\sigma_2^2}}
$$
となる。正規分布は
- 平均の前後で確率は対称
- 平均から離れるほど確率は低くなる
という性質を持っている。上記の積
$$
\phi(x_1, x_2) = f_1(x_1) \ f_2(x_2)
$$
は以下の図の青い枠の外側に行けば行くほど値は小さくなっていく。(青枠は $ \phi $ の等値線)
ここでパラメータ $a$ を用いて
- $\phi(x_1, x_2) \ge a$ のとき
- $ (x_1, x_2) $ は正常データ
- $\phi(x_1, x_2) < a$ のとき
- $ (x_1, x_2) $ は異常データ
と分類する。
モデル決定の流れは
- 訓練データで $\phi$ を定義
- CVデータで $a$ を定義
- テストデータで $a$ が良く定義されているか確認
である。
この方法は各特徴量が全て正規分布に従うことを前提としている。よって
- 正規分布に従う特徴量
- 変数変換して正規分布に従う特徴量
のいずれかを使用する。
異常検知 〜 多変量正規分布に従う場合 〜
次の図のように分布していたとする。
先ほどとは違い、傾いた楕円形に分布している。これを上記の
$$
\phi(x_1, x_2) = f_1(x_1)f_2(x_2)
$$
で分類すると
のように中心からの距離が同程度の正常データと異常データの $ \phi(x_1,x_2) $ の値が近くなってしまい、うまく分類できない。
ここで $x = (x_1,x_2)$ が多変量正規分布に従うとすると確率密度関数は
$$
\psi(x) = \frac{1}{\sqrt{4\pi^2|\Sigma|}}\ e^{-\frac{1}{2}(x-\mu)^T\Sigma^{-1}(x-\mu)}
$$
である。ただし以下を満たす。
- $\Sigma$ は分散共分散行列
- $\mu = (\mu_1, \mu_2)$
この関数で、パラメータ $a$ を用いて
- $\psi(x) \ge a$ のとき
- $ x $ は正常データ
- $\psi(x) < a$ のとき
- $ x $ は異常データ
と分類する。
今回の関数 $ \psi $ は以下の図の青い線が等値線となるような分布である。図のようにうまく、分類がうまくいっている。
以上になります。