회귀분석의 다중공선성 진단과 대응 전략

회귀분석에서 다중공선성이 계수 해석과 예측 안정성에 미치는 영향을 VIF·공차한계 진단과 Ridge·PCA 대응 방법으로 정리한다.

2026-08-14 · 최초 발행 2024-04-29

계수의 분산이 커지는 지점

다중공선성은 회귀모형의 독립변수들이 강한 선형 관계를 가지는 상태다. 특정 변수가 다른 변수들의 선형결합으로 근사될 수 있으면, 개별 변수의 효과를 분리해 추정하기 어려워진다.

독립변수 간 상관이 낮아야 한다는 회귀분석의 가정이 흔들리면서 추정계수의 표준오차가 커진다. 계수 부호가 뒤집히거나 신뢰구간이 과도하게 넓어질 수 있고, 분산 팽창은 t-검정의 유의성을 낮춘다. 입력 데이터가 조금만 달라져도 계수가 민감하게 반응해 예측범위 역시 불안정해질 수 있다.

대표적인 징후는 표준오차의 급증, 계수 부호와 크기의 불안정, 변수 추가에 따른 유의성의 급격한 변화다. 교차검증과 테스트셋에서 계수나 성능의 변동성이 커지는지도 함께 확인할 필요가 있다.

상관계수 |r|>0.9 또는 두 변수의 R²>0.81은 경고 신호로 볼 수 있다. 변수별 보조회귀에서 구한 공차한계는 Tolerance=1−R²j, 분산팽창요인은 VIF=1/Tolerance다. Tolerance<0.1 또는 VIF>10은 실무 경고선이며, 보수적으로는 5를 사용하기도 한다.

중복된 파생변수, 같은 개념을 여러 스케일로 측정한 설문 문항, 시간·지역 트렌드의 중복, 기준범주를 제거하지 않은 원-핫 인코딩이 흔한 원인이다. 이 상태에서는 변수 중요도가 왜곡되고 실제 효과와 달리 특정 변수가 과대 또는 과소평가될 수 있다.

상관 스캔에서 재진단까지

진단은 결측 처리가 끝난 수치형 또는 더미 인코딩 독립변수와 전처리된 데이터셋(X, y)을 대상으로 진행한다. 먼저 상관행렬과 산점도로 |r|>0.9인 관계를 찾는다. 이후 각 변수에 보조회귀를 적용해 R²j를 구하고, Tolerance와 VIF를 계산한다.

Tolerance<0.1 또는 VIF>10은 고위험으로, 5~10은 중위험으로 판정한다. 결과물은 공선성이 의심되는 변수 목록과 변수군, 그리고 제거·대체·규제·차원축소 중 어떤 처리가 적절한지에 대한 권고안이다.

아님입력: 전처리된 X, y상관행렬/산점도 스캔|r|>0.9 플래그VIF, Tolerance 계산VIF>10 또는 Tol<0.1출력: 공선성 낮음모형 적합 진행대응 전략 선택변수 제거/병합유사 지표 대표 1개Lasso/Stepwise로 선택Ridge/PCA/AutoEncoder로완화재진단: VIF 재계산출력: 안정화된 계수/VIF 감소

결측과 이상치는 사전에 처리해야 하며, 결측 대체 방식에 따른 상관계수 편향에도 주의해야 한다. Ridge, Lasso, PCA를 적용할 때는 스케일 차이가 있으면 표준화를 권장한다. 더미 변수에서는 기준범주를 반드시 제외해 더미 변수 함정을 피한다.

데이터 성격에 따른 대응 선택

마케팅 믹스 모델링에서는 광고 지출 채널이 함께 집행되며 높은 상관이 생길 수 있다. 이때 대표 채널을 선택하거나 Ridge와 PCA를 적용해 계수를 안정화할 수 있다.

금융 리스크에서는 유사 금리 지표 간 공선성이 상존한다. 경제지표를 클러스터링한 뒤 대표변수를 채택하거나 Ridge로 계수를 감쇠하는 방식이 가능하다. 제조·센서 데이터에서는 동일 물리량을 측정하는 센서군에서 1~2개만 채택하거나 AutoEncoder로 저차원 잠재공간에 투영한다. 텍스트의 BoW 표현에서는 동의어와 공출현 토큰의 상관을 PCA/SVD 또는 정규화 로지스틱 회귀로 완화할 수 있다.

