単純ベイズ法による異常検知 #ml-professional

92
異常検知と変化検知 単純ベイズ法による異常検知 機械学習プロフェッショナルシリーズ輪読会 #6 @a_macbee / 2015-10-07

Transcript of 単純ベイズ法による異常検知 #ml-professional

Page 1: 単純ベイズ法による異常検知  #ml-professional

異常検知と変化検知 単純ベイズ法による異常検知機械学習プロフェッショナルシリーズ輪読会 #6

@a_macbee / 2015-10-07

Page 2: 単純ベイズ法による異常検知  #ml-professional

 第三章:  単純ベイズ法による  異常検知

について学んでいきます

Page 3: 単純ベイズ法による異常検知  #ml-professional

 3.1  多次元の問題を1次元に  帰着する

Page 4: 単純ベイズ法による異常検知  #ml-professional

この章では多次元の問題について考える

Page 5: 単純ベイズ法による異常検知  #ml-professional

この章では多次元の問題について考える多次元の異常検知問題の例:スパムメール検知

メール文章中の各単語の 出現頻度情報を利用して スパム (=異常) か判定

{ こんにちは: 1, お得: 0, … } → 普通のメール ( 正常 ) { こんにちは: 0, お得: 10, … } → スパムメール ( 異常 )

Page 6: 単純ベイズ法による異常検知  #ml-professional

この章では多次元の問題について考える多次元の異常検知問題の例:スパムメール検知

メール文章中の各単語の 出現頻度情報を利用して スパム (=異常) か判定

単語の種類数が次元数に相当する

{ こんにちは: 1, お得: 0, … } → 普通のメール ( 正常 ) { こんにちは: 0, お得: 10, … } → スパムメール ( 異常 )

Page 7: 単純ベイズ法による異常検知  #ml-professional

{ こんにちは: 1, お得: 0, … } → 普通のメール ( 正常 ) { こんにちは: 0, お得: 10, … } → スパムメール ( 異常 )

Page 8: 単純ベイズ法による異常検知  #ml-professional

{ こんにちは: 1, お得: 0, … } → 普通のメール ( 正常 ) { こんにちは: 0, お得: 10, … } → スパムメール ( 異常 )

x(1) = { x1(1), x2(1), … xM(1)} → 0 = y(1) x(2) = { x1(2), x2(2), … xM(2)} → 1 = y(2) … x(N) = { x1(N), x2(N), … xM(N)} → 0 = y(N)

正常:y = 0 異常:y = 1

Page 9: 単純ベイズ法による異常検知  #ml-professional

{ こんにちは: 1, お得: 0, … } → 普通のメール ( 正常 ) { こんにちは: 0, お得: 10, … } → スパムメール ( 異常 )

x(1) = { x1(1), x2(1), … xM(1)} → 0 = y(1) x(2) = { x1(2), x2(2), … xM(2)} → 1 = y(2) … x(N) = { x1(N), x2(N), … xM(N)} → 0 = y(N)

( 1.1 )

正常:y = 0 異常:y = 1

M次元のラベル付き異常値検出問題

Page 10: 単純ベイズ法による異常検知  #ml-professional

何が難しいのか?

Page 11: 単純ベイズ法による異常検知  #ml-professional

{ こんにちは: 1, お得: 0, … } → 普通のメール ( 正常 ) { こんにちは: 0, お得: 10, … } → スパムメール ( 異常 )

x(1) = { x1(1), x2(1), … xM(1)} → 0 = y(1) x(2) = { x1(2), x2(2), … xM(2)} → 1 = y(2) … x(N) = { x1(N), x2(N), … xM(N)} → 0 = y(N)

( 1.1 )

正常:y = 0 異常:y = 1

「変数がたくさんあって手に負えない」 = Mの次元数が増えると辛い

( 1.2 )

Page 12: 単純ベイズ法による異常検知  #ml-professional

そんなときの 単純ベイズ法(a.k.a ナイーブベイズ法)

Page 13: 単純ベイズ法による異常検知  #ml-professional

単純ベイズ法ベイズの定理に従い事後確率が最大になる y に分類 ( 今回の例の場合,y は 0 or 1,x は M次元のベクトル)

Page 14: 単純ベイズ法による異常検知  #ml-professional

