데이터 수집과 EDA 전략 시리즈 – 5화. 변수 간 관계 분석: 상관관계, 다중공선성, 그리고 인사이트
데이터셋의 각 변수는 독립적으로 존재하지 않는다.
현실 세계에서 수많은 변수들은 서로 영향을 주고받는다.
소득과 소비, 나이와 건강 지표, 광고 노출 수와 구매 전환율처럼 말이다.
EDA에서 변수 간 관계를 파악하는 과정은
분석의 방향을 결정하고, 모델의 성능을 높이며, 해석 가능성을 높이는 필수 단계다.
이번 글에서는 실무 분석가 입장에서
상관관계 분석, 다중공선성 탐지, 변수 선택이라는 세 가지 핵심 주제를
실전 예제와 함께 깊이 있게 정리한다.
1. 상관관계(Correlation)의 본질
상관관계란 두 변수 간의 ‘선형적 관계 강도’를 나타내는 지표다.
값의 범위는 -1 ~ +1 사이이다.
상관계수(r) 해석
+1 | 완벽한 양의 상관관계 |
0 | 관계 없음 |
-1 | 완벽한 음의 상관관계 |
예를 들어, 광고비와 매출액은 일반적으로 양의 상관관계를 가진다.
반면, 거리와 만족도는 음의 상관관계를 가질 수 있다.
✅ 상관계수는 인과관계를 의미하지 않는다.
두 변수 사이의 관계가 ‘같이 움직인다’는 것만을 의미한다.
2. 상관관계 분석 실전 예제
import pandas as pd
import seaborn as sns
import matplotlib.pyplot as plt
df = pd.read_csv('data.csv')
# 수치형 변수만 추출
num_cols = df.select_dtypes(include=['float64', 'int64']).columns
corr = df[num_cols].corr()
# 상관계수 Heatmap 시각화
plt.figure(figsize=(10,8))
sns.heatmap(corr, annot=True, cmap='coolwarm', vmin=-1, vmax=1)
plt.title('변수 간 상관관계 Heatmap')
plt.show()
이 코드는 데이터셋의 모든 수치형 변수 간 상관계수를 한눈에 보여준다.
✅ Heatmap은 많은 변수들이 복잡하게 얽혀 있을 때 특히 유용하다.
3. 실무에서 자주 보는 변수 간 관계 예시
변수 A 변수 B 상관관계 예상
광고 클릭 수 | 전환율 | + |
고객 나이 | 쇼핑 빈도 | - |
사이트 체류 시간 | 구매 확률 | + |
교육 수준 | 평균 소득 | + |
4. 다중공선성(Multicollinearity)의 위험성
상관관계는 좋지만, 너무 높은 상관관계가 문제를 일으키기도 한다.
이를 ‘다중공선성’이라고 한다.
📌 다중공선성 문제점
- 모델의 회귀계수 추정이 불안정해진다
- 해석력이 떨어지고, 예측 성능도 저하된다
- 중요 변수와 비중요 변수를 구별하기 어렵다
예를 들어, '총 자산'과 '순자산'은 거의 완벽하게 양의 상관관계를 가진다.
이 둘을 모두 모델에 넣으면 불필요한 중복성이 생긴다.
5. 다중공선성 탐지 방법
(1) 상관계수 기반 탐지
sns.heatmap(df.corr(), annot=True)
→ 0.8 이상 강한 상관관계가 반복적으로 나타나는 변수들 파악
(2) Variance Inflation Factor (VIF)
VIF는 각 독립변수가 다른 독립변수들과 얼마나 중복되는지를 수치로 측정한다.
from statsmodels.stats.outliers_influence import variance_inflation_factor
from statsmodels.tools.tools import add_constant
X = add_constant(df[['var1', 'var2', 'var3']])
vif = pd.DataFrame()
vif['feature'] = X.columns
vif['VIF'] = [variance_inflation_factor(X.values, i) for i in range(X.shape[1])]
print(vif)
VIF 값 해석
1 ~ 5 | 다중공선성 문제 없음 |
5 ~ 10 | 경계선, 검토 필요 |
10 이상 | 다중공선성 심각, 변수 제거 권장 |
6. 변수 간 관계 탐색을 위한 추가 기법
(1) scatterplot
sns.scatterplot(x='feature1', y='feature2', data=df)
→ 두 변수 간 분포 패턴 및 이상치 탐색
(2) pairplot
sns.pairplot(df[num_cols])
→ 모든 수치형 변수 간 관계를 일괄적으로 확인
7. 상관관계 분석 이후의 변수 선택 전략
EDA에서 변수 간 관계를 탐색한 뒤에는
모델링 단계에서 중복성과 노이즈를 최소화하기 위해 변수 선택을 해야 한다.
전략 설명
강한 상관 변수 제거 | VIF ≥ 10인 변수 우선 제거 |
feature selection 알고리즘 사용 | Lasso, Recursive Feature Elimination |
도메인 지식 기반 선택 | 데이터 전문가의 판단 추가 |
8. 실무 사례: 광고 캠페인 분석
한 이커머스 기업의 광고 분석 사례를 보면 다음과 같다:
- impressions(노출 수)와 clicks(클릭 수)는 매우 높은 양의 상관관계를 보였다
- 두 변수를 모두 모델에 넣었더니 VIF > 20으로 다중공선성 경고
- 최종 모델에서는 clicks만 사용
이처럼 변수 간 관계를 미리 파악하지 않으면
모델 성능이 급격히 낮아지거나 결과 해석이 왜곡될 수 있다.
9. 결론: 변수 간 관계를 읽는 힘이 분석의 완성도를 결정한다
좋은 분석가는 단순히 데이터를 요약하는 사람을 넘어,
변수들 사이의 숨은 관계를 발견하고 해석하는 능력을 가져야 한다.
변수 간 관계 분석은
EDA → 모델링 → 결과 해석 전 과정에서
가장 중요한 인사이트 출발점 중 하나다.
“변수 하나만 보면 숫자,
변수 둘을 보면 스토리가 보인다.”
다음 편 예고
데이터 수집과 EDA 전략 시리즈 – 6화. 데이터 시각화 실전 가이드: matplotlib, seaborn을 활용한 EDA 시각화
EDA에서 가장 강력한 도구는 ‘시각화’다.
수치만으로는 볼 수 없었던 패턴과 인사이트를 시각적으로 드러내는
matplotlib, seaborn 실전 예제를 기반으로 구체적인 전략을 소개한다.