변수 설계 단계에서 상관행렬과 산점도를 확인하면 유사 문항과 중복 지표를 줄일 수 있다. 변인을 구분할 수 있는 문항으로 바꾸고, 본질적으로 중복되는 변수는 더 원인적이고 독립적인 측정값으로 교체한다.

상관 기반 필터링은 |r| 상한으로 중복 변수를 제거하는 단순·고속 방식이다. Lasso와 Stepwise는 각각 L1 규제, 전진·후진 선택으로 중요변수를 추출하며 해석에 유리하다. Boruta와 permutation importance 같은 모델 기반 선택은 데이터 규모와 잡음에 강건하다.

변수를 유지해야 한다면 Ridge 회귀로 계수를 L2 수축해 분산을 제어하고 예측 안정성을 높일 수 있다. PCA는 직교 성분으로 투영해 공선성을 제거하지만 성분 해석은 어려워진다. AutoEncoder는 비선형 저차원 학습에 적합하며 대규모 고차원 데이터에서 유리하지만 운영 복잡성을 고려해야 한다.

방법 목적 해석가능성 안정성/일관성 확장성(대규모) 운영 편의
Ridge 분산 완화·예측 안정화 높음(계수 유지) 높음 높음 쉬움
Lasso 변수 선택·희소화 높음(선택된 변수) 중간 높음 쉬움
PCA 공선성 제거·차원축소 낮음(성분 해석 난이도) 높음 높음 보통
AutoEncoder 비선형 축소 낮음 높음 높음 어려움
Stepwise 해석 중심 선택 높음 낮음~중간(불안정) 낮음 보통

Python으로 상관관계와 VIF 확인하기

환경은 Python 3.10, pandas 2.x, statsmodels 0.14, scikit-learn 1.5다.

# 공선성 진단: 상관행렬, Tolerance, VIF
import pandas as pd
import numpy as np
from statsmodels.stats.outliers_influence import variance_inflation_factor
from sklearn.preprocessing import StandardScaler

# 예시 데이터프레임 X (수치형/더미만), y는 회귀 타깃
# X = pd.read_csv("your_data.csv").drop(columns=["target"])
# y = pd.read_csv("your_data.csv")["target"]

def corr_flag(X, thr=0.9):
    corr = X.corr(numeric_only=True)
    pairs = []
    for i in range(len(corr.columns)):
        for j in range(i+1, len(corr.columns)):
            r = corr.iloc[i, j]
            if abs(r) >= thr:
                pairs.append((corr.index[i], corr.columns[j], r))
    return corr, pairs

def vif_table(X):
    X_ = X.dropna().copy()
    # 스케일 표준화 권장(특히 Ridge/Lasso/PCA)
    Xs = pd.DataFrame(StandardScaler().fit_transform(X_), columns=X_.columns, index=X_.index)
    vif = []
    for i, col in enumerate(Xs.columns):
        v = variance_inflation_factor(Xs.values, i)
        tol = 1.0 / v
        vif.append({"feature": col, "VIF": v, "Tolerance": tol})
    return pd.DataFrame(vif).sort_values("VIF", ascending=False)

# 사용 예
# corr, high_pairs = corr_flag(X, thr=0.9)
# print("상관계수 경고쌍:", high_pairs[:10])
# print(vif_table(X).head(10))

경고 기준은 |r|≥0.9, Tolerance<0.1, VIF>10이다. 상관 경고쌍에서는 의미와 업무 중복도가 높은 변수를 먼저 정리하고, 나머지는 Ridge 또는 PCA를 적용한 뒤 VIF를 다시 진단한다.

VIF 상위 변수의 VIF를 10→3 이하로 낮추고, 계수 표준오차를 3070% 축소하며, 검증 RMSE/MAE를 515% 개선하는 사례를 기대할 수 있다(데이터 의존). 계수 부호와 크기가 안정되면 해석 신뢰도와 변수 선택의 일관성이 높아지고, 운영 환경에서 재학습 변동성도 줄어든다.

다중공선성은 해석 오류와 예측 불안정을 만드는 핵심 리스크다. 설계 단계의 상관 점검, 기준범주 처리, Ridge 기반 정규화, PCA·AutoEncoder 차원축소를 데이터 특성에 맞게 적용하고, 대응 후 VIF 재계산을 반복하는 흐름이 필요하다.

다중공선성회귀분석VIF변수선택차원축소