BioPlayground

🧬
목록으로

히트맵과 산점도 — 상관관계 시각화

두 변수 사이의 관계를 산점도로 보고, 여러 변수의 상관관계를 히트맵으로 한눈에 파악하는 방법을 배웁니다.

중급
|
10
|
검증 완료 (2026-07)
히트맵산점도상관관계피어슨 상관계수correlation matrix
진행률0/14 (0%)

히트맵과 산점도 — 상관관계 시각화

이 토픽을 마치면

두 변수의 관계를 산점도로 시각화하고, 여러 변수 간 상관관계를 히트맵으로 한눈에 파악할 수 있습니다.


상관관계란

"키가 크면 몸무게도 무겁다" — 이것이 양의 상관관계입니다. 하나가 올라가면 다른 것도 올라가는 경향.

"온도가 높으면 핫초코 판매량이 줄어든다" — 이것이 음의 상관관계입니다. 하나가 올라가면 다른 것은 내려가는 경향.

이 "경향의 강도"를 숫자로 표현한 것이 상관계수입니다.

의미
+1.0완벽한 양의 상관 (같이 올라감)
+0.7 ~ +0.9강한 양의 상관
+0.3 ~ +0.7약한~보통 양의 상관
0상관 없음
-0.3 ~ -0.7약한~보통 음의 상관
-1.0완벽한 음의 상관 (반대로 움직임)

산점도 — 두 변수 관계 보기

python
import seaborn as sns
import matplotlib.pyplot as plt
sns.scatterplot(data=df, x='experience', y='salary')
plt.title('경력 vs 연봉')
plt.show()

점이 오른쪽 위로 모이면 양의 상관, 오른쪽 아래로 모이면 음의 상관, 점이 사방에 흩어져 있으면 상관 없음입니다.

추세선 추가

python
sns.regplot(data=df, x='experience', y='salary',
scatter_kws={'alpha': 0.5},
line_kws={'color': 'red'})

regplot은 산점도 + 회귀선을 같이 그립니다. 선이 얼마나 점들 사이를 잘 관통하는지 보면 상관 강도를 시각적으로 판단할 수 있습니다.


상관 행렬 — 한 번에 여러 변수

변수가 2개면 산점도 하나면 됩니다. 하지만 10개면? 모든 조합을 보려면 45개의 산점도가 필요합니다. 이때 상관 행렬을 씁니다.

python
# 상관계수 행렬 계산
corr = df[['salary', 'experience', 'age', 'projects']].corr()
print(corr)
text
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

숫자 행렬이라 한눈에 안 들어옵니다. 이걸 색상으로 변환한 것이 히트맵입니다.


히트맵 — 상관 행렬의 시각화

python
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이 유용합니다:

python
sns.pairplot(df[['salary', 'experience', 'age', 'projects']],
diag_kind='kde')
plt.show()
  • 대각선: 각 변수의 분포 (히스토그램 or KDE)
  • 나머지: 모든 변수 쌍의 산점도

변수가 5개 이상이면 그래프가 너무 작아져서 읽기 어렵습니다. 히트맵으로 전체 경향을 보고, 관심 있는 쌍만 산점도로 확대하는 게 효율적입니다.


핵심

산점도는 두 변수의 관계를, 히트맵은 여러 변수의 상관관계를 한눈에 보여줍니다. 상관계수는 -1(완벽 음의 상관) ~ +1(완벽 양의 상관) — 0이면 직선 관계 없음. 상관 ≠ 인과 — 숫자만 보지 말고 항상 산점도로 확인하세요.