斜めから機械学習！相関係数は類似度、標準得点の共分散

次々と新しい技術が登場するITの世界。それを追いかけるだけでも時間が足りないのに機械学習もとなると大変です。疑問に感じたことを深堀りしている暇はない。でも気になる。そんな機械学習の暗闇に斜めからスポットライトをあてたい。

今回のテーマは「相関係数」です。相関係数は、一方が増えると他方も増えるような比例や反比例の度合いを表す尺度ですが、もう少し掘り下げます。

## 相関係数は類似度
次のグラフは、株価の銘柄 A と B（上段）、A と C の毎月の終値の推移を比較したものです。
銘柄 A と値動きが似ているのは銘柄 B と C のどちらでしょうか。

![qiita4_1.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2629684/2685e57c-820e-1cfa-b0cc-d90046f5c817.png)

相関係数を求めると次のようになりました。

- AとBの相関係数： 0.00
- AとCの相関係数： 0.86

![qiita4_2.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2629684/658ba4b5-385e-356d-5520-97455d3ce640.png)

相関係数は比例の尺度だという思い込みが強すぎると見落としがちですが、見方を変えると比例は類似度を表します。実務でそんな思い込みから解決策を見逃すことがあります。そんなときは理解が足りなかったと反省させられます。

例えばレコメンドの協調フィルタリングなどでは消費傾向が似ている人と人を、嗜好が似ていると考えます。

a さんと b さんが再生した音楽の再生回数をジャンル別に集計すると次表の結果となりました。

| | クラシック | ロック | ジャズ |
|--|-:|-:|-:|
|a さん| 1 | 24 | 14|
|b さん| 2 | 22 | 12 |

二人ともロックはよく聴きますがクラシックはほとんど聴きません。
二人の音楽の好みは似ています。

再生回数を散布図で可視化すると、二人の再生回数には相関があります。
相関係数は類似度を表すということです。

![qiita4_3.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2629684/6bc0b0a1-7a67-95b0-7d6b-bdfa3cf0b98e.png)

相関係数が類似度を表すというのはどういうことなのか、幾何学的に考えます。a さんと b さんの再生回数の偏差ベクトル（平均偏差をベクトルにしたもの）の成す角をθとすると相関係数は cos θ に一致します。

![qiita4_4.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2629684/326f74b6-a01c-e35f-6a98-924ef2216bae.png)
ここで $a_i, b_i \\ $ は標本、$\bar{a}, \bar{b} \\ $ は標本の平均です。

偏差ベクトルの向きが似ている → 特徴が似ている

ということです。コサイン類似度という尺度がありますがそれと相関係数の違いは、偏差を用いるか否かです。なお、ここで上げた例は、相関係数の別の見方を示すことが目的なのでこのような使い方を推奨しているわけではありません。例えば株価トレンドで平均はシフトすると考える場合、相関係数は適さないかもしれません。

### 補足
相関係数が cos θ に一致することを確認します。

相関係数
```math
r_{ab} 
= \frac{ \sum_i (a_i - \bar a)(b_i - \bar b)}
  {\sqrt {{\sum_i (a_i - \bar a)^2}}
   \sqrt {{\sum_i (b_i - \bar b)^2}}}
```
の分子は、偏差ベクトルの内積
```math
\sum_i^N(a_i−\bar{a})(b_i−\bar{b}) 
=(𝑎_1-\bar{a})(𝑏_1-\bar{b})+\cdots+(𝑎_N-\bar{a})(𝑏_N-\bar{b})
=\vec{a} \cdot \vec{b} \\
```
また、相関係数の分母は
```math
\sqrt {\sum_i (a_i - \bar a)^2} \sqrt {\sum_i (b_i - \bar b)^2} = |\vec{a} | |\vec{b} | \\
```
これより偏差ベクトルを用いて相関係数を次式で表すことができる。
```math
r_{ab} = \frac{ \vec{a} \cdot \vec{b} } { |\vec{a} | |\vec{b} | }
```
内積の定義
```math
\vec{a} \cdot \vec{b} = |\vec{a} | |\vec{b} | \cos{\theta}
```
より
```math
r_{ab} = \frac{ \vec{a} \cdot \vec{b} } { |\vec{a} | |\vec{b} | } = \cos{\theta}
```

## 相関係数は標準得点の共分散
共分散は２変数の関係を表す指標です。一方が大きいと他方も大きいという関係のとき共分散は正の値をとり、一方が大きいとき他方は小さいという関係のとき共分散は負の値をとります。そうした関係がないとき共分散はゼロに近い値をとります。

変数 a と b の共分散は
```math
s_{ab} = \frac{1}{N} \sum_i^N ( a_i - \bar{a} )( b_i - \bar{b} )
```
ここで N は標本数


偏差ベクトルの内積を用いて共分散を次式のように表せます。

```math
s_{ab} = \frac{1}{N} \vec{a} \cdot \vec{b}　\\
```


共分散は変数のスケールでその値が大きく変化します。この欠点を補うため -1 から 1 の範囲となるように偏差ベクトルの大きさ |a|、|b| で共分散を規格化したものが相関係数です。

![qiita4_5.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2629684/953c82ac-694e-a81a-0510-a47d4d6c5684.png)


標本を平均ゼロ、分散１に標準化するとその共分散は相関係数に一致します。
![qiita4_6.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2629684/53f5abdc-816c-b19a-8509-f433f0773cd6.png)

### 補足
標準得点の共分散が相関係数に一致することを確認します。

標準偏差
```math
s_a = \sqrt{ \frac{1}{N} \vec{a} \cdot \vec{a} } \\
```

標準得点ベクトル
```math
\vec{z_a} = \frac{\vec{a}} {s_a} = \frac{\vec{a}} {\sqrt{ \frac{1}{N} \vec{a} \cdot \vec{a} }} \\
```
標準得点の共分散
```math
s_{z_az_b} 
= \frac{1}{N} {\vec{z_a} \cdot \vec{z_b}} 
= \frac{\vec{a}} {\sqrt{ \vec{a} \cdot \vec{a} }} \cdot \frac{\vec{b}} {\sqrt{ \vec{b} \cdot \vec{b} }} 
= \frac{ \vec{a} \cdot \vec{b} } { |\vec{a} | |\vec{b} | }
```

標準得点の共分散と相関係数が一致しました。