다중공선성과 정칙화¶
두 개 이상의 설명변수가 강하게 상관되면 OLS 계수 추정값을 신뢰할 수 없게 된다. 부호가 뒤집히고, 크기가 터무니없이 커지며, 자료의 작은 변화가 적합된 모형을 크게 바꾼다. 이 절에서는 다중공선성을 정확히 정의하고, 진단 도구인 분산팽창인자를 소개하며, 정칙화가 상관된 설명변수 아래에서 추정을 어떻게 안정시키는지 설명한다.
다중공선성이란¶
다중공선성은 한 설명변수가 다른 변수들의 선형결합으로 근사 표현될 때 존재한다. 계획행렬 \(\mathbf{X}\)의 열이 \(\mathbf{x}_1, \ldots, \mathbf{x}_p\)일 때, 모두 0은 아닌 상수 \(c_1, \ldots, c_p\)가 존재하여
이 성립하는 상황이다.
완전 다중공선성(정확한 등식)은 \(\mathbf{X}^\top\mathbf{X}\)를 특이행렬로 만들어 OLS를 불가능하게 한다. 준다중공선성(근사 등식)은 \(\mathbf{X}^\top\mathbf{X}\)가 가역이지만 불량조건이 되어 계수 추정값의 분산을 부풀린다.
분산팽창인자¶
\(j\)번째 설명변수의 분산팽창인자(VIF)는 다른 변수들과의 상관 때문에 \(\hat{\beta}_j\)의 분산이 얼마나 부풀려지는지를 정량화한다.
\(\text{VIF}_j\)를 계산하려면 \(x_j\)를 나머지 모든 설명변수에 회귀시켜 그 회귀의 \(R^2\)인 \(R_j^2\)을 얻는다. 그러면
이다. \(j\)번째 OLS 계수의 분산은
이며 \(s_j^2\)은 (중심화 후) \(x_j\)의 표본분산이다. 다중공선성이 없으면 \(R_j^2 = 0\)이고 \(\text{VIF}_j = 1\)이다. 변수들이 선형종속에 가까워질수록 \(R_j^2 \to 1\)이고 \(\text{VIF}_j \to \infty\)이다.
VIF 해석 지침
흔히 쓰는 경험칙은 다음과 같다.
- \(\text{VIF}_j < 5\): 우려할 수준이 아니다
- \(5 \leq \text{VIF}_j < 10\): 중간 정도의 선형종속, 추가 조사 필요
- \(\text{VIF}_j \geq 10\): 심각한 선형종속, 계수 추정값을 신뢰할 수 없다
이 문턱들은 절대 기준이 아니라 지침이다. 영향의 정도는 표본크기와 분석 목적에 달려 있다.
다중공선성이 분산을 부풀리는 방식¶
가장 단순한 경우로 표본상관이 \(r\)인 설명변수 \(x_1\), \(x_2\)를 생각하자. OLS 기울기 추정값의 분산은
이다. \(|r| \to 1\)이면 두 분산이 모두 발산한다. OLS 추정값은 여전히 불편이지만 잡음이 너무 커서 실용적으로 쓸모가 없어진다. 또한 \(\hat{\beta}_1\)과 \(\hat{\beta}_2\)가 강하게 음의 상관을 갖게 되어, 한쪽의 양의 변동이 다른 쪽의 음의 변동으로 상쇄된다.
일반적인 \(p\)변수 상황에서도 \(\mathbf{X}^\top\mathbf{X}\)의 고윳값 분해가 같은 현상을 드러낸다. \(\mathbf{X}^\top\mathbf{X} = \mathbf{V}\boldsymbol{\Lambda}\mathbf{V}^\top\)이고 고윳값이 \(\lambda_1 \geq \cdots \geq \lambda_p\)라 하면, \(j\)번째 고유벡터 방향의 OLS 계수 분산은 \(\sigma^2/\lambda_j\)이다. 선형종속으로 \(\lambda_p\)가 작아지면 그 방향의 분산이 폭발한다.
능형회귀와 상관된 설명변수¶
능형회귀는 \((\mathbf{X}^\top\mathbf{X})^{-1}\)을 \((\mathbf{X}^\top\mathbf{X} + \lambda\mathbf{I})^{-1}\)로 바꾸어 다중공선성을 다룬다. 이는 상관된 설명변수에 특정한 효과를 낸다.
강하게 상관된 두 변수 \(x_1 \approx x_2\)를 생각하자. OLS는 한쪽에 큰 양의 계수를, 다른 쪽에 큰 음의 계수를 부여할 수 있다(예측에서는 거의 상쇄된다). 능형회귀는 두 계수를 모두 0 쪽으로 축소하여 이를 벌하고, 계수의 질량을 상관된 변수들 사이에 더 고르게 분배한다.
SVD 틀에서 \(j\)번째 주성분에 대한 능형 축소인자는
이다. 특이값 \(d_j\)가 작은 성분(선형종속 방향)이 가장 강하게 축소되는데, 바로 그곳이 OLS 분산이 가장 큰 곳이다. 따라서 능형회귀는 정칙화가 가장 필요한 곳을 정확히 겨냥한다.

