다중공선성 (Multicollinearity)

data-yeon·2025년 3월 2일

Data Science

목록 보기
8/10

다중공선성 (Multicollinearity)

  1. 정의

다중공선성은 회귀 분석에서 독립 변수들 간 강한 상관관계가 존재하는 현상을 의미한다. 독립 변수 간의 상관성이 높을 경우 회귀 분석의 결과가 왜곡될 수 있다.

  1. 발생 원인
    • 변수 간 높은 상관관계
    • 불필요한 중복 변수 포함
    • 데이터 변환 과정에서 유사한 변수 생성
    • 표본 크기에 비해 변수 개수가 많을 때

  2. 문제점
    • 회귀 계수의 신뢰성이 낮아짐
    • 회귀 계수의 부호 및 크기가 불안정해짐
    • 작은 데이터 변화에도 결과가 크게 변동
    • 독립 변수의 영향력을 해석하기 어려움

  3. 다중공선성 진단 방법

    1. 상관계수 행렬 (Correlation Matrix)
      • 독립 변수 간 상관계수가 0.8 이상이면 다중공선성을 의심할 수 있다.
    2. 분산팽창계수 (Variance Inflation Factor, VIF)
      • VIF = \frac{1}{1 - R^2}
      • VIF 값이 10을 초과하면 다중공선성이 심각하다고 판단한다.
    3. 조건수 (Condition Number)
      • 30 이상이면 다중공선성이 의심되며, 100 이상이면 심각한 수준이다.
  4. 해결 방법
    • 변수 제거: 상관관계가 높은 변수 중 하나를 제거
    • 주성분 분석 (PCA): 변수 차원을 축소하여 다중공선성을 완화
    • 릿지 회귀 (Ridge Regression): 정규화 기법을 활용해 회귀 계수의 변동성을 줄임
    • 데이터 수집 확대: 표본 크기를 늘려 다중공선성 영향을 완화

  5. Python을 활용한 다중공선성 확인

    import pandas as pd
    import numpy as np
    from statsmodels.stats.outliers_influence import variance_inflation_factor
    from sklearn.datasets import load_diabetes
    
    # 데이터 불러오기
    data = load_diabetes()
    df = pd.DataFrame(data.data, columns=data.feature_names)
    
    # VIF 계산
    vif_data = pd.DataFrame()
    vif_data["Feature"] = df.columns
    vif_data["VIF"] = [variance_inflation_factor(df.values, i) for i in range(df.shape[1])]
    
    print(vif_data)
profile
잘 갔다 오란다고 잘 갔다 올 수 있는 곳이 아니야

0개의 댓글