【異常検知】マハラノビス距離を嚙み砕いて理解する (1)

#1. はじめに

先日、井手剛さんのTwitterで注目すべき発言がありました。**異常検知においてSOTAは、マハラノビス距離である**との報告でした。素晴らしいと思いました。
＊井手剛さんは、名著[入門機械学習による異常検知](https://www.amazon.co.jp/%E5%85%A5%E9%96%80-%E6%A9%9F%E6%A2%B0%E5%AD%A6%E7%BF%92%E3%81%AB%E3%82%88%E3%82%8B%E7%95%B0%E5%B8%B8%E6%A4%9C%E7%9F%A5%E2%80%95R%E3%81%AB%E3%82%88%E3%82%8B%E5%AE%9F%E8%B7%B5%E3%82%AC%E3%82%A4%E3%83%89-%E4%BA%95%E6%89%8B-%E5%89%9B/dp/4339024910)の著者です。
![ide-san.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/208980/a26934be-a44b-eab8-bbdd-9451f7a4912a.png)

ということで、統計を専門的に学んでない方を対象に、このマハラノビス距離を嚙み砕いて説明したいと思います。

#2.マハラノビス距離とは
##2.1. マハラノビス先生
最初、マハラノビス先生について、お話させてください。活動時期がラマヌジャンと似ていて、なんだかインド生まれの変わった風貌を持つ天才数学者のイメージがありましたが、実写の写真を見るとかなりインテリのイメージでした。彼の功績を見ると、天才数学者であることは間違いありませんが。ケンブリッジ大学に留学した後、インドのコルカタに戻り、インド統計研究所(Indian Statistical Institute)で数理統計学の研究を続けました。
![prof.Mahalanobis.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/208980/18bd0929-cbce-dff6-8314-6d6a94d59f27.jpeg)

マハラノビス距離については、1936年のProceedings of the National Institute of Sciences of Indiaに“[On the generalized distance in statistics](http://bayes.acs.unt.edu:8083/BayesContent/class/Jon/MiscDocs/1936_Mahalanobis.pdf)”のタイトルでその概念を発表しました。他の数学天才の論文と違い、ちゃんと数式を展開しながら内容も説明してくれるので、理解しやすい論文ですので、ご興味のある方は直接に読んでみてください。個人的には、この**Generalized Distance**のタイトルにマハラノビス先生の自信が見えてました。汎用的な、あらゆる分野で適用できる素晴らしい距離の概念である。という先生の主張が「Generalized」という言葉に現れたと感じました。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/208980/6f05ed80-117c-90e9-90cb-95a955dfecd1.png)

##2.2.　マハラノビス距離

マハラノビス距離とは、多変数間の相関関係を取り入れて、既知のサンプルとの関係を明らかにする距離です。
(1) 多変数の意味は、1変数を含めた多変数を取り扱う問題に使える
(2) そして、その多変数間の相関関係を考慮した内容
(3) 既知のサンプルとの関係は、例えば品質管理において良品のデータの分布を持っている場合、それを基準に異常検知に使える基準が作れることを意味します。

よく使われるユークリッド距離とマハラノビス距離の違いを説明する図を下記に示します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/208980/4ad50f55-dc2c-1424-241c-f8f201f782e6.png )
"出典：金子研究室HP＠明治大学"

#3.数式の理解
マハラノビス距離*d*は下記の式で定義されます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/208980/b5f11582-bc48-3bf4-a77b-0209c90dd792.png)

各記号の意味はこちらになります。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/208980/a8e89aa8-65d9-a526-edfb-5a85de335a9a.png)

ここで、注目して頂きたいのは、𝛴と表記される**分散・共分散行列**です。英語のVariance-Covariance Matrixを直訳した言葉で、𝛴と書かれたため、合計の演算子と読み間違えらえることがありますが、中身は行列式になります。

例えば、*X1*,*X2*の2次元のデータがあるとき、このデータの**分散・共分散行列**は下記のように表記されます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/208980/a49b723c-27e6-ebea-1217-96b6e3d081e3.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/208980/b750d222-8d85-7263-e6b1-9918e2785bbb.png)

