MENU

【Python】共分散と相関係数で2変数間の相関を求める方法

  • URLをコピーしました!

今回は2変数間の関係性を表す共分散と相関係数をPythonで計算する方法を紹介します。

目次

共分散(Covariance)とは

2変数の関係性を表す指標です。

共分散が大きいと、2変数間に関係性があることを示し、

共分散が0に近いと、2変数間に関係性がないことを示します。

共分散が正の場合、一方の変数が増加するとき、もう一方の変数も増加する傾向にあります。

共分散が負の場合、一方の変数が増加するとき、もう一方の変数が減少する傾向にあります。

これらを正の相関、負の相関といいます。

共分散の値は変数の値に依存するので、共分散の値が大きいからといって相関が強いと言い切れないのが、共分散の特徴です。

共分散の計算式は以下です。

\[s_{xy} = \frac{1}{n} \sum_{i=1}^{n} (x_i – \bar{x})(y_i – \bar{y})\]

共分散の相関関係を図で表すと以下の通りです。

共分散行列

共分散行列とは、分散と共分散を行列式で表したものです。

変数間の相関をまとめて表示することができます。

変数$x$, $y$共分散行列を式で表すと以下の通りです。

\[S_{xy} = \begin{bmatrix} \text{s}_{x}^{2} & \text{s}_{xy}\\ \text{s}_{xy} & \text{s}_{y}^{2} \end{bmatrix}\]

対角には\(x\), \(y\)それぞれの分散が入ります。

Pythonで共分散を計算

それではPythonで共分散を計算してみましょう!

NumPyのcov関数を使用すると、簡単に共分散を計算できます。

サンプルコードは以下の通りです。

import numpy as np
import seaborn as sns

# データの準備
df = sns.load_dataset('tips')

# tipとtotal_billの共分散を求める
np.cov(df['tip'], df['total_bill'])

実行結果

array([[ 1.91445464,  8.32350163],
       [ 8.32350163, 79.25293861]])

tiptotal_billの共分散は、8.32350163だとわかります。

ただ、この結果だけでは、tiptotal_billの相関がどれくらいあるのかはわかりません。

使用したデータ

今回は、tipsのデータセットを使用しました。

tipsは、機械学習や統計学の分野でサンプルデータとして使用されるレストランのお会計に関するデータセットです

相関係数(Correlation coefficient)とは

相関係数とは、共分散を標準化したものです。

共分散の値は変数の値に依存するので、どれくらい相関が強いか数値だけでは判断できませんでした。

その共分散を標準化し、相関の強さが数値でわかるようにしたのが相関係数です。

相関係数は -1 から1までで表現され、-1または1に近づくほど、変数間の相関は強くなります。

相関行列

相関行列は変数間の相関係数を行列式で表現したものです。

対角線は同じ変数間の相関係数なので、1になります。

相関行列は以下の式で表すことができます。

\[R = \begin{bmatrix} \text{1} & \text{r}_{12} & \cdots & \text{r}_{1n} \\ \text{r}_{21} & \text{1} & \cdots & \text{r}_{2n} \\ \vdots & \vdots & \ddots & \vdots \\ \text{r}_{n1} & \text{r}_{n2} & \cdots & \text{1} \end{bmatrix}\]

Pythonで相関係数を計算

相関係数をPythonを計算していきます。

NumPyのcorrcoef関数を使用すると、簡単に相関係数を計算できます。

サンプルコードは以下の通りです。

import numpy as np
import seaborn as sns

# データの準備
df = sns.load_dataset('tips')

# tipとtotal_billの相関係数を求める
np.corrcoef(df['tip'], df['total_bill'])

実行結果

array([[1.        , 0.67573411],
       [0.67573411, 1.        ]])

tiptotal_billの相関係数は0.67573411であることがわかります。

まとめ

今回は2変数間の関係性を表す共分散と相関係数をPythonで計算する方法を紹介しました。

それぞれで使用するNumPyの関数は以下です。

  • 共分散: np.cov()
  • 相関係数: np.corrcoef()

相関係数は2変数間の関係性を簡単に知ることができるので、便利です。

ぜひ覚えていきましょう!

ここまで読んでくださりありがとうございます。

参考

おすすめ教材

米国データサイエンティストが教える統計学超入門講座【Pythonで実践】 icon 【世界で55万人が受講】データサイエンティストを目指すあなたへ〜データサイエンス25時間ブートキャンプ〜 icon

他のUdemyの講座が気になる方はこちら

¥3,630 (2024/04/08 23:55時点 | Amazon調べ)
\楽天ポイント5倍セール!/
楽天市場
よかったらシェアしてね!
  • URLをコピーしました!

この記事を書いた人

エンジニア。20代。組み込みエンジニアとして働き始めるも、働き方や業務内容に限界を感じ、 AI,Web3エンジニアを目指して勉強中。 エンジニアとして思うことや、学んだことを発信します。

目次