2
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

相関係数の直感的な理解

Last updated at Posted at 2020-07-29

相関係数の直感的な理解

相関係数の直感的な理解について、説明します。

今回の相関係数の説明をするにあたって、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)

これをグラフ化したものが以下になります。
スクリーンショット 2020-07-29 22.01.24.png 図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})

が来るようにシフトします。それは下の図で比較してみると分かると思います。

スクリーンショット 2020-07-29 22.22.34.png図2

スクリーンショット 2020-07-29 22.01.18.png図3(原点に平均値が来るようにシフト)

次に気づくのが、
n個のデータセットそれぞれで、

{x_i-\bar{x}}\times{y_i-\bar{y}} 

かけたものを足し合わせています。
上の掛け算が正になる時って、

x_i, y_i

の符号が一致する時ですよね。
つまり、
正の実数と正の実数もしくは負の実数と負の実数をかけたら、正の実数になりますよね。
直感的に掛け算の結果が正のパターンが多ければ多いほど分子は正になりやすく、
掛け算の結果が負のパターンが多ければ多いほど分子は負になりやすそうですよね。
これを平均だけシフトしてやったグラフで考えてみます。

スクリーンショット 2020-07-29 22.38.56.png

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}

これはそれぞれの標準偏差になっています。これが分母で標準偏差が登場する理由です。
分子を内積と捉えることで、分母ではたまたま標準偏差になっていたという解釈ができます。

終わりに

説明下手だなぁ。。。
2
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?