⭐ 상관행렬 — 속성 간 연관성 파악
교수님이 '중요' 표시하신 핵심 주제. 공분산에서 출발해 피어슨 상관계수·상관행렬까지. 정의 → 실무 코드 → 시각화 → R 도구까지 한 번에.
1. 왜 필요한가?
데이터사이언스는 개별 변수의 분포에서 끝나지 않습니다. 여러 속성이 함께 움직이는 패턴을 읽어야 비로소 "왜 이런 결과가 나오는지" 설명할 수 있습니다.
charges(보험료) 가 높은 사람은 어떤 속성이 같이 큰가?- 평균기온이 오르면 풍속·강수량은 어떻게 움직이는가?
이 질문에 답하는 가장 고전적이고 강력한 도구가 상관행렬 입니다.
2. 수학적 정의 — 빠른 복습
📐 자세한 손계산은 별도 페이지: 기술통계 — 편차 · 분산 · 표준편차 · 공분산 · 상관계수 에서 정의 → 손계산 예제 → 풀이 연습까지 다룹니다.
여기선 핵심 식만 한눈에 정리.
공분산 — 두 변수가 같이 움직이는 정도
부호만 의미가 명확 (+ 같이 증가 / − 반대로). 크기는 단위 의존.
피어슨 상관계수 — 단위를 없앤 [-1, 1] 척도
핵심 성질:
ρ ∈ [−1, 1], 단위 불변, 대칭 (ρ(X,Y) = ρ(Y,X))ρ = 0은 "선형 관계 없음" 일 뿐, 독립과 동치 아님 (비선형은 있을 수 있음)
3. 인터랙티브 데모 — ρ 를 바꿔 보세요
피어슨 상관계수 — 산점도 인터랙티브
중요목표 ρ (설정값)
0.70
실제 r (데이터)
0.638
해석
약한 양
0.70
42
슬라이더를 움직여 ρ 의 부호와 크기에 따라 산점도와 회귀선이 어떻게 변하는지 확인해 보세요. N=80 개의 표본에서 계산한 실제 r 은 설정값 ρ 에 근접하지만 완전히 같지는 않습니다.
- ρ 를 양수로 두면 점들이 우상향 줄에 모이고, 음수로 두면 우하향.
- 80 개 표본에서 계산한 실제 r 은 설정값 ρ 와 살짝 다릅니다 — 이것이 표본 상관계수의 오차.
4. 상관행렬 (Correlation Matrix)
개 변수에 대한 모든 쌍의 상관계수를 한 행렬에 담은 것:
세 가지 성질:
- 대칭 행렬 —
- 대각원소 = 1 — 자기 자신과는 항상 완전 상관
- 양의 준정부호 (positive semi-definite)
4.1 공분산 행렬과의 관계
를 공분산 행렬, 이라 하면:
→ 상관행렬 = 공분산 행렬의 표준화 버전.
5. 파이썬 실무 — df.corr()
PYTHON
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
import seaborn as sns
insurance = pd.read_csv('insurance.csv')
corr_info = insurance.corr()df.corr()는 연속형 속성만 자동으로 계산. 범주형은 제외.method옵션:'pearson'(기본) ·'spearman'·'kendall'
5.1 특정 타겟과의 관계
PYTHON
corr_info['charges']TEXT
age 0.29
bmi 0.20
children 0.07
charges 1.00→ charges 와 가장 상관이 큰 순서: age > bmi > children.
5.2 Seaborn 히트맵 — 상삼각 마스킹
PYTHON
plt.figure(figsize=(10, 5))
mask = np.zeros_like(corr_info, dtype=bool)
mask[np.triu_indices_from(mask)] = True # 상삼각 숨김
sns.heatmap(corr_info, mask=mask, cmap='Reds', annot=True)- 상관행렬은 대칭이므로 대각 기준 한쪽만 표시해 가독성 ↑
6. 인터랙티브 히트맵
상관행렬 히트맵 — df.corr() 를 화면으로
중요보험료(charges)와 나이·BMI·자녀수 간의 관계. charges 와 age·bmi 가 정적 상관.
마스크 (type=)
색 범례
-10+1
+1: 완전 정비례
0: 선형 관계 없음
-1: 완전 반비례
type=로lower/upper/full전환 (Rggcorrplot과 동일 개념)- 색 범례: 파랑(−) · 회색(0) · 빨강(+)
- 절댓값이 클수록 셀 색이 진해짐
7. R 에서 같은 일 — ggcorrplot
R
install.packages('ggcorrplot')
library(tidyverse); library(ggcorrplot); library(colorspace)
corr <- round(cor(mtcars), 1)
ggcorrplot(corr,
hc.order = TRUE, type = 'lower', lab = TRUE,
outline.color = 'white',
colors = diverge_hcl(3, palette = 'Blue Red2'))| Argument | 역할 |
|---|---|
method | 'square' / 'circle' |
type | 'full' / 'lower' / 'upper' |
hc.order | 계층 클러스터링 기반 정렬 |
lab | 셀에 상관계수 숫자 표시 |
p.mat | p-value 행렬 (유의하지 않은 셀 표시용) |
sig.level | 유의 수준 기준 (기본 0.05) |
insig | 'blank' / 'pch' — 유의 안 한 셀 처리 |
8. 해석 가이드
| r 절댓값 | 일반적 해석 |
|---|---|
| 0.9 ~ 1.0 | 매우 강한 상관 |
| 0.7 ~ 0.9 | 강한 상관 |
| 0.5 ~ 0.7 | 중간 상관 |
| 0.3 ~ 0.5 | 약한 상관 |
| 0.0 ~ 0.3 | 거의 없음 |
주의:
- 선형 관계만 측정 → 같은 비선형은 이 될 수 있음
- 인과관계 ≠ 상관 (Correlation does not imply causation)
- 이상치(outlier) 에 민감 → 히트맵 그리기 전 시각 탐색 필수
📝 Checkpoint (시험 대비)
Quiz
상관행렬 Checkpoint (시험 대비)
Q 1 / 7