単純ベイズ法ベイズの定理に従い事後確率が最大になる y に分類 ( 今回の例の場合,y は 0 or 1,x は M次元のベクトル)

ここで,M次元の変数それぞれが独立であると仮定 → ナイーブ 尤度を各パラメータ毎の尤度の積で書ける

( 3.1 )

Page 15: 単純ベイズ法による異常検知  #ml-professional

単純ベイズ法ベイズの定理に従い事後確率が最大になる y に分類 ( 今回の例の場合,y は 0 or 1 )

ここで,M次元の変数それぞれが独立であると仮定 → ナイーブ 尤度を各パラメータ毎の尤度の積で書ける

( 3.1 )

異常度の計算に使います

( 1.2 )

Page 16: 単純ベイズ法による異常検知  #ml-professional

「統計的に独立」 って何が嬉しいの?

深ぼってみる

Page 17: 単純ベイズ法による異常検知  #ml-professional

尤度を最尤推定の枠組みで考える 1/2

( 3.1 )

Page 18: 単純ベイズ法による異常検知  #ml-professional

尤度を最尤推定の枠組みで考える 1/2

( 3.1 )

対数尤度で考える 未知パラメータを含む形で明示的に書く

( 3.2 )

Page 19: 単純ベイズ法による異常検知  #ml-professional

尤度を最尤推定の枠組みで考える 1/2

( 3.1 )

対数尤度で考える 未知パラメータを含む形で明示的に書く

( 3.2 )

今回の例の場合,多項分布 となるため (※後述), i 番目の語の出現確率D1はy(n)=1となる標本の集合

Page 20: 単純ベイズ法による異常検知  #ml-professional

尤度を最尤推定の枠組みで考える 2/2

未知パラメータ毎に微分して 0 になる点が 最尤解を与える ※1 θに拘束条件がないと仮定

変数ごと,yごとに問題が切り分けられる!

( 3.2 )

Page 21: 単純ベイズ法による異常検知  #ml-professional

変数が統計的に独立な場合の最尤推定

式 (3.1) のように変数ごとに積の形となっている場合,M変数のそれぞれに対して別々に最尤推定することで,モデルのパラメータを求めることができる

定理 3.1

( 3.1 )

Page 22: 単純ベイズ法による異常検知  #ml-professional

[章3.1] まとめ

Page 23: 単純ベイズ法による異常検知  #ml-professional

まとめ 1/2

• 多次元の問題について考えるにあたり,単純ベイズ法の考え方を導入した

Page 24: 単純ベイズ法による異常検知  #ml-professional

まとめ 1/2

• 多次元の問題について考えるにあたり,単純ベイズ法の考え方を導入した

• 変数が統計的に独立であると仮定して,尤度は各パラメータの積で与えられる

( 3.1 )

Page 25: 単純ベイズ法による異常検知  #ml-professional

まとめ 1/2

• 多次元の問題について考えるにあたり,単純ベイズ法の考え方を導入した

• 変数が統計的に独立であると仮定して,尤度は各パラメータの積で与えられる

( 3.1 )

異常度の計算に使います

( 1.2 )

Page 26: 単純ベイズ法による異常検知  #ml-professional

まとめ 2/2

• M変数のそれぞれについて最尤推定することで,モデルのパラメータを求められる (定理 3.1)

• ここでは,単純ベイズ法は各変数が独立だとみなすモデリング手法を異常度に適用したもの・・・と考えてOK

( 3.2 )

Page 27: 単純ベイズ法による異常検知  #ml-professional

まとめ 2/2

• M変数のそれぞれについて最尤推定することで,モデルのパラメータを求められる (定理 3.1)

• ここでは,単純ベイズ法の各変数が独立だとみなすモデリング手法を,異常度計算に適用した

( 3.2 )

Page 28: 単純ベイズ法による異常検知  #ml-professional

まとめ 2/2

• M変数のそれぞれについて最尤推定することで,モデルのパラメータを求められる (定理 3.1)

• ここでは,単純ベイズ法の各変数が独立だとみなすモデリング手法を,異常度計算に適用した

( 3.2 )

今回の例の場合,多項分布 となるとしてたけど・・・ 多項分布って何だっけ?

Page 29: 単純ベイズ法による異常検知  #ml-professional

