데이터 사이언스 - 4. 탐색적 데이터 분석 (EDA) (4.3 상관관계 분석)

2025. 3. 20. 15:45데이터 분석/데이터 사이언스

4.3 상관관계 분석

상관관계 분석은 변수 간의 관계를 정량적으로 측정하는 과정이다.
변수 간 강한 상관관계가 존재하면 예측 모델에서 다중공선성 문제(VIF, Variance Inflation Factor)가 발생할 수 있으므로 이를 확인하는 것이 중요하다.

이 장에서는 피어슨 상관계수, 스피어만 상관계수, 다중공선성(VIF) 분석 방법을 다룬다.


4.3.1 상관관계란?

상관관계(Correlation)

  • 두 변수 간 서로 얼마나 강한 관계가 있는지를 나타내는 값
  • 상관계수(Correlation Coefficient)로 측정하며, -1 ~ 1 사이의 값을 가짐

상관계수 해석

  • 1에 가까울수록 강한 양의 상관관계 (한 변수가 증가하면 다른 변수도 증가)
  • -1에 가까울수록 강한 음의 상관관계 (한 변수가 증가하면 다른 변수는 감소)
  • 0에 가까울수록 관계가 없음

4.3.2 피어슨 상관계수 (Pearson Correlation Coefficient)

피어슨 상관계수(Pearson’s Correlation Coefficient, r)선형 관계를 측정하는 대표적인 방법이다.

  • 연속형 변수 간의 상관관계를 분석하는 데 사용
  • 데이터가 정규분포를 따를 때 적합

피어슨 상관계수 공식

피어슨 상관계수 특징

  • 선형적 관계(linear relationship)를 측정
  • 값의 크기(scale)에 영향을 받지 않음
  • 단점: 비선형 관계를 측정할 수 없음

피어슨 상관계수 계산 예제

import pandas as pd
import seaborn as sns

# 샘플 데이터 생성
df = sns.load_dataset("tips")

# 피어슨 상관계수 계산
pearson_corr = df.corr(method="pearson")
print(pearson_corr)

Heatmap을 활용한 시각화

import matplotlib.pyplot as plt
import seaborn as sns

plt.figure(figsize=(8,6))
sns.heatmap(pearson_corr, annot=True, cmap="coolwarm", fmt=".2f", linewidths=0.5)
plt.title("Pearson Correlation Heatmap")
plt.show()

4.3.3 스피어만 상관계수 (Spearman Correlation Coefficient)

스피어만 상관계수(Spearman’s Rank Correlation Coefficient, ρ)비선형 관계를 측정하는 방법이다.

  • 데이터가 순위(rank) 형태일 때 적합
  • 데이터가 정규분포를 따르지 않을 때 사용

스피어만 상관계수 공식

  • d_i : 두 변수의 순위 차이
  • n : 데이터 개수

스피어만 상관계수 특징

  • 선형 관계뿐만 아니라 비선형 관계도 측정 가능
  • 이상치(Outlier)의 영향을 덜 받음
  • 단점: 순위(rank) 정보만 사용하므로 정밀도가 낮을 수 있음

스피어만 상관계수 계산 예제

# 스피어만 상관계수 계산
spearman_corr = df.corr(method="spearman")
print(spearman_corr)

# Heatmap 시각화
plt.figure(figsize=(8,6))
sns.heatmap(spearman_corr, annot=True, cmap="coolwarm", fmt=".2f", linewidths=0.5)
plt.title("Spearman Correlation Heatmap")
plt.show()

피어슨과 스피어만 비교

비교 항목 피어슨 상관계수 스피어만 상관계수
측정 방식 선형 관계 순위 기반 관계
데이터 형태 연속형 변수 (정규분포) 순서형 변수, 비선형 데이터
이상치 영향 영향을 많이 받음 영향을 덜 받음

4.3.4 다중공선성 (VIF, Variance Inflation Factor) 분석

다중공선성(Multicollinearity)이란 설명 변수(독립 변수)들 간의 상관관계가 매우 높은 경우를 의미한다.
이 경우 모델의 신뢰성이 떨어지고, 특정 변수가 지나치게 영향력을 가질 수 있다.

VIF (분산 팽창 계수, Variance Inflation Factor)란?

  • VIF 값이 클수록 다중공선성이 높음
  • VIF > 10 → 다중공선성이 강함 (해결 필요)
  • VIF > 5 → 다중공선성이 의심됨 (주의 필요)
  • VIF ≈ 1 → 다중공선성이 없음 (이상적)

VIF 계산 공식

  • R^2_i : 변수 XiX_i를 다른 변수들로 회귀 분석했을 때의 결정 계수

VIF 계산 예제

import pandas as pd
import numpy as np
from statsmodels.stats.outliers_influence import variance_inflation_factor
from sklearn.preprocessing import StandardScaler

# 샘플 데이터 생성
df = sns.load_dataset("tips")[["total_bill", "tip", "size"]]

# 데이터 표준화 (스케일 조정)
scaler = StandardScaler()
df_scaled = pd.DataFrame(scaler.fit_transform(df), columns=df.columns)

# VIF 계산
vif_data = pd.DataFrame()
vif_data["Feature"] = df_scaled.columns
vif_data["VIF"] = [variance_inflation_factor(df_scaled.values, i) for i in range(df_scaled.shape[1])]

print(vif_data)

VIF 해석 예시

Feature VIF
total_bill 6.4
tip 4.2
size 2.1
  • total_bill의 VIF 값이 5보다 크므로 다중공선성이 의심됨
  • 해결 방법: 해당 변수를 제거하거나, 차원 축소(PCA) 기법을 적용

4.3.5 상관관계 분석 방법 비교

분석 방법 설명 사용 예시
피어슨 상관계수 선형 관계 분석 연속형 변수 간 관계 분석
스피어만 상관계수 비선형 관계 분석 순위 기반 변수, 이상치가 많은 경우
VIF 분석 다중공선성 확인 머신러닝 모델에서 다중공선성 문제 해결

결론

변수 간 관계를 분석하는 것은 데이터 이해 및 머신러닝 모델 성능 향상을 위한 필수 과정이다.

  • 피어슨 상관계수 → 선형 관계 분석
  • 스피어만 상관계수 → 순위 기반, 비선형 관계 분석
  • VIF (다중공선성 분석) → 독립 변수 간 강한 상관관계 확인

적절한 상관관계 분석 방법을 선택하면 데이터를 효과적으로 해석하고, 머신러닝 모델의 성능을 최적화할 수 있다.