데이터 사이언스 - 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 (다중공선성 분석) → 독립 변수 간 강한 상관관계 확인
적절한 상관관계 분석 방법을 선택하면 데이터를 효과적으로 해석하고, 머신러닝 모델의 성능을 최적화할 수 있다.
'데이터 분석 > 데이터 사이언스' 카테고리의 다른 글
데이터 사이언스 - 5. 기초 통계 및 확률 (5.1 기초 통계 개념) (0) | 2025.03.20 |
---|---|
데이터 사이언스 - 4. 탐색적 데이터 분석 (EDA) (4.4 데이터 그룹화 및 피벗 테이블) (0) | 2025.03.20 |
데이터 사이언스 - 4. 탐색적 데이터 분석 (EDA) (4.2 데이터 시각화) (0) | 2025.03.20 |
데이터 사이언스 - 4. 탐색적 데이터 분석 (EDA) (4.1 데이터 구조 및 기본 통계 분석) (0) | 2025.03.20 |
데이터 사이언스 - 3. 데이터 핸들링과 전처리 (3.5 범주형 데이터 인코딩) (0) | 2025.03.20 |