히트맵과 산점도 — 상관관계 시각화
이 토픽을 마치면
두 변수의 관계를 산점도로 시각화하고, 여러 변수 간 상관관계를 히트맵으로 한눈에 파악할 수 있습니다.
상관관계란
"키가 크면 몸무게도 무겁다" — 이것이 양의 상관관계입니다. 하나가 올라가면 다른 것도 올라가는 경향.
"온도가 높으면 핫초코 판매량이 줄어든다" — 이것이 음의 상관관계입니다. 하나가 올라가면 다른 것은 내려가는 경향.
이 "경향의 강도"를 숫자로 표현한 것이 상관계수입니다.
| 값 | 의미 |
|---|---|
| +1.0 | 완벽한 양의 상관 (같이 올라감) |
| +0.7 ~ +0.9 | 강한 양의 상관 |
| +0.3 ~ +0.7 | 약한~보통 양의 상관 |
| 0 | 상관 없음 |
| -0.3 ~ -0.7 | 약한~보통 음의 상관 |
| -1.0 | 완벽한 음의 상관 (반대로 움직임) |
산점도 — 두 변수 관계 보기
import seaborn as snsimport matplotlib.pyplot as plt
sns.scatterplot(data=df, x='experience', y='salary')plt.title('경력 vs 연봉')plt.show()점이 오른쪽 위로 모이면 양의 상관, 오른쪽 아래로 모이면 음의 상관, 점이 사방에 흩어져 있으면 상관 없음입니다.
추세선 추가
sns.regplot(data=df, x='experience', y='salary', scatter_kws={'alpha': 0.5}, line_kws={'color': 'red'})regplot은 산점도 + 회귀선을 같이 그립니다. 선이 얼마나 점들 사이를 잘 관통하는지 보면 상관 강도를 시각적으로 판단할 수 있습니다.
상관 행렬 — 한 번에 여러 변수
변수가 2개면 산점도 하나면 됩니다. 하지만 10개면? 모든 조합을 보려면 45개의 산점도가 필요합니다. 이때 상관 행렬을 씁니다.
# 상관계수 행렬 계산corr = df[['salary', 'experience', 'age', 'projects']].corr()print(corr)salary experience age projects
salary 1.000 0.850 0.620 0.430
experience 0.850 1.000 0.780 0.350
age 0.620 0.780 1.000 0.120
projects 0.430 0.350 0.120 1.000숫자 행렬이라 한눈에 안 들어옵니다. 이걸 색상으로 변환한 것이 히트맵입니다.
히트맵 — 상관 행렬의 시각화
plt.figure(figsize=(8, 6))sns.heatmap(corr, annot=True, # 셀에 숫자 표시 fmt='.2f', # 소수점 2자리 cmap='coolwarm', # 빨강(양) ~ 파랑(음) vmin=-1, vmax=1, # 색상 범위 고정 square=True, # 정사각형 셀 linewidths=0.5) # 셀 사이 선plt.title('변수 간 상관관계')plt.tight_layout()plt.show()히트맵에서 읽는 방법:
- 빨간 셀 — 강한 양의 상관 (같이 올라감)
- 파란 셀 — 강한 음의 상관 (반대로 움직임)
- 흰 셀 — 상관 없음 (독립적)
- 대각선 — 항상 1.0 (자기 자신과의 상관)
실전 해석 주의
상관 ≠ 인과
"아이스크림 판매량"과 "익사 사고 건수"는 상관계수가 높습니다. 아이스크림이 사람을 물에 빠뜨리는 건 아닙니다 — 둘 다 "여름(기온)"이라는 숨겨진 변수의 영향입니다.
상관관계는 **"같이 움직인다"**는 사실만 말해줍니다. **"하나가 다른 것을 일으킨다"**는 인과관계와 다릅니다.
비선형 관계
상관계수(피어슨)는 직선 관계만 측정합니다. U자 형태의 관계(예: 스트레스가 적당하면 성과가 높지만 너무 많으면 떨어짐)는 상관계수가 0에 가까울 수 있습니다. 항상 산점도로 눈으로 확인하세요.
pairplot — 산점도 행렬
변수가 적으면 모든 조합의 산점도를 격자로 보여주는 pairplot이 유용합니다:
sns.pairplot(df[['salary', 'experience', 'age', 'projects']], diag_kind='kde')plt.show()- 대각선: 각 변수의 분포 (히스토그램 or KDE)
- 나머지: 모든 변수 쌍의 산점도
변수가 5개 이상이면 그래프가 너무 작아져서 읽기 어렵습니다. 히트맵으로 전체 경향을 보고, 관심 있는 쌍만 산점도로 확대하는 게 효율적입니다.
핵심
산점도는 두 변수의 관계를, 히트맵은 여러 변수의 상관관계를 한눈에 보여줍니다. 상관계수는 -1(완벽 음의 상관) ~ +1(완벽 양의 상관) — 0이면 직선 관계 없음. 상관 ≠ 인과 — 숫자만 보지 말고 항상 산점도로 확인하세요.