【Python】NumPyで相関係数を求める方法を紹介!

こんにちは!

皆さんは相関係数を求めようと思ったことはありませんか?

Python初心者
相関係数は、機械学習でも特徴量の選択をする時に使う事があったよ!

相関係数を求める事ができると、2組のデータの関係性がわかるのでとても便利です。

この相関係数は、NumPyの「corrcoef()」を使えば簡単に求める事ができますよ。

今回の記事では、以下の内容を紹介します。

  • 相関係数とは?
  • NumPyを用いた相関係数の求め方

相関係数

相関係数とは

相関係数とは、2組のデータの間にどのくらいの相関(関係性)があるのかを示す指標の一つです。

相関係数はよくrで表され、その範囲は、

-1 ≦ r ≦ 1

となります。

r の値が大きいほど強い正の相関があり、rの値が小さいほど強い負の相関があります。

相関係数の値の目安を以下の表に示します。

-1.0 ≦ r ≦ -0.7 強い負の相関
-0.7 ≦ r ≦ -0.4 負の相関
-0.4 ≦ r ≦ -0.2 弱い負の相関
-0.2 ≦ r ≦ 0.2 ほとんど相関なし
0.2 ≦ r ≦ 0.4 弱い正の相関
0.4 ≦ r ≦ 0.7 正の相関
0.7 ≦ r ≦ 1.0 強い正の相関

散布図で相関の例を示します。

r = 0.8の時の散布図

強い正の相関があることが見てわかりますね。

r = -0.8の時の散布図

こちらは、強い負の相関が見てわかります。

r = 0.2 の時の散布図

若干正の相関があるかな?くらいであまり相関があるようには見えないグラフですね。

相関係数の定義

相関係数の定義は以下になります。

各文字の意味は、

となります。

NumPyで相関係数を求める corrcoef

NumPyで相関係数を求めるには、「corrcoef()」を使用します。

np.corrcoef(x, y=None, rowvar=True)
x 1次元または2次元配列を指定
y 追加データを指定
rowver Trueで行ごと、Falseで列ごとの相関係数を算出

それでは、corrcoef()を使って相関係数を求めてみましょう。

以下のプログラムは、数学と英語の得点の相関係数を求めるプログラムです。

import numpy as np

math = [71, 80, 95, 52, 93, 68, 98, 30, 78, 60]
english = [62, 89, 82, 95, 92, 89, 91, 72, 75, 93]

print(np.corrcoef(math, english))

解説

print(np.corrcoef(math, english))
数学と英語の得点の相関係数を求めます。
実行結果
[[1.         0.22347004]
 [0.22347004 1.        ]]

右上、左下の数字が、数学と英語の得点の相関係数です。

0.2より少し大きい程度なので、数学と英語の得点には弱い正の相関があることがわかります。

得点の散布図を見てみると・・・

若干ですが正の相関がありそうな散布図ですね。

まとめ

今回の記事では、以下の内容を紹介しました。

  • 相関係数とは?
     →2組のデータの関係性を求める指標
  • NumPyを用いた相関係数の求め方
     →「corrcoef()」を用いる
Python初心者
これで簡単に相関係数を求める事ができるようになったね!

相関係数は、様々な場面で使用されるため、ぜひ求める方法を覚えておきましょう!