多項分布による単純ベイズ分類 について深掘る

Page 30: 単純ベイズ法による異常検知  #ml-professional

 3.3  多項分布による 単純ベイズ分類

Page 31: 単純ベイズ法による異常検知  #ml-professional

多項分布:頻度についての分布頻度を集計したベクトル x について,x の出方を表す確率分布

( 3.6 )

条件:

Page 32: 単純ベイズ法による異常検知  #ml-professional

多項分布:頻度についての分布頻度を集計したベクトル x について,x の出方を表す確率分布

( 3.6 )

条件:

各メールを文章中の単語の集まりで表す x = ( うれしい, がっかり, 値段, … )

各単語の頻度を単語ごとに集計

メールを単語の袋詰で表現する Bag-of-Wordsモデル

Page 33: 単純ベイズ法による異常検知  #ml-professional

多項分布:頻度についての分布頻度を集計したベクトル x について,x の出方を表す確率分布

( 3.6 )

条件:

各単語の出現確率

各単語の 出現確率の和は1

単語の総数の階乗をAとすると

Page 34: 単純ベイズ法による異常検知  #ml-professional

多項分布:頻度についての分布頻度を集計したベクトル x について,x の出方を表す確率分布

( 3.6 )

条件:

Page 35: 単純ベイズ法による異常検知  #ml-professional

改めて対数尤度関数をみてみると・・・

( 3.2 )

Page 36: 単純ベイズ法による異常検知  #ml-professional

改めて対数尤度関数をみてみると・・・

( 3.2 )

y=0と1に対応して Mult(x|θ0)とMult(x|θ1)のモデルを仮定 θ0とθ1を最尤推定する

( 3.7 )

※ (定数) は未知パラメータに関係しない定数

Page 37: 単純ベイズ法による異常検知  #ml-professional

改めて対数尤度関数をみてみると・・・

( 3.2 )

y=0と1に対応して Mult(x|θ0)とMult(x|θ1)のモデルを仮定 θ0とθ1を最尤推定する

( 3.7 )

ただし,次の制約を満たすこと:

この対数尤度関数を最大化する

Page 38: 単純ベイズ法による異常検知  #ml-professional

制約をラグランジュの未定乗数で取り入れると以下の通リ書ける

束縛条件最大化したい関数

Page 39: 単純ベイズ法による異常検知  #ml-professional

整理すると以下の通リ書ける

よく出現する単語ほど出現確率が 高く見積もられる

( Dyにおける単語 i の出現総数 )=Niy

( Dyにおける全単語の出現総数 )=|Dy|

Page 40: 単純ベイズ法による異常検知  #ml-professional

整理すると以下の通リ書ける

( Dyにおける単語 i の出現総数 )=Niy

( Dyにおける全単語の出現総数 )=|Dy|

よく出現する単語ほど出現確率が 高く見積もられる

 一度も出現しない単語をゼロ扱いするのは都合が悪い              → スムージングする

             γ > 0 としてゲタを履かせる

Page 41: 単純ベイズ法による異常検知  #ml-professional

多項分布のパラメータを 求めることが出来た!

Page 42: 単純ベイズ法による異常検知  #ml-professional

求めたパラメータを利用して 異常値検出をしよう

Page 43: 単純ベイズ法による異常検知  #ml-professional

異常値検出: スパムメール検出

( 3.9 )

( 1.2 )

求めた多項分布の式を代入 係数ベクトルα

→ 線形分類器の   形になっている

Page 44: 単純ベイズ法による異常検知  #ml-professional

[章3.3] まとめ

Page 45: 単純ベイズ法による異常検知  #ml-professional

まとめ 1/3

• 確率分布が多項分布である場合の単純ベイズ法について考える

• 例えばメールのBag-of-Wordsの表現は多項分布にあたる

( 3.6 )

Page 46: 単純ベイズ法による異常検知  #ml-professional

まとめ 2/3

• 確率分布を多項分布とした場合の最尤推定→ よく出現する単語ほど出現確率が高く見積もられる

ゲタを履かせる → スムージング

Page 47: 単純ベイズ法による異常検知  #ml-professional

まとめ 3/3

• 求めた最尤値を利用して異常度を計算できる

