상관관계(correlation)는 두 변수 사이의 관계를 측정하는 통계학 개념입니다. 두 변수 간의 관계가 강하다는 것은 한 변수의 변화가 다른 변수의 변화를 예측 가능한 패턴으로 반영한다는 의미이며, 이 경우 두 변수는 '상관되어 있다'고 말합니다. 첫 번째 변수의 변동은 두 번째 변수에 양(+) 또는 음(-)의 변동을 일으킬 수 있으며, 이에 따라 각각 양의 상관관계 또는 음의 상관관계를 가진다고 합니다. 이상적인 상관계수의 값은 -1부터 +1 사이의 범위를 가집니다.
- 값이 +1 또는 그에 가까우면 두 변수는 양의 상관관계를 가지며, 같은 방향으로 동시에 움직입니다.
- 값이 -1 또는 그에 가까우면 두 변수는 음의 상관관계를 가지며, 서로 반대 방향으로 동시에 움직입니다.
- 값이 0 또는 그에 가까우면 두 변수 사이에는 유의미한 상관관계가 없습니다.
상관계수를 측정하는 방법은 여러 가지가 있으며, 대표적으로 numpy와 scipy.stats 패키지에서 함수 형태로 제공됩니다. 아래에서 각 방법의 실제 사용법을 살펴보겠습니다.
스피어만 상관계수(Spearman's Correlation) 사용하기
스피어만 상관계수는 선형 관계에 있는 변수들 간의 관계 정도를 측정하는 방법입니다. scipy.stats 패키지에서 제공하는 공식을 기반으로 결과를 산출하며, 데이터 분석에서 상관관계를 구할 때 가장 널리 사용되는 공식 중 하나입니다.
아래 예제에서는 numpy.random 모듈의 randn() 함수로 생성한 난수 값을 가지는 두 변수를 준비한 뒤, spearmanr() 함수를 적용하여 최종 결과를 확인합니다.
예제
from numpy.random import randn
from numpy.random import seed
from scipy.stats import spearmanr
seed(1)
data_input1 = 20 * randn(1000) + 100
data_input2 = data_input1 + (10 * randn(1000) + 50)
correlation = spearmanr(data_input1, data_input2)
print(correlation)
실행 결과
위 코드를 실행하면 다음과 같은 결과가 출력됩니다.
SpearmanrResult(correlation=0.8724050484050484, pvalue=1.58425746359e-312)
결과를 보면 상관계수가 약 0.87로, 두 변수가 매우 강한 양의 상관관계를 가지고 있음을 알 수 있습니다.
피어슨 상관계수(Pearson's Correlation) 사용하기
피어슨 상관계수 역시 선형 관계에 있는 변수들 간의 관계 정도를 측정하는 대표적인 방법입니다. 마찬가지로 scipy.stats 패키지에서 제공하는 공식을 기반으로 결과를 계산합니다.
아래 예제에서도 numpy.random 모듈의 randn() 함수로 생성한 값들을 가지는 두 변수를 사용하고, pearsonr() 함수를 적용하여 최종 결과를 얻습니다.
예제
from numpy.random import randn
from numpy.random import seed
from scipy.stats import pearsonr
seed(1)
data1 = 20 * randn(1000) + 100
data2 = data1 + (10 * randn(1000) + 50)
correlation, _ = pearsonr(data1, data2)
print('Pearsons correlation: %.3f' % correlation)
실행 결과
위 코드를 실행하면 다음과 같은 결과가 출력됩니다.
Pearsons correlation: 0.888
스피어만 vs 피어슨, 어떤 것을 선택해야 할까?
두 상관계수는 모두 변수 간 관계의 강도를 측정하지만 특성에 차이가 있습니다. 피어슨 상관계수는 원본 데이터 값을 기반으로 선형 관계를 측정하는 반면, 스피어만 상관계수는 데이터의 순위(rank)를 기반으로 계산하므로 단조 증가·감소 관계까지 포괄할 수 있고 이상치(outlier)에 더 강건합니다. 데이터가 정규분포에 가깝고 선형성이 뚜렷하다면 피어슨, 순위 기반 분석이 필요하거나 이상치가 많다면 스피어만을 선택하는 것이 일반적입니다.