そんななのでお勉強も兼ねて異常検知手法であるisolation forestから。
ラベルなしでできる手法は(主に教師データを用意できないという理由で)変な人気がありますが、しっかり理解して使えるケース、使えないケースを判断できるようにしておきたいです。
sklearnのdocument
有名な機械学習アルゴリズムについて勉強するときは、scikit-learnのドキュメントを読むのがおすすめです。
有名手法はそれなりに網羅されている上、ドキュメントの説明文がアルゴリズムのいい感じのサマリーになっているので、さらっと理解するにはうってつけです。
あと(ドキュメントなので当たり前ですが)ハイパーパラメータが一覧になっているのも、そのアルゴリズムを理解する上で地味に有用。
さて、このドキュメントからわかることは
- 入力:データ
- 出力:各データ点の異常スコア
- 決定木でデータ点の集合を分割していく
- 特徴量をランダムに選ぶ、さらにその特徴量の(最小値, 最大値)区間で分割点をランダムに選ぶ
- 最終的には、上記の分割点が節、データ点が葉である木構造になる
- (例外はあるが)葉にはデータ点がひとつだけになるように分割する(これがisolationの所以?)
- 各データ点に対して、葉にたどり着くまでの分割数は、ルートノードから葉までの距離そのもの
- この距離が異常スコアを表し、距離が小さい=異常スコアが高い
- なぜなら異常な外れ値的データ点は、早い段階で(木の浅い段階で)分割される確率が高いため
ランダムに特徴量を選ぶ、ランダムに分割する値を選ぶ、というアルゴリズムで分割していくと、異常値を含むデータは早い段階でisolateされることは、直感的にも理解できます。
例えば、IQはだいたい100を中心に分布するよう調整されていますが、たまたまIQ3億のデータがあると、そのデータの区間は(80くらい, 3億)になります。
この区間で分割する値をランダムに決める(一様分布とする)と、3億のデータ点がisolateされる確率はめちゃくちゃ高いですよね。
このような操作を、葉にデータ点がひとつになるまで適用していきます。
また、Random Forestと同様、
- データをサブサンプリングして木を作る
- 木は複数(100個)作る=森
といったモデルをロバストにするための工夫もしています。
最終的には、各データ点に対して、ルートノードからの距離(=深さ)を、すべての木(=森)に対して平均します。
この値(平均深さ)が異常スコアに対応します。
論文を読む
sklearnで何となくお気持ちを理解した段階で論文を読みましょう。
Liu, F. T., Ting, K. M., & Zhou, Z. H. (2008, December). Isolation forest. In 2008 Eighth IEEE International Conference on Data Mining (pp. 413-422). IEEE.
異常スコアの計算方法
異常な値をもつデータはたしかに早い段階でisolateされますが、その平均深さをそのままではなく、その木でふつうに二分探索する際の平均深さ \( c(n) \) で正規化しています。
\( s(x, n) = 2^{- \frac{E(h(x))}{c(n)}} \)
このように正規化することで、異常スコアを(0,1)区間に収めることができるので扱いやすくなります。
\( E(h(x)) \) はそのデータ点までの平均深さです。
異常データはこの値がふつうに二分探索する際の平均深さに比べて小さい(浅い)のでした。
これが小さい(=異常値)と指数部分は0に、探索の平均深さと同じくらい(=正常値)だと指数部分は-1に近づきます。
そのため、\( s(x, n) \)が、1に近いと異常値、0.5に近いと正常値と見なせるようになります。
これが小さい(=異常値)と指数部分は0に、探索の平均深さと同じくらい(=正常値)だと指数部分は-1に近づきます。
そのため、\( s(x, n) \)が、1に近いと異常値、0.5に近いと正常値と見なせるようになります。
ちなみに論文では特徴量のことをattribute(属性)といっていますが、sklearnのドキュメントでは、feature-valueになってます。
葉が1つのデータ点にならないパターン
- まったく同一のデータ点がデータに含まれている場合
- 平均深さ(サブサンプルサイズの対数)で打ち切り
後者に関しては、分割が深い場合は打ち切りしています。
もともと興味があるのは、異常データ(早い段階でisolateされるデータ)だけなので、深いところまでisolateされないデータはそこまで重要視されてないんですね。
深いところまでisolateされずに残っているデータは正常データです。
これは「そのデータが外れ値的なデータではなく、似たデータが周辺にたくさん分布しているため」と考えるとわかりやすいです。
訓練データ・評価データ
Isolation Forestは、教師あり学習ではないのですが、訓練データと評価データがあります。
訓練データでは、Isolation Forestの森自体を作ります。
評価データでは、データを森に入れて、各データ点に対して異常スコアを取得します。
ふつう、教師あり学習というと、ラベル付きデータで学習させるイメージですが、この手法では訓練・評価データはあるものの、訓練データにもラベルがついている必要はありません。
こういう場合、教師あり学習って言うんですかねw?
細かい用語の使い方がよくわかりません。
Isolation Forestの勉強をしているものです。このブログの「異常スコアの計算方法」の説明がわかりやすく助かりました(論文を読んでもイマイチ理解できなかったので)。ありがとうございます。
返信削除ちなみに
ラベルなし=教師なし学習
なので、Isolation Forestは教師なし学習です。
kntkさま
返信削除ご参考になったとのこと、幸いです!
訓練データにあたるものはあっても、それがラベルなしであれば教師なしなんですね。
ありがとうございますb