⭐ 상관행렬 — 속성 간 연관성 파악

교수님이 '중요' 표시하신 핵심 주제. 공분산에서 출발해 피어슨 상관계수·상관행렬까지. 정의 → 실무 코드 → 시각화 → R 도구까지 한 번에.


1. 왜 필요한가?

데이터사이언스는 개별 변수의 분포에서 끝나지 않습니다. 여러 속성이 함께 움직이는 패턴을 읽어야 비로소 "왜 이런 결과가 나오는지" 설명할 수 있습니다.

  • charges(보험료) 가 높은 사람은 어떤 속성이 같이 큰가?
  • 평균기온이 오르면 풍속·강수량은 어떻게 움직이는가?

이 질문에 답하는 가장 고전적이고 강력한 도구가 상관행렬 입니다.


2. 수학적 정의 — 빠른 복습

📐 자세한 손계산은 별도 페이지: 기술통계 — 편차 · 분산 · 표준편차 · 공분산 · 상관계수 에서 정의 → 손계산 예제 → 풀이 연습까지 다룹니다.

여기선 핵심 식만 한눈에 정리.

공분산 — 두 변수가 같이 움직이는 정도

부호만 의미가 명확 (+ 같이 증가 / − 반대로). 크기는 단위 의존.

피어슨 상관계수 — 단위를 없앤 [-1, 1] 척도

핵심 성질:

  • ρ ∈ [−1, 1], 단위 불변, 대칭 (ρ(X,Y) = ρ(Y,X))
  • ρ = 0 은 "선형 관계 없음" 일 뿐, 독립과 동치 아님 (비선형은 있을 수 있음)

3. 인터랙티브 데모 — ρ 를 바꿔 보세요

피어슨 상관계수 — 산점도 인터랙티브

중요
XY
목표 ρ (설정값)
0.70
실제 r (데이터)
0.638
해석
약한 양
0.70
42

슬라이더를 움직여 ρ 의 부호와 크기에 따라 산점도와 회귀선이 어떻게 변하는지 확인해 보세요. N=80 개의 표본에서 계산한 실제 r 은 설정값 ρ 에 근접하지만 완전히 같지는 않습니다.

  • ρ 를 양수로 두면 점들이 우상향 줄에 모이고, 음수로 두면 우하향.
  • 80 개 표본에서 계산한 실제 r 은 설정값 ρ 와 살짝 다릅니다 — 이것이 표본 상관계수의 오차.

4. 상관행렬 (Correlation Matrix)

개 변수에 대한 모든 쌍의 상관계수를 한 행렬에 담은 것:

세 가지 성질:

  1. 대칭 행렬
  2. 대각원소 = 1 — 자기 자신과는 항상 완전 상관
  3. 양의 준정부호 (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 가 정적 상관.

agebmichildrenchargesagebmichildrencharges1.000.111.00-0.050.061.000.280.42-0.101.00
마스크 (type=)
색 범례
-10+1
+1: 완전 정비례
0: 선형 관계 없음
-1: 완전 반비례
  • type=lower / upper / full 전환 (R ggcorrplot 과 동일 개념)
  • 색 범례: 파랑(−) · 회색(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.matp-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

피어슨 상관계수의 정의로 옳은 것은?


🔗 정리

  • 판다스 기본 으로 돌아가 Series·DataFrame 을 복습
  • 그룹핑·재구조화 에서 전처리한 DataFrame 에 df.corr() 를 적용
  • 실제 보험 데이터로 age → bmi → children 순의 상관 강도 재현해 보기