기술과 산업/AI

데이터 수집과 EDA 전략 시리즈 – 5화. 변수 간 관계 분석: 상관관계, 다중공선성, 그리고 인사이트

B컷개발자 2025. 5. 12. 20:46
728x90

데이터셋의 각 변수는 독립적으로 존재하지 않는다.
현실 세계에서 수많은 변수들은 서로 영향을 주고받는다.
소득과 소비, 나이와 건강 지표, 광고 노출 수와 구매 전환율처럼 말이다.

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 실전 예제를 기반으로 구체적인 전략을 소개한다.

728x90