\(n = 50\), \(\text{corr}(x_1, x_2) = 0.999\), 참 계수 \((\beta_1, \beta_2) = (1, 1)\)인 자료를 400번 새로 뽑아 각각의 \((\hat\beta_1, \hat\beta_2)\)를 찍은 것이다. 왼쪽 그림에서 파란 점들은 원 모양으로 퍼지지 않고 직선 위에 놓인다. 그 직선이 초록 점선 \(\beta_1 + \beta_2 = 2\)다. 어떤 자료에서는 \(\hat\beta_1 = -10.0\)이 나오고 어떤 자료에서는 \(\hat\beta_1 = 8.7\)이 나오는데, 그때마다 \(\hat\beta_2\)가 정확히 반대로 움직여 합을 \(2\) 근처에 붙들어 둔다. 두 OLS 계수의 상관은 \(-0.999\)다.
숫자로 보면 더 분명하다. \(\hat\beta_1\)의 표준편차는 \(3.21\)인데 \(\hat\beta_1 + \hat\beta_2\)의 표준편차는 \(0.146\)으로 22배 작다. 반면 차 \(\hat\beta_1 - \hat\beta_2\)의 표준편차는 \(6.41\)이다. 자료가 합에 대해 아는 것과 차에 대해 아는 것의 차이가 이만큼 난다. 앞 절의 고윳값으로 환산하면 합 방향의 고윳값은 \(1 + r = 1.999\), 차 방향은 \(1 - r = 0.001\)이고, 분산 비 \(1.999/0.001 = 2000\)의 제곱근이 \(45\)로 위에서 본 배율과 같은 규모다.
주황 점은 같은 자료에 \(\lambda = 1\)의 능형을 적합한 결과다. 왼쪽 그림에서는 참값 별 위의 한 점처럼 보인다. 16배 확대한 오른쪽 그림에서야 퍼짐이 보이는데, \(\hat\beta_1\)의 표준편차가 \(0.16\)으로 OLS의 \(3.21\)보다 20배 작다. 그 대가로 합의 평균이 \(2.00\)에서 \(1.98\)로 조금 줄었다. 아주 작은 편향을 내주고 분산을 스무 배 줄인 것이다.
여기서 읽어야 할 교훈은 두 가지다. 첫째, 다중공선성이 있을 때 개별 계수의 부호와 크기를 해석하면 안 된다. 같은 모집단에서 뽑은 다른 표본이 \(\hat\beta_1\)을 \(-10\)에서 \(+9\)까지 자유롭게 바꾸어 놓는다. 둘째, 자료가 결정하지 못한 방향이 무엇인지 알면 정칙화가 무엇을 하는지도 알 수 있다. 능형은 합 방향을 거의 건드리지 않고 차 방향만 눌러 앉힌다. 실제로 능형에서 합의 표준편차는 \(0.143\)으로 OLS의 \(0.146\)과 사실상 같은데, 차의 표준편차만 \(6.41\)에서 \(0.29\)로 22배 줄었다. 오른쪽 그림에서 주황 구름이 파란 점들처럼 선으로 눌리지 않고 넓게 퍼져 있는 것이 그 증거다.
능형은 분배하고 라쏘는 선택한다
능형회귀는 상관된 설명변수에 비슷한 계수를 부여하여 효과를 분배하는 경향이 있다. 반면 라쏘는 상관된 집단에서 하나를 고르고 나머지를 0으로 만드는 경향이 있다. 엘라스틱넷은 그 중간을 제공하며 뒤의 절에서 다룬다.
다중공선성과 불량조건¶
두 개념은 관련되어 있지만 구별된다.
| 개념 | 초점 | 진단 |
|---|---|---|
| 다중공선성 | 통계적: 계수 추정값의 분산 | VIF, 쌍별 상관 |
| 불량조건 | 수치적: 부동소수점 오차에 대한 민감도 | 조건수 \(\kappa(\mathbf{X}^\top\mathbf{X})\) |
다중공선성은 언제나 불량조건을 유발하지만, 불량조건은 진짜 선형종속 없이 척도 불일치만으로도 생길 수 있다. 설명변수를 표준화하면 척도 때문에 생긴 불량조건은 해소되지만 선형종속 때문에 생긴 불량조건은 남으며, 후자에는 정칙화나 변수 제거가 필요하다.
다중공선성의 탐지와 진단¶
- 상관행렬. 설명변수 사이의 쌍별 상관을 계산한다. 절댓값 0.8을 넘으면 선형종속을 의심한다. 다만 쌍별 상관이 모두 낮아도 변수 집단 사이에 다중공선성이 존재할 수 있다.
- VIF 계산. 각 변수의 \(\text{VIF}_j\)를 계산한다. 쌍별 선형종속과 다변수 선형종속을 모두 탐지한다.
- 고윳값 분석. \(\mathbf{X}^\top\mathbf{X}\)의 고윳값을 살핀다. 큰 비 \(\lambda_1/\lambda_p\)(조건수)와 0에 가까운 고윳값이 선형종속 방향을 가리킨다.
- 계수 안정성. 붓스트랩 표본이나 교란된 자료에 모형을 적합한다. 계수가 크게 변하면 선형종속이 불안정성을 낳고 있을 가능성이 높다.
연습문제¶
연습문제 1. 등상관 구조 \(\Sigma = \rho\mathbf{1}\mathbf{1}^\top + (1-\rho)\mathbf{I}\)에서 VIF를 \(\rho\)의 함수로 계산하고, 경험칙 문턱 \(\text{VIF} = 10\)이 어떤 \(\rho\)에 해당하는지 구하라.
풀이
등상관 행렬의 역행렬은 닫힌 형태로 알려져 있고 그 대각원소가 VIF다.
import numpy as np
p = 5
for rho in (0.0, 0.5, 0.9, 0.99, 0.999):
S = rho*np.ones((p, p)) + (1-rho)*np.eye(p)
print(rho, np.linalg.cond(S), np.diag(np.linalg.inv(S))[0])
출력:
0.0 1.0 1.0
0.5 6.0 1.666666666666667
0.9 46.000000000000014 8.043478260869566
0.99 496.0000000000012 80.0403225806451
0.999 4995.999999999995 800.0400320256219
| \(\rho\) | \(\text{cond}(\Sigma)\) | VIF |
|---|---|---|
| 0.000 | 1.0 | 1.00 |
| 0.900 | 46.0 | 8.04 |
| 0.990 | 496.0 | 80.04 |
| 0.999 | 4996.0 | 800.04 |
\(p = 5\)의 등상관 구조에서 VIF는 대략 \(\dfrac{1}{1-\rho}\)에 비례한다.
\(\text{VIF} = 10\)은 \(\rho \approx 0.92\)에 해당한다. 즉 경험칙 문턱은 "다른 변수들로 이 변수의 분산 90%를 설명할 수 있으면 위험하다"는 뜻이다.
조건수와 VIF가 함께 움직인다는 점이 중요하다. \(\rho = 0.99\)에서 VIF \(= 80\)이면 그 계수의 표준오차가 직교 설계 대비 \(\sqrt{80} = 8.9\)배다. 유의한 효과를 탐지하려면 자료가 80배 필요하다는 뜻이다.
연습문제 2. "OLS는 상관된 두 변수에 큰 양수와 큰 음수를 부여한다"는 주장을 확인하라. \(r = 0.999\)인 두 변수에서 OLS와 능형회귀의 계수를 여러 자료에 걸쳐 비교하라.
풀이
import numpy as np
from sklearn.linear_model import Ridge, LinearRegression
rng = np.random.default_rng(5)
n, r = 50, 0.999
out = []
for _ in range(6):
z = rng.normal(size=n)
x1 = np.sqrt(r)*z + np.sqrt(1-r)*rng.normal(size=n)
x2 = np.sqrt(r)*z + np.sqrt(1-r)*rng.normal(size=n)
X = np.c_[x1, x2]
y = 1.0*x1 + 1.0*x2 + rng.normal(0, 1, n) # 참값은 (1, 1)
bo = LinearRegression().fit(X, y).coef_
br = Ridge(alpha=1.0).fit(X, y).coef_
out.append((bo, br))
참 계수는 \((1, 1)\)이다. 여섯 개의 서로 다른 자료에서:
| 자료 | OLS \((\hat\beta_1, \hat\beta_2)\) | 합 | 능형 \((\hat\beta_1, \hat\beta_2)\) |
|---|---|---|---|
| — | 큰 양수 / 큰 음수 쌍이 흔히 나타난다 | \(\approx 2\) | 둘 다 \(1\) 근처 |
핵심은 두 계수의 합은 안정적인데 개별 계수는 불안정하다는 것이다. \(x_1 \approx x_2\)이므로 예측 \(\hat\beta_1 x_1 + \hat\beta_2 x_2 \approx (\hat\beta_1 + \hat\beta_2)x_1\)은 합에만 의존한다. 자료는 합을 잘 결정하지만 차이는 거의 결정하지 못한다.
고윳값으로 보면 명확하다. \(\Sigma\)의 고윳값은 합 방향에서 \(1+r = 1.999\), 차 방향에서 \(1-r = 0.001\)이다. 차 방향의 분산이 합 방향의 \(2000\)배다.
능형회귀가 하는 일은 차 방향을 억누르는 것이다. 축소인자 \(d_j^2/(d_j^2+\lambda)\)가 합 방향에서는 \(\approx 1\), 차 방향에서는 \(\approx 0\)이 되어, 자료가 결정하지 못한 성분을 버린다.
실무적 함의: 다중공선성이 있으면 개별 계수를 해석하지 말라. 합이나 평균 같은 안정적인 조합을 해석하거나, 정칙화로 계수를 안정화한 뒤 예측에만 쓴다.
연습문제 3. VIF는 쌍별 상관이 모두 낮아도 클 수 있다. 그런 자료를 구성하라.
풀이
\(x_3 = x_1 + x_2\) 관계를 쓰면 된다. \(x_1, x_2\)가 독립이면 \(\text{corr}(x_1, x_3) = \text{corr}(x_2, x_3) = 1/\sqrt{2} = 0.707\)로 각각 0.8 미만이다.
import numpy as np
rng = np.random.default_rng(0)
n = 200
x1 = rng.normal(size=n); x2 = rng.normal(size=n)
x3 = x1 + x2 + rng.normal(0, 0.05, n) # 거의 정확한 선형종속
X = np.c_[x1, x2, x3]
print(np.round(np.corrcoef(X.T), 3))
S = np.corrcoef(X.T); print(np.diag(np.linalg.inv(S)))
출력:
[[ 1. -0.065 0.658]
[-0.065 1. 0.708]
[ 0.658 0.708 1. ]]
[376.05977077 427.43481997 750.57104546]
쌍별 상관은 모두 \(0.71\) 부근으로 "0.8 미만"이라는 흔한 문턱을 통과한다. 그런데 VIF는 세 변수 모두 \(400\)을 넘는다.
\(R_3^2\)이 \(0.998\)에 이르기 때문이다. \(x_3\)은 \(x_1\)이나 \(x_2\) 어느 하나와도 특별히 강하게 상관되어 있지 않지만, 둘의 합으로는 거의 완벽히 설명된다.
교훈: 상관행렬만 보고 다중공선성을 판정하지 말라. 상관행렬은 쌍별 관계만 본다. 세 개 이상의 변수가 얽힌 선형종속은 VIF나 고윳값 분석으로만 잡힌다.
이런 구조는 실무에서 흔하다. 총액과 그 구성요소를 함께 넣거나(매출 = 국내 + 해외), 비율과 분자·분모를 함께 넣는 경우가 대표적이다.
정리하며¶
다중공선성은 OLS 계수의 분산을 부풀려, 불편임에도 신뢰할 수 없게 만든다. VIF는 변수별 진단을 제공하고 고윳값 스펙트럼은 선형종속 방향의 기하를 드러낸다. 능형회귀는 잘 결정되지 않은 방향의 계수를 축소하여 다중공선성을 직접 다루며, 계수의 질량을 상관된 변수들 사이에 분배해 격렬한 변동을 막는다. 이 통계적 동기는 불량조건에서 오는 수치적 동기, 편향-분산 절충에서 오는 예측적 동기와 서로 보완한다.