相関係数は、2 つの変数の関係の強さを 1 つの数で要約する指標である。目的やデータ特性に応じて、線形関係を測る Pearson 相関係数、順位の単調関係を見る Spearman / Kendall 相関係数を使い分ける。
何を測るかと何を測らないか、を最初に押さえておくと運用上の落とし穴を避けられる。相関係数が高い = 良い予測ができる、ではない。相関係数が高い = 因果関係がある、でもない。標準化 や PCA、特徴量選択、EDA(探索的データ分析)の起点として広く使われるが、解釈にはいくつかの注意点がある。
共分散と相関係数
相関係数の土台となる量が共分散(covariance)である。共分散は 分散 を 2 変数に拡張したものとして定義される。
- 定義:
cov(X, Y) = E[(X - mu_x)(Y - mu_y)] mu_xとmu_yはそれぞれXとYの平均- 自己共分散:
cov(X, X) = Var(X)(1 変数の分散と一致)
共分散は「2 変数が同じ方向に動くか・逆方向に動くか」を表す量で、正なら同方向、負なら逆方向、0 なら無相関の傾向を示す。ただし共分散には決定的な弱点がある: 単位とスケールに依存する。X がメートル、Y がキログラムなら、共分散の単位は「メートル × キログラム」になり、絶対値の大きさを他のペアと比較しても意味が無い。
そこで共分散を両者の標準偏差 で割って正規化したものが相関係数である。
- Pearson 相関:
r = cov(X, Y) / (sigma_x * sigma_y)
正規化により r は -1 から +1 の範囲に収まり、単位やスケールに依存しない無次元量になる。これが「相関係数を共分散の代わりに使う」最大の理由と言える。
Pearson 相関係数の意味
Pearson 相関係数(Pearson correlation, r)は、2 変数の 線形 な関係の強さを表す。
r = +1: 完全な正の線形関係(散布図が右上がりの直線)r = -1: 完全な負の線形関係(散布図が右下がりの直線)r = 0: 線形関係が無い(散布図がランダム、または非線形に並んでいる)
r の絶対値の目安として、0.7 以上で強い相関、0.4〜0.7 で中程度、0.4 未満で弱い相関 と慣習的に呼ばれることが多いが、サンプル数や目的によって判断は変わる。サンプル数が大きい(n > 1000)と統計的有意な相関でも実用上は弱いことがあり、逆にサンプルが少ない(n < 30)と高相関でも偶然の可能性がある。
前提・注意
- 線形関係しか捉えられない(非線形関係は
rが小さくても、ゼロでも存在しうる) - 外れ値に引っ張られやすい(数件の極端な値で相関の符号すら変わる)
- 相関は因果関係ではない(第三の要因による疑似相関の可能性)
- 連続値変数を前提とする(カテゴリ変数の場合は別の指標を使う)
相関係数の落とし穴
相関係数は誤読されやすい指標で、特に次の 3 つは判断軸として頭に入れておきたい。
1. 相関係数 ≠ 予測精度
r = 0.8 の特徴量があったとしても、その単独で目的変数を高精度に予測できるとは限らない。線形回帰での決定係数 R² = r² = 0.64 程度で、分散の 64% は説明できるが残り 36% は別要因。さらに、外れ値が支配的だと「数値上は高相関でも本質的な予測力は無い」現象も起きる。判断軸: 相関は関係の強さで、予測精度はモデルと特徴量全体の選び方で決まる別の話。
2. 相関係数 ≠ 因果関係
「アイスクリームの売上と溺死事故件数には正の相関がある」「靴のサイズと読解力には正の相関がある」のような有名な例がある通り、相関は因果を示さない。共通の第三因子(前者は気温、後者は年齢)が両方を動かしている場合、二変数の相関は高くなるが、片方を増減させても他方は動かない。判断軸: 因果を主張するなら介入実験、操作変数法、DAG、傾向スコアマッチング などの因果推論の枠組みが必要。
3. 相関 0 ≠ 関係が無い
Pearson 相関は線形性しか測らないので、r = 0 でも強い非線形関係があり得る。
y = x²のようなパラボラ関係:r ≈ 0だが完全に決定論的y = sin(x)のような周期関係:r ≈ 0だが完全に決定論的- 円形のクラスタや U 字型の関係も同様
非線形を含めた関係を検出したい場合は、Spearman / Kendall(単調性)、相互情報量(mutual information、非線形を含む一般的な依存性)、距離相関(distance correlation)などを併用する。判断軸: Pearson が 0 でも、散布図を必ず描いて非線形構造の有無を目視する。
利点
- 解釈が直感的(符号と大きさで関係の方向と強さが分かる)
- 計算が軽く、相関行列で多変量の関係を一度に俯瞰できる
- 単位やスケールに依存しない無次元量
- 線形回帰の
R²と直接対応(R² = r²)するので、線形モデルの説明力の目安にもなる
欠点
- 非線形関係を見逃しやすい(落とし穴 3)
- 外れ値の影響が大きい(少数の極端な値で相関が変わる)
- 線形性以外の依存構造は捉えられない
- 因果関係を示すことはできない(落とし穴 2)
- カテゴリ変数や順序尺度には直接使えない(Spearman / Kendall や Cramér’s V などで代替)
利点
- 解釈が直感的(符号と大きさ)
- 相関行列で多変量の関係を俯瞰できる
欠点
- 非線形な関係を見逃しやすい
- 外れ値の影響が大きい
Spearman / Kendall の相関
Pearson が「値そのものの線形関係」を見るのに対し、Spearman や Kendall は「順位(ランク)の関係」を見る相関係数。
- Spearman 相関: 各値を順位に変換して Pearson を計算する。単調関係(一直線ではないが、増える/減るが一貫する関係)に強い。
- Kendall 相関: データの順序の一致/不一致(順序対)に基づく相関。外れ値に比較的強く、サンプルが小さい場合に安定しやすい。
使い分けの目安は次の通り。
- 線形関係が前提なら Pearson
- 単調関係が前提、外れ値が多いなら Spearman
- 順位の一致を厳密に見たい、サンプルが小さいなら Kendall
Python での実例
Pearson
線形関係の例。正相関/相関なし/負相関の3パターンを並べて比較する。
import numpy as np
import matplotlib.pyplot as plt
rng = np.random.default_rng(0)
n = 200
x1 = rng.normal(size=n)
y1 = 0.8 * x1 + rng.normal(scale=0.4, size=n)
x2 = rng.normal(size=n)
y2 = rng.normal(size=n)
x3 = rng.normal(size=n)
y3 = -0.8 * x3 + rng.normal(scale=0.4, size=n)
fig, axes = plt.subplots(1, 3, figsize=(9, 3), sharex=True, sharey=True)
axes[0].scatter(x1, y1, s=10, alpha=0.7)
axes[0].set_title("Positive")
axes[1].scatter(x2, y2, s=10, alpha=0.7)
axes[1].set_title("None")
axes[2].scatter(x3, y3, s=10, alpha=0.7)
axes[2].set_title("Negative")
fig.suptitle("Pearson Correlation Examples")
plt.tight_layout()
plt.show()
出力:
Spearman / Kendall
単調関係(非線形)の例。Pearson だと弱く見えるが、順位の関係は強いケースを想定している。
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
rng = np.random.default_rng(0)
n = 200
x = rng.normal(size=n)
y = x ** 3 + rng.normal(scale=1.0, size=n)
plt.scatter(x, y, s=10, alpha=0.7)
plt.title("Monotonic (nonlinear) scatter")
plt.xlabel("x")
plt.ylabel("y")
plt.tight_layout()
plt.show()
出力:
数学での使いどころ
- 共分散行列の要約として相関行列を使う(多くは Pearson)
- 変数間の冗長性や多重共線性の確認(線形関係なら Pearson が基本)
- データの構造理解(単調関係が疑われる場合は Spearman / Kendall が有効)
機械学習での使いどころ
- 特徴量間の相関が高い場合の特徴選択(線形関係なら Pearson、単調関係なら Spearman / Kendall を見る)
- PCA や線形モデルの前処理としての確認(相関構造を掴み、標準化や次元削減の必要性を判断する)
- EDA での仮説づくり(外れ値や歪みが強い場合は順位相関のほうが安定)
適さないケース
- 曲線的な関係が本質なデータ(例: 二次関数)
- 外れ値が多いデータ
- 因果推論を目的とする分析