Coursera Machine Learning - Week9-1 Anomaly Detection
CourseraのMachine Learningについてまとめています。 前回は、Week8の後半、Dimensionality Reductionについてまとめました。
今回は、Week9の前半、Anomaly Detectionについて学びます。
Anomaly Detection
今回は、Anomaly detection(異常検出)について学習します。Anomaly detectionには、教師なし学習のものと教師あり学習のものがありますが、今回は、教師なし学習のAnomaly detectionを主に扱います。(ただし、Featureの選択において、一部教師あり学習のようなことも行います。)
Anomaly detectionは、下記のような場面で用いられます。
- 不正検出
- Webサイト上で奇妙な行動を取っているユーザーを検出する等
- 製造業での異常品検出
- 航空機のエンジンを製造し、品質保証テストを行う場合、熱や振動等を計測し、通常と異なる値になっていないか確認する等
- データセンターのコンピュータのモニタリング
- メモリやディスクアクセス、CPU負荷等をモニタリングし、コンピュータが落ちる可能性がないか確認する等
例えば、上記の航空機エンジンの異常品検出では、下記のように、熱や振動のFeatureを見て、通常と異なる発生確率のものをAnomalyとして検出します。
Gaussian distribution
Anomaly detectionを学ぶにあたり、まずは、ガウス分布(正規分布)から学びます。
ガウス分布は、統計学等様々な場面で用いられる確率分布で、下記の数式で表されます。また、確率変数xが平均μ、分散σ2の正規分布に従うことを、x~N(μ, σ2) と記載するそうです。
また、ガウス分布をグラフにすると下記のようになります。
また、平均μと分散σ2を変化させると、下記のような分布に変わります。
Anomaly detection algorithm
ここで学ぶAnomaly detectionのアルゴリズムは、あまり複雑なものではなく、簡単なものです。各Featureの確率分布を計算し、それを掛け合わせた確率分布と閾値εを比較し、小さなもの(確率分布的にほとんど発生しないもの)を異常として検知します。具体的には、下記のような流れ、数式で異常検知を行います。ここで演算子Πは、Σの掛け算バージョンです。
次に、このAnomaly detectionのアルゴリズムを実際に開発する場合ですが、これまで行ってきた教師あり学習のように、データをTraining set、Cross validation set、Test setに分けます。割合は、60%、20%、20%程度とし、Training setには、正常(Anomalyでない)なデータのみを用い、平均や分散を計算し、p(x)を準備します。その後、Cross validation setを用い、p(x)を評価し、用いたFeatureがそれで良いか否かを確認します。評価には、Week6で学んだPrecision/RecallやF scoreを用います。
また、閾値であるεを選択する方法として、様々なεの値を用い、F1 scoreを最大化するεを選ぶという方法があります。
Anomaly Detection vs. Supervised Learning
上記では、Featureやεの値を選ぶために、ラベル付きデータを用いました。ラベル付きデータがあるのであれば、教師あり学習を行うこともできます。どのような場合にAnomaly detectionを使い、どのような場合に教師あり学習を使うべきなのか、下記がその指標になるとのことです。
- Anomaly detectionを使うべき場合
- 異常(y=1)のデータが少ない
- 正常(y=0)のデータが多い(ガウス分布のパラメータをフィッティングし、p(x)を推計する場合には、y=0のデータしか必要としないため)
- 様々な種類の異常があり、異常(y=1)のデータの特徴を学習しづらい場合
- 教師あり学習を使うべき場合
- 異常(y=1)と正常(y=0)の双方のデータが大量にある
- 異常時のデータがどのようなものなのか、特徴を学習できると思われる場合(今後発生すると想定される異常データと同様の異常データがトレーニングデータに存在する)
Choosing what features to use
次に、どのFeatureをAnomaly detectionに用いるかについてです。
Featureを選択する際に、まずはそのデータのヒストグラムを確認してみることが良いそうです。分布がガウス分布のように分散していればそのまま用いても良いのですが、非対称で、ガウス分布と異なる分布の場合は、そのFeatureを変換して用いるのが良いそうです。変換には、Logを取ったり、2乗や0.5乗等のべき乗を取る方法等があるそうです。
また、異常検知では、正常データではp(x)が大きな値となり、異常データではp(x)が小さな値となる必要があります。あるFeatureをもとに異常検知を行ってみて、p(x)が正常データでも異常データでも大きな値となってしまった場合、異常時はp(x)が小さくなるような、他のFeatureを追加する必要があります。そのFeatureは、複数のFeatureを組み合わせて新たに作ることも可能で、例えば、データセンターのPCのモニタリングの場合は、CPU負荷をネットワークトラフィックで割ったFeature(トラフィックが少ないのに、CPU負荷が高い場合に大きな値となる)を使うことなどが考えられます。
Multivariate Gaussian distribution
下記のようなデータがあった際に、ガウス分布を用いた異常検知では、オレンジの線のように異常検知を行い、青い線のような異常検知は行えず、緑色の異常データは、正常と判断されます。このような場合に青い線のように異常検知を行うには、Multivariate Gaussian distribution(多変量正規分布)を用います。
多変量正規分布を用いた場合のAnomaly detectionのp(x)は、下記の数式で計算可能です。ここで出てくる変数Σは、n×nの行列で、Week8で出てきた共分散行列です。
正規分布を用いたAnomaly detectionでは、Featureを組み合わせて新たなFeatureを作る必要がありましたが、多変量正規分布を用いた場合は、Feature間の相関関係を自動で加味してくれます。しかしながら、計算量が多くなるといった問題や、トレーニングデータ数mがFeatureの次元nより十分に大きい必要があります。
次回は、Week9の後半、Recommender Systemsについてまとめます。
コース全体の目次とそのまとめ記事へのリンクは、下記の記事にまとめていますので、参照ください。
Coursera Machine Learningまとめ本記事を読んでいただきありがとうございます。
機械学習を実際に使うにあたり、Coursera MLと合わせておすすめしたい書籍を紹介します。
Pythonではじめる機械学習 ―scikit-learnで学ぶ特徴量エンジニアリングと機械学習の基礎
scikit-learnを用いた機械学習を学ぶのに最適な本です。
ゼロから作るDeep Learning ―Pythonで学ぶディープラーニングの理論と実装
Deep Learningと言えばこれ。TensorFlowやPyTorch等のフレームワークを用いずに、基礎の理論からDeep Learningを実装します。Week4、Week5の記事を読んで、より深く理解したいと思った人におすすめです。
Kaggleで勝つデータ分析の技術
データ分析について学び始めた人におすすめです。