상관계수 :: Python 기초 통계 - mindscale
Skip to content

상관계수

상관계수(correlation coefficient): 두 변수가 함께 변하는 정도를 -1 ~ 1 범위의 수로 나타낸 것

피어슨 상관계수

  • 칼 피어슨(Karl Pearson)이 개발한 상관계수
  • 적률상관계수(product-moment correlation coefficient)라고도 함
  • 일반적으로 상관계수라고 하면 피어슨 상관계수를 말함

np.corrcoef 함수로 계산

import numpy as np

np.corrcoef(x, y)

두 변수의 상관계수만 확인하려면

np.corrcoef(x, y)[0, 1]

아래와 같은 원리로 계산

cov = np.cov(x, y)[0, 1]  # 공분산
xsd = np.std(x, ddof=1)   # x의 표본표준편차
ysd = np.std(y, ddof=1)   # y의 표본표준편차

cov / ( xsd * ysd )

상관계수의 해석

공분산과 비슷하게 해석

부호:

  • 상관이 +인 경우: 두 변수가 같은 방향으로 변화(하나가 증가하면 다른 하나도 증가)
  • 상관이 -인 경우: 두 변수가 반대 방향으로 변화(하나가 증가하면 다른 하나는 감소)

크기:

  • 상관 = 0이면 두 변수가 독립, 즉, 한 변수의 변화로 다른 변수의 변화를 예측하지 못함
  • 상관이 클 수록 두 변수는 함께 많이 변화
  • pearson 상관계수를 제곱하면 분산(=변화량)에서 공유하는 비율
    • 예를 들어 x와 y의 상관계수가 0.4이면 그 제곱은 0.16(=16%)
    • x의 분산 중 16%를 y와 공유 또는 x의 분산 중 16%가 y로 설명됨

주의: 상관계수는 선형적인 관계를 측정하기 때문에 두 변수가 비선형적으로 함께 변하는 경우는 잘 측정하지 못함

아래 z와 w는 $w = z^2$의 관계가 있지만 상관계수는 0

z = [-3, -2, -1, 0, 1, 2, 3]
w = [9, 4, 1, 0, 1, 4, 9]

np.corrcoef(z, w)[0, 1]
  • pearson 상관계수는 공분산을 그 기반으로 하기 때문에, 기본적으로 등간척도/비율척도 를 사용한 변수에만 적용가능함

spearman 상관계수

  • 상관분석을 실시함에 있어 서열척도 를 사용한 변수가 포함되어 있거나
  • 등간/비율척도를 사용한 변수들이라 하더라도, 두 변수 간의 관계가 비선형적 일 때 구하는 상관계수
import scipy.stats

scipy.stats.spearmanr(x, y).correlation

kendall의 tau

  • spearman의 상관계수와 마찬가지로, 비선형적 관게이거나 서열변수일 때 사용
  • spearman의 상관계수보다 믿을만 한 것으로 알려짐 (특히 표본이 작을 때)
scipy.stats.kendalltau(x, y).correlation