データが3次元の場合は、下記のようになります。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/208980/aa59e4d6-4c70-038b-bbe9-bb9d8da6508f.png)
𝛴=(■(𝜎_1^2&𝜎_12&𝜎_13@𝜎_12&𝜎_2^2&𝜎_23@𝜎_13&𝜎_23&𝜎_3^3 ))

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/208980/72a8a2eb-1503-a47f-01da-c8cb4e16aa17.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/208980/c954c9c4-3e8d-de17-6719-48be2079df41.png)


#3.1. 2次元のマハラノビス距離

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/208980/a8e89aa8-65d9-a526-edfb-5a85de335a9a.png)

ここでは、*X1*,*X2*の2次元のデータがあるとき、マハラノビス距離*d*の数式を解いてみたいと思います。簡単な計算でありながら、案外もその過程が説明されてなかったため、ここでご説明することにします。

まず、データのベクトルです。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/208980/5de8f566-eaf1-83a9-4de5-640ad3e12fc8.png)

次に平均のベクトルです。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/208980/1aa45bee-4f35-4c33-d916-b07c8f13a849.png)

分散・共分散行列です。これは前章で説明した通りです。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/208980/5d8b9f1f-6c6c-6602-9ca2-1ff09de56cc2.png)

ここで、相関係数を下記の式のようにすると、
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/208980/c130f545-c22b-09c6-f461-8af3cdeab0a2.png)

分散・共分散行列の逆行列を下記に表記することができる。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/208980/bc5f5f9b-bc3a-5972-df3b-22dd0a85c8db.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/208980/afdc5df6-1f18-320d-d683-5d9b5c36e4f6.png)

ここで、マハラノビス距離の式に代入する。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/208980/f0111d16-b8eb-c65a-d701-9a9374a1143a.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/208980/57679777-7115-871f-3d30-d1c6b87b29f0.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/208980/b88d0040-86e8-2a33-7c7e-6c21e2221c2d.png)

マハラノビス距離のルートの中の式を完成していきます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/208980/0d6f01ba-b31e-9f2e-da3a-7cac6df9b291.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/208980/72a3ebb7-4a5a-e8a1-ccbd-1416a50e1d55.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/208980/826a2fcd-8bd1-aaee-fbcc-8271dada23b8.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/208980/3b229375-94f8-a509-5817-cca3d65b9183.png)

従って、マハラノビス距離の*d*は、下記の式のようにスカラーになることが分かる。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/208980/ca50dddf-0f22-f5b3-2c2b-138889a6ebfb.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/208980/d0a4bb95-5fe6-2ae5-5d12-c53528ff5860.png)


#4. 次回の予定

Pythonで多次元データからマハラノビス距離を求め方を説明します。

https://qiita.com/kotai2003/items/c66cfcc5266edec9a063

#5. 参考資料
1. [井出剛さんのTwitter ](https://twitter.com/Idesan/status/1469385932742664195
)
1. [入門 機械学習による異常検知―Rによる実践ガイド](https://www.amazon.co.jp/%E5%85%A5%E9%96%80-%E6%A9%9F%E6%A2%B0%E5%AD%A6%E7%BF%92%E3%81%AB%E3%82%88%E3%82%8B%E7%95%B0%E5%B8%B8%E6%A4%9C%E7%9F%A5%E2%80%95R%E3%81%AB%E3%82%88%E3%82%8B%E5%AE%9F%E8%B7%B5%E3%82%AC%E3%82%A4%E3%83%89-%E4%BA%95%E6%89%8B-%E5%89%9B/dp/4339024910)
1. [On the generalized distance in statistics](http://bayes.acs.unt.edu:8083/BayesContent/class/Jon/MiscDocs/1936_Mahalanobis.pdf)
1. [マハラノビス距離の意味を２次元の場合で理解する](https://mathwords.net/mahalanobis)
1. [異常検知 マハラノビス距離を実装してみる](https://hituji-ws.com/code/python/md_anomaly/)
1. [Maharanobis Distance at Scipy](https://docs.scipy.org/doc/scipy/reference/generated/scipy.spatial.distance.mahalanobis.html)