• 異常度は本質的には線形分類器になっている

Page 48: 単純ベイズ法による異常検知  #ml-professional

 3.4  最大事後確率推定と  多項分布のスムージング

Page 49: 単純ベイズ法による異常検知  #ml-professional

未知パラメータの事前分布

• 未知パラメータに常識的な想定を込めた事前分布を導入 → 多項分布の場合は「ディリクレ分布」

定数 αi > 0 を設定 (αnを無限とおくとn次元目の単語は必ず出現すると想定している)

( 3.10 )

Page 50: 単純ベイズ法による異常検知  #ml-professional

未知パラメータの事前分布

• 未知パラメータに常識的な想定を込めた事前分布を導入 → 多項分布の場合は「ディリクレ分布」

定数 αi > 0 を設定 (αnを無限とおくとn次元目の単語は必ず出現すると想定している)

最大事後確率推定でモデルを推定する

( 3.10 )

Page 51: 単純ベイズ法による異常検知  #ml-professional

定義 3.1: 最大事後確率推定

• データDを与えたときのパラメータθの尤度を p(D|θ) とする.また,θの事前分布を p(θ) とする.このとき,最適パラメータθ* を

により選ぶ方法を,最大事後確率推定もしくは MAP推定と呼ぶ.

( 3.12 )

Page 52: 単純ベイズ法による異常検知  #ml-professional

定義 3.1: 最大事後確率推定

• データDを与えたときのパラメータθの尤度を p(D|θ) とする.また,θの事前分布を p(θ) とする.このとき,最適パラメータθ* を

により選ぶ方法を,最大事後確率推定もしくは MAP推定と呼ぶ.

( 3.12 )

 尤度と事前分布の積を最大化するθ  → 事後分布を最大化するθ

Page 53: 単純ベイズ法による異常検知  #ml-professional

最大事後確率推定を利用してθを求める

[ 事前分布 ] 未知パラメータθ0とθ1はお互い独立

Page 54: 単純ベイズ法による異常検知  #ml-professional

最大事後確率推定を利用してθを求める

[ 事前分布 ] 未知パラメータθ0とθ1はお互い独立

( 3.12 )

( 3.7 )

Page 55: 単純ベイズ法による異常検知  #ml-professional

最大事後確率推定を利用してθを求める

[ 事前分布 ] 未知パラメータθ0とθ1はお互い独立

( 3.12 )

( 3.7 )

のように変更するだけ

Page 56: 単純ベイズ法による異常検知  #ml-professional

最大事後確率推定を利用してθを求める

[ 事前分布 ] 未知パラメータθ0とθ1はお互い独立

( 3.12 )

[ 対数尤度関数 ]

( 3.13 )

Page 57: 単純ベイズ法による異常検知  #ml-professional

上記の対数尤度関数をラグランジュ未定乗数を用いて素朴に微分

( 3.13 )

( 3.14 )

Page 58: 単純ベイズ法による異常検知  #ml-professional

上記の対数尤度関数をラグランジュ未定乗数を用いて素朴に微分

( 3.13 )

( 3.14 )

( 3.8 )αをγ+1と置く →

Page 59: 単純ベイズ法による異常検知  #ml-professional

[章3.4] まとめ

Page 60: 単純ベイズ法による異常検知  #ml-professional

まとめ 1/2

• 未知パラメータの事前分布を考える

• 多項分布のモデル推定をするため,ディリクレ分布を事前分布として導入

• 事前分布を考慮して最大事後確率推定を行う

( 3.10 )

( 3.12 )

Page 61: 単純ベイズ法による異常検知  #ml-professional

まとめ 2/2

• 事前分布を含んだ対数尤度関数をラグランジュ未定乗数法で解き,未知パラメータの最適化を得る

( 3.13 )

( 3.14 )

Page 62: 単純ベイズ法による異常検知  #ml-professional

 3.5  二値分類と  異常検知の関係

Page 63: 単純ベイズ法による異常検知  #ml-professional

ベイズ決定則

 以下を満たす場合 y = 1 と判定

( 3.15 )

全体の誤り確率を最小にする最適な判別規則

p(y=1|x) と p(y=0|x) を計算してみて,大きい方を選ぶ

Page 64: 単純ベイズ法による異常検知  #ml-professional

