상관계수
상관계수(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