相関係数の直感的な理解
相関係数の直感的な理解について、説明します。
今回の相関係数の説明をするにあたって、Pythonで疑似データを用意しました。
生成方法は以下のコードになります。
x = np.random.normal(170.0,6.6,50)
y = np.random.normal(58.3,5.7,50)
x = np.sort(x)
y = np.sort(y)
これをグラフ化したものが以下になります。
図1(横軸がx縦軸がy)
それでは本題に入ります。
相関係数の求め方は、
n個のデータセット
(x_1, y_1),...,(x_n, y_n)
に対して、相関係数は以下の式で与えられます。
\frac{\sum_{i=1}^n (x_i-\bar{x})(y_i-\bar{y})}{{\sigma_x}{\sigma_y}}
ここで、
\bar{x}, \bar{y}
とは、それぞれの平均値です。
\sigma_k
とはkに関する標準偏差です。
なぜ分子がこのような式に、分母では標準偏差で割るのかについて解説します。
まずは分子について解説します。
分母よりも分子の方が本質的です。
分子を1つ1つ丁寧に見ていきます。
まず気づくのが、それぞれのデータを平均で引いていることです。
これによって、xとyに関するグラフは平均で引いた分だけシフトします。
原点に
(\bar{x}, \bar{y})
が来るようにシフトします。それは下の図で比較してみると分かると思います。
次に気づくのが、
n個のデータセットそれぞれで、
{x_i-\bar{x}}\times{y_i-\bar{y}}
かけたものを足し合わせています。
上の掛け算が正になる時って、
x_i, y_i
の符号が一致する時ですよね。
つまり、
正の実数と正の実数もしくは負の実数と負の実数をかけたら、正の実数になりますよね。
直感的に掛け算の結果が正のパターンが多ければ多いほど分子は正になりやすく、
掛け算の結果が負のパターンが多ければ多いほど分子は負になりやすそうですよね。
これを平均だけシフトしてやったグラフで考えてみます。
xとyの値の範囲の調整をしていないので、見づらいと思いますが、許してください。
赤の領域に存在する
x_i\times{y_i}
は正になります。
反対に緑の領域に存在する
x_i\times{y_i}
は負になります。
ちなみに分母の式を理解するにあたって、分子の式が内積で表現できることを知っておかないといけません。
xとyをそれぞれベクトル化すると、
\vec{x} = (x_1, x_2, \cdots, x_n)\\
\vec{y} = (y_1, y_2, \cdots, y_n)
になります。そして、それぞれのベクトルの要素を平均で引いて、
\vec{x'} = (x_1-\bar{x}, x_2-\bar{x}, \cdots, x_n-\bar{x})\\
\vec{y'} = (y_1-\bar{y}, y_2-\bar{y}, \cdots, y_n-\bar{y})
この2つのベクトルに対して、内積を施すと
{\vec{x'}}\cdot{\vec{y'}}=\sum_{i=1}^n (x_i-\bar{x})(y_i-\bar{y})
これは分子の式と同じですよね。
内積って、1よりも大きくなることもあれば-1よりも大きくなることもあります。
使用しているデータが同じなのに、単位がmなのか、kmなのかでも内積の結果が変わってきます。mなのかkmなのかは正直どうでもいいことなのに、mを使用するとkmよりも内積の結果が大きくなってしまいます。
なんとかして、スケールを整える(正規化)できないかと考えたくなりませんか?
内積の定義を思い出すと、以下のように変形できるはずです。
{\vec{x'}}\cdot{\vec{y'}}=|\vec{x'}||\vec{y'}|cos\theta
上の式を変形して、
cos\theta=\frac{{\vec{x'}}\cdot{\vec{y'}}}{|\vec{x'}||\vec{y'}|}
{\vec{x'}}\cdot{\vec{y'}}
を
\frac{{\vec{x'}}\cdot{\vec{y'}}}{|\vec{x'}||\vec{y'}|}
に置き換えてやればこれは
cos\theta
と等しいので、スケールを-1~1に変換してやることができました。
ところで、
|\vec{x'}|, |\vec{y'}|
ってベクトルの大きさですよね。
なので、
|\vec{x'}|=\sqrt{\sum_{i=1}^n (x_i-\bar{x})^2}
\\
|\vec{y'}|=\sqrt{\sum_{i=1}^n (y_i-\bar{y})^2}
これはそれぞれの標準偏差になっています。これが分母で標準偏差が登場する理由です。
分子を内積と捉えることで、分母ではたまたま標準偏差になっていたという解釈ができます。