ベイズ決定則

 以下を満たす場合 y = 1 と判定

( 3.15 )

全体の誤り確率を最小にする最適な判別規則

p(y=1|x) と p(y=0|x) を計算してみて,大きい方を選ぶ

と比較

Page 65: 単純ベイズ法による異常検知  #ml-professional

任意の標本 x が与えられたときにそれを y=0 または y=1 のいずれかに分類する.その判定規則は以下の通リ与える:

Page 66: 単純ベイズ法による異常検知  #ml-professional

任意の標本 x が与えられたときにそれを y=0 または y=1 のいずれかに分類する.その判定規則は以下の通リ与える:

 誤り確率を最小にするように  a(x) と τ を決めたい

Page 67: 単純ベイズ法による異常検知  #ml-professional

任意の標本 x が与えられたときにそれを y=0 または y=1 のいずれかに分類する.その判定規則は以下の通リ与える:

訓練データに基づいて,あるいは勘と経験で p(x) と p(y|x) が求められていたとすると・・・

Page 68: 単純ベイズ法による異常検知  #ml-professional

任意の標本 x が与えられたときにそれを y=0 または y=1 のいずれかに分類する.その判定規則は以下の通リ与える:

訓練データに基づいて,あるいは勘と経験で p(x) と p(y|x) が求められていたとすると・・・

[ 誤り確率 ]

( 3.16 )

Page 69: 単純ベイズ法による異常検知  #ml-professional

任意の標本 x が与えられたときにそれを y=0 または y=1 のいずれかに分類する.その判定規則は以下の通リ与える:

訓練データに基づいて,あるいは勘と経験で p(x) と p(y|x) が求められていたとすると・・・

[ 誤り確率 ]

条件を満たすと y=1であると判別

p(y=0|x)p(x)をxについて積分 → y=0となる確率

y=0であると判別

y=1となる確率

※指示関数 I[・]:中身が真のときに 1,そうでないときに 0

( 3.16 )

Page 70: 単純ベイズ法による異常検知  #ml-professional

任意の標本 x が与えられたときにそれを y=0 または y=1 のいずれかに分類する.その判定規則は以下の通リ与える:

訓練データに基づいて,あるいは勘と経験で p(x) と p(y|x) が求められていたとすると・・・

[ 誤り確率 ]

( 3.16 )( 3.17 )

Page 71: 単純ベイズ法による異常検知  #ml-professional

この誤り確率を最小にしたい

Page 72: 単純ベイズ法による異常検知  #ml-professional

この誤り確率を最小にしたい

p(y=1|x) > p(y=0|x) の場合に {・} は負となる

{・} の中が負となる場合を拾えれば良い

Page 73: 単純ベイズ法による異常検知  #ml-professional

この誤り確率を最小にしたい

p(y=1|x) > p(y=0|x) の場合に {・} は負となる

{・} の中が負となる場合を拾えれば良い

とおけば良い

Page 74: 単純ベイズ法による異常検知  #ml-professional

この誤り確率を最小にしたい

p(y=1|x) > p(y=0|x) の場合に {・} は負となる

{・} の中が負となる場合を拾えれば良い

とおけば良い

 実際にはlogをとってる

Page 75: 単純ベイズ法による異常検知  #ml-professional

この誤り確率を最小にしたい

p(y=1|x) > p(y=0|x) の場合に {・} は負となる

{・} の中が負となる場合を拾えれば良い

とおけば良い

Page 76: 単純ベイズ法による異常検知  #ml-professional

ベイズ決定則

 以下を満たす場合 y = 1 と判定

( 3.15 )

全体の誤り確率を最小にする最適な判別規則

p(y=1|x) と p(y=0|x) を計算してみて,大きい方を選ぶ

Page 77: 単純ベイズ法による異常検知  #ml-professional

ベイズ決定則

 以下を満たす場合 y = 1 と判定

( 3.15 )

全体の誤り確率を最小にする最適な判別規則

p(y=1|x) と p(y=0|x) を計算してみて,大きい方を選ぶ

ネイマン・ピアソン決定則に よく似ている

Page 78: 単純ベイズ法による異常検知  #ml-professional

ベイズ決定則とネイマン・ピアソン決定則を比較

