1. ホーム
  2. プログラマーのための線形代数
  3. 統計学の基本
  4. 共分散と相関係数

共分散と相関係数

ここでは統計学の基本的ツールである共分散と相関係数について解説します。

当ページで学ぶこと

  • 共分散とは
  • Pythonで共分散を求める
  • 相関係数とは
  • Pythonで相関係数を求める
目次

共分散とは

確率論において、共分散は 2 つの確率変数の同時確率の指標です。2 つの変数がどのように変化するのかを示します。これは以下のように書き表されます。XY は確率変数です。

cov(X,Y)

共分散は次の式で求められます。

cov(X,Y)=E[(XE[X])×(YE[Y])]

XY の期待値がわかっている場合は、共分散は以下の式で求められます。

cov(X,Y)=1n×(xE[X])×(yE[Y])

統計学では、標本から共分散を求めるにはバイアス補正を行います。

cov(X,Y)=1n1×(xE[X])×(yE[Y])

共分散の値は、2 つの変数が同じ方向に変化するときは正の値になり、反対方向に変化するときは負の値になります。共分散の値の大きさの解釈は簡単ではありません。ただし 0 のときは 2 つの変数は完全に独立していることを示しています。

Pythonで共分散を求める

NumPy には共分散を直接求める関数はありません。代わりに共分散行列を求める cov() 関数 があります。これで作成した共分散行列から共分散を取得することができます。デフォルトでは cov() 関数はバイアス補正後の値を求めます。

以下のコードは、値が上昇するものと下降するものの2 つのベクトルを作成して共分散行列を求めています。そして共分散行列のインデックス [0, 1] を取得しています。

In [1]:
import numpy as np
# ベクトルを作成
x = np.array([1,2,3,4,5,6,7,8,9])
y = np.array([9,8,7,6,5,4,3,2,1])
print(x)
print(y)
[1 2 3 4 5 6 7 8 9]
[9 8 7 6 5 4 3 2 1]
In [2]:
# 相関の計算
Sigma = np.cov(x,y)[0,1]
print(Sigma)
-7.5

ご覧の通りベクトル xy は逆の相関があることがわかります。

相関係数

共分散は、XY の標準偏差の積で割ることで、-1 から 1 の間に収まるように正規化することができます。この計算結果が、俗に言う「相関関係(ピアソンの相関係数)」です。

r=cov(X,Y)sX×sY

rXY の相関係数であり、cov(X,Y)XY の標本共分散であり、sXsYXY の標準偏差です。

Pythonで相関係数を求める

NumPy では corrcoef() 関数で 2 つの変数の間の相関係数を直接求めることができます。この関数は cov() 関数と同じように相関行列を返します。以下のコードでは、その中のインデックス [0,1] を取得しています。

In [1]:
import numpy as np
# ベクトルを作成
x = np.array([1,2,3,4,5,6,7,8,9])
y = np.array([9,8,7,6,5,4,3,2,1])
print(x)
print(y)
[1 2 3 4 5 6 7 8 9]
[9 8 7 6 5 4 3 2 1]
In [2]:
# 相関の計算
corr = np.corrcoef(x,y)[0,1]
print(corr)
-1.0