小さくなるまで繰り返す。して、最終的に得られた平均ベクトルと共分散行列が異常値に対して頑健なMCD推定量となります。)となることが知られています。計算した共分散行列を用いたマハラノビス距離を使ってデータの並び替えを行えば、「より平均から遠いデータを取り除くことができる」というのは自然な考え方ですね。上記Fast-MCDのアルゴリズムが実際にどう動いているのか、以下にシミュレーションイメージを示します。それぞれ、青い点が正常データ、オレンジの点が異常データ、赤い点線の楕円が一般的な方法(最尤法)で推定した共分散行列を用いたマハラノビス距離の等高線、青い線の楕円がMCDによるものです。繰り返しを行うごとに、青い楕円がどんどん正常データだけを囲んでいく様子がわかると思います。■sklearn.covariance.MinCovDetを使って異常検知してみるそれでは、実際にMCDをつかってデータの異常を捉えられるか、やってみたいと思います。pythonのscikit-learnの中には、Fast-MCDを実装したsklearn.covariance.MinCovDetがあるので、今回はこれを使います。データには信頼と実績のフィッシャーのirisデータに乱数で発生させた異常を乗せ、これを検知できるかを試します。いう三種類のあやめのデータがありますが、この内、'virginica'と'versicolor'を正常データとして用います。異常データは正常データから少しずらした位置に適当に20個発生させます。df_anomaly])上で作ったデータの対散布図です。青い点がirisを使った正常データ('virginica'と'versicolor')、オレンジが乱数を用いて発生させた異常データです。この内の3割をテストデータとして取っておいて、残りの学習データに対して、それぞれ最尤法とMCDを使って推定したマハラノビス距離を用いて、異常を検知できるか比較します。axis=1)学習は、sklearnで共通のfitを使います。マハラノビス距離の二乗の算出は、mahalanobisで可能です。mle.mahalanobis(df_x_test)以下の結果を示します。上の図がMCD、下の図が最尤法を用いたときの各テストデータに対する異常度のプロットです。横軸は各データのindex、縦軸はマハラノビス距離(⇔異常度)を表しています。これも同様に、青い点が正常データ、オレンジの点が異常データを示しています。)を目安として示しています1。MCDは閾値を点線よりも少し大きく取れば、正常データと異常データが完全に分離できるのに対して、最尤法の方は2つの正常データを幾つかの異常データよりも異常度を高く算出しています。MCDは、縦軸のスケールが最尤法よりも大きくなっています。これも異常データに対して、より強くその異常度を示していることを表しています。■まとめ今回はナイーブな手法に少しアレンジを加えた異常検知について、紹介させて頂きました。最近は、深層学習を用いた異常検知が精度もよいので流行っており、弊社でも取り組んでいます。このようなアルゴリズムに触れるのも良いのではないでしょうか。1385-1400ブレインパッドは、さまざまな取り組みを積極的に実施しています。実際のビジネスで自分の知識・技術を活用してみたいという方、ぜひエントリーください!www.brainpad.co.jp推定量を差し込んだ場合のマハラノビス距離は、その推定量に対応してカイ二乗分布とは異なる分布に従うことが知られています。採用ページスターをつけました引用をストックしましたストック一覧を見る閉じる引用するにはまずログインしてくださいログイン閉じる引用をストックできませんでした。再度お試しください閉じる限定公開記事のため引用できません。