아래는 그대로 블로그에 옮겨도 되는 형태로 정리한 글입니다.
핵심은 “피어슨은 선형 관계”, “스피어만은 순위 기반 단조 관계”, “켄달의 타우는 순위 쌍의 일치도”, “상호정보는 비선형 의존성”으로 나누어 이해하는 것입니다.
⸻
상관관계의 종류와 해석: 피어슨, 스피어만, 켄달의 타우, 상호정보까지
데이터 분석에서 상관관계는 두 변수 사이의 연결 강도를 파악하는 가장 기본적인 도구입니다.
그런데 상관계수라고 해서 모두 같은 의미를 가지는 것은 아닙니다. 어떤 것은 선형 관계를 보고, 어떤 것은 순위를 보고, 어떤 것은 비선형 의존성까지 포착합니다.
이번 글에서는 대표적인 상관관계 지표인 피어슨 상관계수, 스피어만 상관계수, 켄달의 타우, 상호정보(Mutual Information)를 수식과 함께 정리해보겠습니다.
⸻
상관관계는 두 변수 X, Y가 함께 변하는 정도를 나타냅니다.
값이 클수록 두 변수는 강하게 연결되어 있고, 값이 0에 가까울수록 선형 또는 순위 기반 관계가 약하다고 볼 수 있습니다.
다만 여기서 중요한 점은, 상관관계가 곧 인과관계를 의미하지는 않는다는 것입니다.
상관이 높아도 원인-결과 관계가 아닐 수 있고, 반대로 인과가 있어도 상관이 약하게 보일 수 있습니다.
⸻
피어슨 상관계수는 가장 널리 쓰이는 상관계수로, 두 연속형 변수 간의 선형 관계를 측정합니다.
2.1 정의
피어슨 상관계수는 다음과 같이 정의됩니다.
r = \frac{\sum{i=1}^{n}(x_i-\bar{x})(y_i-\bar{y})}{\sqrt{\sum{i=1}^{n}(xi-\bar{x})^2}\sqrt{\sum{i=1}^{n}(y_i-\bar{y})^2}}
또는 공분산과 표준편차를 이용해 다음처럼 쓸 수도 있습니다.
r = \frac{\mathrm{Cov}(X,Y)}{\sigma_X \sigma_Y}
여기서
• \mathrm{Cov}(X,Y): 공분산
• \sigma_X, \sigma_Y: 각 변수의 표준편차
입니다.
2.2 해석
피어슨 상관계수의 값은 항상 [-1, 1] 범위에 있습니다.
• r = 1: 완전한 양의 선형 관계
• r = -1: 완전한 음의 선형 관계
• r = 0: 선형 관계가 없음
주의할 점은, r = 0이라고 해서 두 변수 사이에 아무 관계도 없다는 뜻은 아니라는 것입니다.
예를 들어 U자형 관계처럼 비선형 관계는 피어슨 상관계수로 잘 드러나지 않을 수 있습니다.
2.3 가정
피어슨 상관계수는 계산 자체에는 정규분포가 필수는 아닙니다.
즉, 정규분포를 따라야만 계산할 수 있는 지표는 아닙니다.
다만 다음을 이해해야 합니다.
1. 계수 계산
표본이 정규분포가 아니어도 계산할 수 있습니다.
2. 유의성 검정과 신뢰구간
전통적인 p-value 계산이나 검정에서는 보통 이변량 정규성 가정이 자주 등장합니다.
즉, 피어슨 상관계수는 “분포 가정이 아예 없다”기보다는,
계산 자체는 자유롭지만 검정 해석에서는 정규성 가정이 개입될 수 있다고 이해하는 것이 정확합니다.
2.4 언제 쓰는가
피어슨 상관계수는 다음 상황에 적합합니다.
• 두 변수가 연속형일 때
• 관계가 대체로 직선형일 때
• 이상치가 심하지 않을 때
예: 공부 시간과 시험 점수, 광고비와 매출 등
⸻
스피어만 상관계수는 순위(rank) 를 기준으로 계산되는 비모수 상관계수입니다.
즉, 원래 값이 아니라 각 값의 순서를 바꿔서 상관을 계산합니다.
3.1 핵심 아이디어
스피어만은 “값 자체가 얼마나 비슷하냐”보다,
“큰 값끼리 같이 크고, 작은 값끼리 같이 작은가”를 봅니다.
그래서 단조 관계(monotonic relationship) 를 잘 잡습니다.
직선형이 아니어도, 한 변수가 커질수록 다른 변수도 꾸준히 커지거나 작아지는 형태면 높은 상관이 나올 수 있습니다.
3.2 정의
동점이 없을 때는 다음 식으로 자주 표현합니다.
\rho_s = 1 - \frac{6 \sum d_i^2}{n(n^2-1)}
여기서
• d_i: 각 관측치의 두 변수 순위 차이
• n: 표본 수
동점(tie)이 있으면 단순 위 식보다 순위에 대한 피어슨 상관계수로 계산하는 방식이 일반적입니다.
즉, 스피어만 상관계수는 실무적으로 다음과 같이 이해하면 됩니다.
1. 각 변수의 값을 순위로 바꾼다.
2. 그 순위끼리 피어슨 상관계수를 구한다.
3.3 해석
• 범위는 [-1, 1]
• 1: 완전한 양의 단조 관계
• -1: 완전한 음의 단조 관계
• 0: 단조 관계가 약함
3.4 언제 쓰는가
스피어만 상관계수는 다음 상황에서 유용합니다.
• 데이터가 정규분포를 따르지 않을 때
• 이상치에 덜 민감한 지표가 필요할 때
• 변수 관계가 선형은 아니지만 단조적일 때
• 순서형 데이터(예: 만족도 1~5점)를 다룰 때
예: 고객 만족도와 재구매 의도, 등급과 선호도 등
⸻
켄달의 타우는 순위 쌍의 일치(concordant) 와 불일치(discordant) 를 기반으로 계산하는 상관계수입니다.
스피어만이 “순위의 차이”를 본다면,
켄달은 “쌍(pair)이 같은 방향으로 움직였는가”를 봅니다.
4.1 정의
두 관측치 쌍 (x_i, y_i), (x_j, y_j)를 비교했을 때:
• x_i < x_j 이고 y_i < y_j 이면 일치 쌍
• x_i < x_j 이고 y_i > y_j 이면 불일치 쌍
일반적인 형태는 다음과 같습니다.
\tau = \frac{C - D}{\binom{n}{2}}
여기서
• C: 일치 쌍 개수
• D: 불일치 쌍 개수
동점이 있으면 tau-b 같은 보정 버전을 사용하기도 합니다.
4.2 해석
• 범위는 [-1, 1]
• 1: 모든 쌍이 일치
• -1: 모든 쌍이 불일치
• 0: 일치와 불일치가 비슷함
4.3 스피어만과의 차이
스피어만은 “순위 차이의 크기”에 민감하고,
켄달은 “쌍의 일관성”에 더 직접적입니다.
실무적으로는 다음처럼 기억하면 됩니다.
• 스피어만: 계산이 직관적이고 흔히 사용됨
• 켄달: 표본이 작거나 순위 일치성 해석이 중요할 때 유리함
⸻
상호정보는 엄밀히 말하면 전통적 의미의 상관계수라기보다 의존성(dependence) 을 측정하는 정보이론 기반 지표입니다.
하지만 데이터 분석에서는 비선형 관계를 보는 도구로 자주 함께 다뤄집니다.
5.1 의미
상호정보는 한 변수를 알 때 다른 변수에 대한 불확실성이 얼마나 줄어드는지를 나타냅니다.
즉, 두 변수 사이에 공유되는 정보의 양입니다.
5.2 정의
이산형 변수의 경우 다음과 같이 정의됩니다.
I(X;Y) = \sum_x \sum_y p(x,y)\log \frac{p(x,y)}{p(x)p(y)}
연속형 변수의 경우 적분 형태로 확장됩니다.
I(X;Y) = \int \int p(x,y)\log \frac{p(x,y)}{p(x)p(y)} \, dx\,dy
5.3 해석
• 값이 클수록 두 변수는 서로 많은 정보를 공유함
• 값이 0이면 독립인 경우에 해당
• 선형 관계뿐 아니라 복잡한 비선형 관계도 포착 가능
5.4 언제 쓰는가
• 두 변수가 범주형일 때
• 선형 상관으로는 관계가 잘 안 잡힐 때
• 비선형이고 복잡한 관계를 탐지하고 싶을 때
⸻
피어슨, 스피어만, 켄달, 상호정보는 모두 “관계의 강도”를 본다는 점에서는 같지만, 실제로 보는 대상은 다릅니다.
• 피어슨: 선형 관계
• 스피어만: 순위 기반 단조 관계
• 켄달: 순위 쌍의 일치성
• 상호정보: 정보 공유량 / 비선형 의존성
정리하면,
데이터가 선형이면 피어슨,
순위 기반으로 보고 싶으면 스피어만,
쌍의 일치 여부가 중요하면 켄달,
비선형 구조까지 보고 싶으면 상호정보를 고려하면 됩니다.
⸻
7.1 피어슨 상관계수
import numpy as np
import pandas as pd
from scipy.stats import pearsonr
np.random.seed(0)
x = np.random.rand(100) 10
y = 3 x + np.random.randn(100) * 5
corr, p_value = pearsonr(x, y)
print("Pearson correlation:", corr)
print("p-value:", p_value)
7.2 스피어만 상관계수
from scipy.stats import spearmanr
corr, p_value = spearmanr(x, y)
print("Spearman correlation:", corr)
print("p-value:", p_value)
스피어만 상관계수는 순위를 기준으로 계산되기 때문에,
값 자체보다 순서 관계가 더 중요할 때 적합합니다.
7.3 켄달의 타우
from scipy.stats import kendalltau
corr, p_value = kendalltau(x, y)
print("Kendall tau:", corr)
print("p-value:", p_value)
7.4 상호정보
from sklearn.metrics import mutual_info_score
x_cat = np.array(['cat', 'dog', 'cat', 'cat', 'dog', 'dog', 'cat', 'dog', 'dog', 'cat'])
y_cat = np.array(['high', 'low', 'high', 'high', 'low', 'low', 'high', 'low', 'low', 'high'])
mi = mutual_info_score(x_cat, y_cat)
print("Mutual Information:", mi)
⸻
문제 1
피어슨 상관계수의 의미를 설명하세요.
정답: 두 변수 간의 선형 관계를 측정한다.
문제 2
비모수 상관계수의 대표적인 예로 옳지 않은 것은?
정답: 1) 피어슨 상관계수
이유: 피어슨은 대표적인 비모수 상관계수가 아니라, 선형 관계를 보는 대표 지표입니다.
문제 3
상호정보 상관계수의 의미를 설명하는 것을 모두 고르세요.
정답: 2) 두 변수 간의 비선형 관계를 측정한다.
정답: 3) 두 변수 간의 상호 정보를 측정한다.
⸻
실무에서는 상관계수를 “무조건 하나만” 고르는 방식보다, 데이터 특성에 맞게 선택하는 것이 중요합니다.
• 산점도가 직선 형태다 → 피어슨
• 이상치가 많다 → 스피어만 또는 켄달
• 순서형 데이터다 → 스피어만 또는 켄달
• 비선형 관계가 의심된다 → 상호정보
• 표본이 작고 해석이 명확해야 한다 → 켄달
• 가장 해석이 직관적인 값을 보고 싶다 → 피어슨
⸻
상관계수는 단순히 숫자 하나를 뽑는 도구가 아니라,
데이터가 어떤 형태의 관계를 갖는지 판단하게 해주는 탐색적 분석 도구입니다.
특히 다음 세 가지를 구분하면 혼동이 줄어듭니다.
1. 피어슨은 선형 관계
2. 스피어만은 순위 기반 단조 관계
3. 켄달은 순위 쌍의 일치성
4. 상호정보는 비선형 의존성
그리고 스피어만 상관계수는 말씀하신 것처럼 순위를 기준으로 계산됩니다.
그래서 값 자체의 크기보다, “더 큰 값이 더 큰 값과 함께 움직이는가”를 보는 데 유리합니다.
원하시면 다음 단계로는 이 글을 바탕으로 바로 올릴 수 있게 제목, 소제목, 문체를 더 블로그형으로 다듬은 버전도 정리해드릴 수 있습니다.
피어슨 상관계수가 이상치(outlier)에 약한 이유는 정의 자체가 평균과 분산(=제곱 기반 통계량)에 의존하기 때문입니다. 이걸 수식 구조로 보면 명확해집니다.
⸻
피어슨 상관계수는 다음과 같습니다.
r = \frac{\sum (x_i-\bar{x})(y_i-\bar{y})}{\sqrt{\sum (x_i-\bar{x})^2} \sqrt{\sum (y_i-\bar{y})^2}}
여기서 중요한 포인트는 3가지입니다.
(1) 평균 중심화(mean-centering)
• 모든 값이 \bar{x}, \bar{y} 기준으로 이동됨
• 이상치 하나가 들어오면 평균 자체가 이동
→ 전체 데이터의 기준점이 왜곡됨
⸻
(2) 제곱 항(square term)
• 분모에 (x_i - \bar{x})^2, (y_i - \bar{y})^2 존재
이건 매우 중요합니다.
→ 이상치는 평균에서 멀기 때문에
→ 편차가 크고
→ 제곱되면서 영향력이 기하급수적으로 커짐
예:
• 일반 데이터: 편차 2 → 2^2 = 4
• 이상치: 편차 10 → 10^2 = 100
→ 단 하나의 이상치가 분산 구조를 지배
⸻
(3) 공분산 구조 (분자)
(x_i - \bar{x})(y_i - \bar{y})
이 항도 이상치에 매우 민감합니다.
• 이상치가 같은 방향이면 → 상관계수 과대추정
• 반대 방향이면 → 상관계수 과소추정 또는 부호 반전
⸻
정상 데이터가 이런 구조라고 가정:
x 증가 → y 증가 (선형 관계)
그런데 단 하나의 이상치가 들어옴:
• x는 매우 큼
• y는 매우 작음
이 경우:
• 기존 패턴: 양의 상관
• 이상치: 강한 음의 신호
→ 결과: 전체 상관계수가 급격히 감소하거나 음수로 뒤집힘
즉, 피어슨은 “전체 패턴”보다 극단값 하나에 의해 방향이 바뀔 수 있음
⸻
비교를 통해 더 명확해집니다.
스피어만
• 값 → 순위(rank) 로 변환
• 극단값이어도 “1등 or 꼴등” 정도 영향
→ 거리 크기 정보가 사라짐 → 이상치 영향 감소
⸻
켄달의 타우
• 값 자체를 안 쓰고
• 쌍의 일치/불일치만 판단
→ 이상치가 있어도 “몇 개 pair만 영향”
⸻
피어슨 vs 비모수 요약
특성 피어슨 스피어만 / 켄달
기반 값 자체 순위
민감도 매우 높음 낮음
이상치 영향 큼 제한적
⸻
피어슨 상관계수는
\text{“평균 중심화 + 제곱 기반 분산 + 공분산”}
구조이기 때문에,
→ 극단값이 분산과 공분산을 동시에 왜곡
→ 결과적으로 상관계수 전체가 크게 흔들림
⸻
이건 단순 개념보다 더 중요합니다.
(1) 산점도 먼저 확인
• 상관계수 보기 전에 반드시 시각화
(2) 이상치 제거 or 변환
• IQR 기반 제거
• log transform 등
(3) 대체 지표 사용
• 스피어만 (기본 대안)
• 켄달 (소표본 안정성)
(4) Robust correlation
• biweight midcorrelation 같은 robust 방법도 존재
⸻
결론
피어슨 상관계수가 이상치에 약한 이유는 단순히 “선형이라서”가 아니라,
→ 평균 + 제곱 기반 분산 + 공분산 구조 자체가 극단값에 매우 민감하기 때문입니다.
그래서 실무에서는
“피어슨은 계산하기 전에 항상 산점도를 먼저 본다”
이게 거의 기본 규칙입니다.
⸻
원하면 다음 단계로
“이상치 하나로 피어슨 값이 어떻게 깨지는지”를 실제 수치 시뮬레이션으로 보여줄 수 있습니다.