1 개요
두 확률변수 사이에 관계가 있다는 것은 독립이 아니라는 의미이다. 그러나 관계가 얼마나 강한지를 수량화하려면 독립/비독립의 이분법으로는 부족하다 (Casella & Berger, 2002, Ch.4).
실무 예시로 이해하기: - 물의 무게 \(X\) 와 부피 \(Y\) : 거의 완벽한 선형 관계 (매우 강한 상관, \(\rho \approx 0.999\) ) - 사람의 체중 \(X\) 와 키 \(Y\) : 관계가 있으되 약한 상관 ( \(\rho \approx 0.5\) ) - 주사위 두 개를 던질 때 눈의 합 \(X\) 와 차 \(Y\) : 관계가 있으나 더 약한 상관 - 독립적으로 던진 주사위 \(X\) 와 \(Y\) : 무상관 ( \(\rho = 0\) )
공분산(covariance)과 상관계수(correlation)는 이 관계의 강도를 정량화하는 도구이다. 독립/비독립이 “스위치”라면, 상관계수는 “슬라이더”이다.
2 공분산 (Covariance)
\[ \text{Cov}(X, Y) = E[(X - \mu_X)(Y - \mu_Y)] \]
직관: \(X\) 가 평균보다 클 때 \(Y\) 도 평균보다 크면 \((X - \mu_X)(Y - \mu_Y) > 0\) 이고, \(X\) 가 평균보다 작을 때 \(Y\) 도 평균보다 작으면 역시 양수이다. 따라서 같은 방향으로 함께 변하면 공분산이 양수, 반대 방향이면 음수이다.
2.1 계산 공식
\[ \text{Cov}(X, Y) = E[XY] - E[X] \cdot E[Y] \]
이 공식이 실무에서 더 자주 사용된다. \(E[XY]\) , \(E[X]\) , \(E[Y]\) 를 각각 구하면 공분산을 바로 계산할 수 있다.
2.2 공분산의 한계
공분산 자체는 스케일에 의존한다. \(\text{Cov}(X, Y) = 3\) 이라는 값만으로는 관계가 강한지 약한지 판단할 수 없다. \(X\) 와 \(Y\) 의 단위를 바꾸면 공분산도 바뀐다. 이 문제를 해결하는 것이 상관계수이다.
3 상관계수 (Correlation Coefficient)
\[ \rho_{XY} = \frac{\text{Cov}(X, Y)}{\sigma_X \sigma_Y} \]
상관계수는 공분산을 각 변수의 표준편차로 나누어 무차원(dimensionless)으로 만든 것이다.
3.1 상관계수의 범위
\(-1 \leq \rho_{XY} \leq 1\)
\(|\rho_{XY}| = 1\) 인 것은 \(P(Y = aX + b) = 1\) 인 \(a \neq 0\) , \(b\) 가 존재하는 것과 동치이다. \(\rho = 1\) 이면 \(a > 0\) (양의 선형), \(\rho = -1\) 이면 \(a < 0\) (음의 선형)이다.
\(|\rho| = 1\) 은 완벽한 선형 관계를 의미한다. (a)의 증명은 코시-슈바르츠 부등식에 의한다: \(|\text{Cov}(X, Y)|^2 \leq \sigma_X^2 \sigma_Y^2\) .
3.2 상관계수의 해석
| \(\rho\) 범위 | 해석 | 예시 |
|---|---|---|
| \(\rho = 1\) | 완벽한 양의 선형 관계 | 물의 무게와 부피 |
| \(0.7 \leq \rho < 1\) | 강한 양의 상관 | 키와 체중 (일부 모집단) |
| \(0 < \rho < 0.7\) | 약한 양의 상관 | 공부 시간과 성적 |
| \(\rho = 0\) | 선형 무상관 | 독립이면 반드시 여기 |
| \(\rho < 0\) | 음의 상관 | 속도와 도착 시간 |
| \(\rho = -1\) | 완벽한 음의 선형 관계 | 할인율과 채권 가격 |
4 합의 분산
\[ \text{Var}(aX + bY) = a^2 \text{Var}(X) + b^2 \text{Var}(Y) + 2ab \, \text{Cov}(X, Y) \]
\(X\) 와 \(Y\) 가 독립이면:
\[ \text{Var}(aX + bY) = a^2 \text{Var}(X) + b^2 \text{Var}(Y) \]
이 공식의 실무적 해석:
- 양의 상관 (\(\text{Cov} > 0\)): \(X + Y\) 의 분산이 개별 분산의 합보다 크다. 두 변수가 함께 극단값을 취하므로 합의 변동이 증폭된다.
- 음의 상관 (\(\text{Cov} < 0\)): \(X + Y\) 의 분산이 개별 분산의 합보다 작다. 한 변수의 극단값이 다른 변수의 반대 극단으로 상쇄된다.
- 포트폴리오 이론: 음의 상관을 가진 자산을 결합하면 전체 위험(분산)을 줄일 수 있다.
5 무상관과 독립: 왜 같지 않은가
\(X\) 와 \(Y\) 가 독립이면 \(\text{Cov}(X, Y) = 0\) 이고 \(\rho_{XY} = 0\) 이다.
그러나 역은 성립하지 않는다. 무상관( \(\rho = 0\) )이지만 독립이 아닌 예시 (Casella & Berger, 2002, Ch.4):
\(X\) 가 0에 대해 대칭인 분포를 따르고 \(Y = I(|X - \theta| < 2)\) 이면:
\[ E[XY] = \int_{-2}^{2} (t + \theta) f(t) \, dt = \theta \int_{-2}^{2} f(t) \, dt = E[X] \cdot E[Y] \]
대칭성에 의해 \(\int_{-2}^{2} t \, f(t) \, dt = 0\) 이므로 \(\text{Cov}(X, Y) = 0\) 이다. 그러나 \(Y\) 는 \(X\) 에 의해 결정되므로 독립이 아니다.
핵심: 공분산과 상관계수는 선형 관계만 포착한다. 비선형 관계( \(Y = X^2\) , \(Y = \sin(X)\) 등)는 감지하지 못할 수 있다.
유일한 예외: 다변량 정규분포에서는 무상관과 독립이 동치이다.
6 응용 분야
| 분야 | 개념 | 구체적 활용 |
|---|---|---|
| 포트폴리오 이론 | 합의 분산 | \(\text{Var}(w_1 X + w_2 Y)\) 최소화 = 분산투자 |
| 회귀분석 | 상관계수 | \(R^2 = \rho^2\) (단순 선형 회귀에서) |
| PCA | 공분산행렬 | 고유값 분해로 주성분 추출 |
| 신호처리 | 공분산 | 자기공분산(autocovariance)으로 시계열 특성 파악 |
| 피처 선택 | 상관계수 | 다중공선성 진단, 변수 제거 기준 |
| ANOVA | 합의 분산 | \(F\)-통계량 유도 |
7 코드 예시
7.1 Step 1: 순수 Python 구현 (원리 이해)
공분산과 상관계수를 정의에서 직접 계산한다.
import math
import random
random.seed(42)
# 결합 PDF: f(x,y) = 1, 0 < x < 1, x < y < x+1 (Casella Example 4.5.4)
n = 200000
cov_sum = 0
sum_x, sum_y, sum_x2, sum_y2, sum_xy = 0, 0, 0, 0, 0
for _ in range(n):
x = random.random() # X ~ Uniform(0, 1)
y = x + random.random() # Y|X=x ~ Uniform(x, x+1)
sum_x += x
sum_y += y
sum_x2 += x**2
sum_y2 += y**2
sum_xy += x * y
mu_x = sum_x / n
mu_y = sum_y / n
var_x = sum_x2 / n - mu_x**2
var_y = sum_y2 / n - mu_y**2
cov_xy = sum_xy / n - mu_x * mu_y
rho = cov_xy / math.sqrt(var_x * var_y)
print("f(x,y) = 1, 0 < x < 1, x < y < x+1")
print(f" E[X] = {mu_x:.4f} (이론: 0.5)")
print(f" E[Y] = {mu_y:.4f} (이론: 1.0)")
print(f" Var(X) = {var_x:.4f} (이론: 1/12 = {1/12:.4f})")
print(f" Var(Y) = {var_y:.4f} (이론: 1/6 = {1/6:.4f})")
print(f" Cov(X,Y) = {cov_xy:.4f} (이론: 1/12 = {1/12:.4f})")
print(f" rho = {rho:.4f} (이론: 1/sqrt(2) = {1/math.sqrt(2):.4f})")7.2 Step 2: scipy/numpy 구현 (실무 활용)
무상관이지만 독립이 아닌 경우를 시각화한다.
import numpy as np
from scipy import stats
import matplotlib.pyplot as plt
np.random.seed(42)
n = 10000
fig, axes = plt.subplots(1, 3, figsize=(14, 4))
# 1) 양의 상관
rho = 0.8
samples = np.random.multivariate_normal([0, 0], [[1, rho], [rho, 1]], n)
ax = axes[0]
ax.scatter(samples[:, 0], samples[:, 1], alpha=0.1, s=3)
ax.set_title(f"Positive corr (rho={rho})")
ax.set_xlabel("X")
ax.set_ylabel("Y")
# 2) 무상관이지만 비독립: Y = X^2
X = np.random.normal(0, 1, n)
Y_dep = X**2
ax = axes[1]
ax.scatter(X, Y_dep, alpha=0.1, s=3, c='orange')
corr_val = np.corrcoef(X, Y_dep)[0, 1]
ax.set_title(f"Uncorrelated but dependent\n(rho={corr_val:.3f}, Y=X^2)")
ax.set_xlabel("X")
ax.set_ylabel("Y = X^2")
# 3) 합의 분산: 상관에 따른 변화
rho_vals = np.linspace(-0.99, 0.99, 100)
var_sum = 1 + 1 + 2 * rho_vals # Var(X) = Var(Y) = 1, Cov = rho
ax = axes[2]
ax.plot(rho_vals, var_sum, 'b-', linewidth=2)
ax.axhline(y=2, color='gray', linestyle='--', alpha=0.5, label="Independent (rho=0)")
ax.fill_between(rho_vals, var_sum, 2, where=var_sum > 2, alpha=0.2, color='red', label="Amplified")
ax.fill_between(rho_vals, var_sum, 2, where=var_sum < 2, alpha=0.2, color='green', label="Reduced")
ax.set_xlabel(r"$\rho$")
ax.set_ylabel("Var(X + Y)")
ax.set_title("Effect of Correlation on Sum Variance")
ax.legend(fontsize=8)
plt.tight_layout()
plt.show()8 관련 주제
선행 지식
- 기댓값과 분산 – 공분산의 기초
- 조건부분포와 독립성 – 독립의 정의
- 확률 부등식과 항등식 – 코시-슈바르츠로 \(|\rho| \leq 1\) 증명
후속 주제
관련 개념
- 계층모형과 혼합분포 – 전체 분산의 법칙
- 다변량 확률변수 개요 – Ch.4 전체 조감