• ネイマンピアソン決定則p(x|y=1)とp(x|y=0)の比がある閾値を超えたら以上と判定

• ベイズ決定則p(x|y=1)p(y=1)とp(x|y=0)p(y=0)の比が1を超えたら以上と判定

Page 79: 単純ベイズ法による異常検知  #ml-professional

ベイズ決定則とネイマン・ピアソン決定則を比較

• ネイマンピアソン決定則p(x|y=1)とp(x|y=0)の比がある閾値を超えたら以上と判定

• ベイズ決定則p(x|y=1)p(y=1)とp(x|y=0)p(y=0)の比が1を超えたら以上と判定

p(y=1) << p(y=0) なので, 異常判定を強く抑制している

= 二値分類器を使って異常検知するのは注意が必要

Page 80: 単純ベイズ法による異常検知  #ml-professional

[章3.5] まとめ

Page 81: 単純ベイズ法による異常検知  #ml-professional

まとめ

• 二値分類で一般的に使われるベイズ則をとりあえげた

• ベイズ則は異常判定を強く抑制する傾向にあるため,利用する際には注意が必要

 以下を満たす場合 y = 1 と判定

( 3.15 )

Page 82: 単純ベイズ法による異常検知  #ml-professional

3.2 独立変数モデルのもとでの ホテリングのT2法

Page 83: 単純ベイズ法による異常検知  #ml-professional

独立変数モデルをラベルなしデータに適用

ホテリングのT2法を例として挙げる

( 3.3 )

※ x はM次元

※ 共分散行列の非対角成分を0とおいている

Page 84: 単純ベイズ法による異常検知  #ml-professional

独立変数モデルをラベルなしデータに適用

ホテリングのT2法を例として挙げる

( 3.3 )

※ x はM次元

※ 共分散行列の非対角成分を0とおいている

この場合も定理3.1は成り立つ

Page 85: 単純ベイズ法による異常検知  #ml-professional

(※途中計算省略) 最尤推定で以下の解が得られる

( 3.4 )

一次元の標本平均と分散に一致

Page 86: 単純ベイズ法による異常検知  #ml-professional

(※途中計算省略) 最尤推定で以下の解が得られる

一次元の標本平均と分散に一致

[ 異常度 ]

( 3.4 )

( 3.5 )

M個の変数それぞれの異常度の和※異常度計算についてはp.18の流れを参照

Page 87: 単純ベイズ法による異常検知  #ml-professional

(※途中計算省略) 最尤推定で以下の解が得られる

一次元の標本平均と分散に一致

[ 異常度 ]

( 3.4 )

( 3.5 )

M個の変数それぞれの異常度の和

・面倒な行列計算が不要で,変数同士の独立性がよく成り立つ  のであれば実用上有用 ・独立性がなりたたない場合もおおまかな異常度を見積もれる

Page 88: 単純ベイズ法による異常検知  #ml-professional

(a) 変数間に相関がない (b) 変数間に線形相関がある

変数間の相関と異常判定に与える影響

Page 89: 単純ベイズ法による異常検知  #ml-professional

(a) 変数間に相関がない (b) 変数間に線形相関がある

変数間の相関と異常判定に与える影響赤い四角=正常と判定される範囲 範囲は変数毎に決まる

(変数間に線形相関がある場合) 変数個々に見ている限りは,異常判定の枠が不当に大きくなる傾向にある

Page 90: 単純ベイズ法による異常検知  #ml-professional

(a) 変数間に相関がない (b) 変数間に線形相関がある

変数間の相関と異常判定に与える影響赤い四角=正常と判定される範囲 範囲は変数毎に決まる

(変数間に線形相関がある場合) 変数個々に見ている限りは,異常判定の枠が不当に大きくなる傾向にある  → 後の章で相関がある場合の異常検知について扱う

Page 91: 単純ベイズ法による異常検知  #ml-professional

[章3.2] まとめ

Page 92: 単純ベイズ法による異常検知  #ml-professional

まとめ

• 独立変数モデルはラベルなしデータにも使える

• ホテリングのT2法を例として挙げた

• 異常度はM個の変数それぞれの異常度の和として表せる

• しかし,変数間に相関がある場合,異常判定の枠が不当に大きくなる傾向にあるので注意が必要

( 3.5 )