콘텐츠로 이동

주성분회귀 (PCR)

개요

주성분회귀(PCR)는 차원축소와 회귀를 결합한다. 반응변수를 모든 설명변수에 직접 회귀시키는 대신, 먼저 주성분(분산의 대부분을 담는 설명변수의 선형결합)을 뽑고 그 성분에 반응변수를 회귀한다.

PCR이 특히 값진 경우는 다중공선성이 심할 때, \(p\)가 \(n\)에 비해 클 때, 그리고 해석 가능성보다 예측 정확도가 중요할 때다.


PCR 알고리즘

1단계: 설명변수 표준화

\[X_{\text{scaled}} = \frac{X - \mu}{\sigma}\]

PCA가 척도에 민감하므로 필수적이다. 표준화하지 않으면 분산이 큰 변수가 성분을 지배한다.

2단계: 주성분 계산

표준화된 설명변수에 PCA를 적용한다.

\[Z_k = X_{\text{scaled}} V_k\]
  • \(V_k\)는 공분산행렬의 고유벡터(적재) 행렬이다
  • \(Z_k\)는 처음 \(k\)개 주성분의 행렬이다
  • 각 주성분은 선형결합 \(Z_j = \sum_{i=1}^p v_{ij} X_i\)이다

성분은 설명하는 분산 크기 순으로 정렬된다.

\[\text{Var}(Z_1) \geq \text{Var}(Z_2) \geq \cdots \geq \text{Var}(Z_p)\]

3단계: 주성분에 회귀

처음 \(M\)개 주성분을 설명변수로 하는 표준 선형회귀를 수행한다.

\[y = \beta_0 + \beta_1 Z_1 + \cdots + \beta_M Z_M + \epsilon\]

4단계: 교차검증으로 M 선택

성분 수 \(M\)은 조정모수다.

  • 너무 적으면(\(M\)이 작으면) 과소적합. 제외된 변수의 정보를 잃는다
  • 너무 많으면(\(M\)이 \(p\)에 가까우면) 과적합. 잡음 성분이 분산을 키운다
  • 최적 \(M^*\)는 교차검증 오차를 최소화한다

PCA는 겹 안에서 적합해야 한다

교차검증 절차에서 PCA를 전체 자료에 한 번 적합한 뒤 겹을 나누면 자료 누설이 된다. 주성분이 검정 겹의 정보를 이미 담고 있기 때문이다.

올바른 절차는 겹마다 훈련 자료로 PCA를 다시 적합하고 그 적재로 검정 겹을 변환하는 것이다. scikit-learn에서는 Pipeline([('pca', PCA(k)), ('lr', LinearRegression())])을 만들어 파이프라인 전체를 cross_val_score에 넘기면 자동으로 지켜진다.

다행히 PCA는 \(y\)를 쓰지 않으므로 누설의 크기가 변수선택만큼 치명적이지는 않다(교차검증 연습문제 2 참조). 그래도 원칙을 지키는 편이 안전하다.


장점과 단점

장점

  1. 다중공선성 처리 — 성분이 무상관이므로 다중공선성 문제가 사라진다
  2. \(p > n\)에서 작동 — 차원축소로 회귀가 가능해진다
  3. 자동 변수 결합 — 성분이 모든 설명변수의 자료 기반 선형결합이다
  4. 계산 효율 — \(M < p\)개 변수의 최소제곱이 더 빠르다
  5. 과적합 감소 — 성분을 적게 쓰는 것이 암묵적 정칙화로 작용한다

단점

  1. 비지도 차원축소 — PCA가 \(y\)를 무시하므로 성분이 \(y\) 예측과 정렬되지 않을 수 있다. PLS는 반응변수로 성분 구성을 안내한다
  2. 해석 가능성 상실 — 성분이 원 변수의 선형결합이라 해석이 어렵다
  3. 표준화 필요 — 척도 선택에 예측이 민감할 수 있다
  4. 모형 복잡도 — 새 자료에 적용하려면 적재행렬 \(V\)를 보관해야 한다
  5. 변수선택이 아니다 — 소수만 중요하더라도 모든 원 변수가 쓰인다

PCR과 능형회귀

측면 PCR 능형
접근 비지도 차원축소(PCA) 모든 계수의 축소
유지하는 것 처음 \(M\)개 성분만 모든 변수, 축소된 채
모수 성분 수 \(M\) 정칙화 강도 \(\lambda\)
편향-분산 성분을 버림(이산) 모든 계수를 축소(연속)
언제 쓰는가 \(p\)가 크고 다중공선성이 심하며 \(p > n\) 중간 정도의 다중공선성과 \(p\)

핵심 통찰: 능형은 연속적 축소를, PCR은 이산적 선택을 쓴다.

SVD로 보면 둘의 관계가 명확해진다. 능형은 \(j\)번째 성분에 인자 \(d_j^2/(d_j^2+\lambda)\)를 곱하고, PCR은 처음 \(M\)개에 \(1\)을, 나머지에 \(0\)을 곱한다. PCR은 능형의 축소인자를 계단함수로 근사한 것이라 볼 수 있다.

주성분별 축소인자: 능형의 매끄러운 곡선과 PCR의 계단

\(n = 60\), \(p = 10\), 등상관 \(0.9\)인 자료의 축소인자를 성분 번호에 대해 그렸다. \(\mathbf{X}^\top\mathbf{X}\)의 고윳값은 \(533.9,\ 8.1,\ 7.2,\ \ldots,\ 2.8\)로 첫 성분이 압도적으로 크다. 실선 세 개가 능형, 점선 계단 두 개가 PCR이다.

먼저 둘의 공통점을 보라. 모든 곡선이 왼쪽에서 높고 오른쪽에서 낮다. 두 방법 모두 자료가 잘 결정한 방향은 살리고 그렇지 못한 방향은 버린다. 차이는 그 전환을 어떻게 하느냐다. PCR은 \(M\)과 \(M+1\) 사이에서 \(1\)에서 \(0\)으로 수직으로 떨어지고, 능형은 열 성분에 걸쳐 완만하게 내려온다.

이 차이가 실제로 얼마나 다른지는 \(\lambda = 100\)(초록)과 \(M = 1\)(주황)을 견주면 보인다. 둘 다 유효자유도가 비슷하다(\(1.28\) 대 \(1\)). 그런데 능형은 2번부터 10번 성분에 \(0.075\)에서 \(0.024\) 사이의 작은 가중치를 남겨 둔다. PCR은 정확히 0으로 지운다. 남은 아홉 성분에 신호가 조금이라도 있으면 능형이 그것을 건지고, 순수 잡음이라면 PCR이 더 깨끗하다.

\(\lambda = 10\)(보라)과 \(M = 3\)(빨강)의 비교는 더 미묘하다. 유효자유도는 \(3.97\)과 \(3\)으로 비슷한데, 능형은 첫 성분을 \(0.982\)로 거의 그대로 두고 나머지 아홉을 \(0.45\) 언저리로 눌러 놓는다. PCR은 세 성분을 온전히 쓰고 일곱을 버린다. 같은 "복잡도"를 전혀 다르게 배분하는 것이다.

일반적으로 능형이 더 안전하다. 성분 경계에서 갑자기 0으로 떨어지지 않으므로 \(M\)을 하나 잘못 고르는 손해가 \(\lambda\)를 조금 잘못 고르는 손해보다 크기 때문이다. 다만 성분 사이에 뚜렷한 절벽이 있을 때는 — 이 자료의 1번과 2번 사이처럼 고윳값이 \(533.9\)에서 \(8.1\)로 66배 떨어질 때는 — PCR의 이산적 결정이 오히려 자연스럽다.


PCR과 부분최소제곱

측면 PCR PLS
성분 구성 비지도: \(X\)의 분산 최대화 지도: \(X\)와 \(y\)의 공분산 최대화
성분이 정렬되는 대상 설명변수의 분산 설명 반응변수의 예측
전형적 성능 PCA가 \(y\)와 정렬되는지에 의존 대개 더 낫다

실무에서 PLS가 PCR보다 나은 경우가 많은데, 성분을 만들 때 \(y\)의 정보를 쓰기 때문이다. 구체적 수치 비교는 PCR과 PLS 개관 연습문제 1에 있다.


수학적 세부

설명된 분산

처음 \(k\)개 주성분이 설명하는 분산의 비율은

\[\frac{\sum_{j=1}^{k} \lambda_j}{\sum_{j=1}^{p} \lambda_j}\]

이며 \(\lambda_j\)는 \(\text{Cov}(X_{\text{scaled}})\)의 고윳값을 큰 것부터 정렬한 것이다. 스크리 그림은 고윳값(또는 누적 설명분산)을 성분 번호에 대해 그리며, "팔꿈치"가 대부분의 변동을 담는 성분 수를 시사한다.

원 척도의 회귀계수

PCR은 주성분에 대한 계수를 추정하므로, 원 변수의 계수로 되돌리려면

\[\hat{\beta}_{\text{PCR}} = V_M \hat{\gamma}\]

를 계산한다. \(V_M\)은 처음 \(M\)개 적재, \(\hat\gamma\)는 성분에 대한 회귀계수다.

연습문제

연습문제 1. "PCR은 능형의 축소인자를 계단함수로 근사한 것"이라는 관점을 확인하라. 두 방법의 SVD 축소인자를 비교하라.

풀이

SVD \(\mathbf{X} = \mathbf{U}\mathbf{D}\mathbf{V}^\top\)에서 두 방법의 해를 성분별로 쓰면

\[ \hat{\boldsymbol\beta} = \sum_{j=1}^p c_j \cdot \frac{\mathbf{u}_j^\top\mathbf{y}}{d_j}\,\mathbf{v}_j \]

형태이고 축소인자 \(c_j\)만 다르다.

방법 \(c_j\)
OLS \(1\) (모든 \(j\))
능형 \(\dfrac{d_j^2}{d_j^2+\lambda}\) (연속, 0과 1 사이)
PCR \(\mathbf{1}(j \le M)\) (계단, 0 또는 1)

기하적 해석 연습문제 1의 자료(\(\rho = 0.95\), \(p = 4\), 고윳값 \(186.1,\ 2.01,\ 1.74,\ 1.52\))에서 비교하면

성분 능형 \(\lambda = 10\) PCR \(M = 1\)
1 0.949 1
2 0.167 0
3 0.148 0
4 0.132 0

능형은 작은 성분을 \(0.13\)–\(0.17\)만큼 남기고 PCR은 완전히 버린다.

어느 쪽이 나은가는 그 성분에 신호가 있느냐에 달렸다. 신호가 조금이라도 있으면 능형의 부분적 보존이 유리하고, 순수 잡음이면 PCR의 완전 제거가 유리하다.

일반적으로는 능형이 더 안전하다. 성분 경계에서 갑자기 0으로 떨어지지 않으므로, \(M\)을 하나 잘못 고르는 데서 오는 손해가 \(\lambda\)를 조금 잘못 고르는 손해보다 크기 때문이다.

연습문제 2. PCA를 전체 자료에 적합한 뒤 교차검증하는 것과, 겹 안에서 적합하는 것의 차이를 확인하라.

풀이
import numpy as np
from sklearn.decomposition import PCA
from sklearn.linear_model import LinearRegression
from sklearn.pipeline import Pipeline
from sklearn.model_selection import KFold, cross_val_score

rng = np.random.default_rng(0)
n, p = 100, 8
X = rng.normal(0, 1, (n, p))
y = X @ np.array([2., -1., 0.5, 0, 0, 0, 0, 0]) + rng.normal(0, 1, n)

# 올바름: 파이프라인이 겹마다 PCA를 다시 적합한다
pipe = Pipeline([('pca', PCA(3)), ('lr', LinearRegression())])
proper = -cross_val_score(pipe, X, y, cv=KFold(5, shuffle=True, random_state=0),
                          scoring='neg_mean_squared_error').mean()

# 누설: PCA를 전체 자료에 한 번 적합한다
Z = PCA(3).fit_transform(X)
leaked = -cross_val_score(LinearRegression(), Z, y,
                          cv=KFold(5, shuffle=True, random_state=0),
                          scoring='neg_mean_squared_error').mean()

print(f"파이프라인(올바름): {proper:.4f}")
print(f"전체 적합(누설)   : {leaked:.4f}")

출력:

파이프라인(올바름): 3.8218
전체 적합(누설)   : 3.8103

차이가 크지 않다. PCA가 \(y\)를 전혀 쓰지 않기 때문이다. 검정 겹의 \(X\) 정보가 성분 방향에 반영되기는 하지만, \(y\)와의 관계는 여전히 훈련 겹에서만 학습된다.

이것이 교차검증 연습문제 2의 변수선택 누설(CV 오차 \(1.05\) 대 \(2.27\))과 결정적으로 다른 점이다. \(y\)를 사용하는 전처리만이 재앙적 누설을 일으킨다.

그럼에도 파이프라인을 쓰는 것이 옳다. 두 가지 이유가 있다. 첫째, \(p \gg n\)이면 PCA의 누설도 무시할 수 없게 된다. 둘째, 나중에 파이프라인에 \(y\)를 쓰는 단계(변수선택 등)를 추가할 때 구조가 이미 안전하게 잡혀 있다.


정리하며

PCR 은 차원축소 후 회귀한다.

  • 두 단계다. 주성분을 뽑고(PCA), 선행 \(M\) 개 성분에 반응을 회귀한다.
  • PCA 가 비지도라는 점이 핵심 약점이다. 성분은 \(\mathbf X\) 의 분산만 보고 정해지므로 \(\mathbf y\) 와 무관한 방향이 뽑힐 수 있다. 분산이 큰 방향이 예측에 유용하다는 보장이 없다.
  • 다중공선성을 근본적으로 해결한다. 성분들이 직교하므로 회귀가 안정적이며, \(p>n\) 에서도 작동한다.
  • \(M\) 을 교차검증으로 고른다. \(M=p\) 면 OLS 와 같아지므로, \(M\) 이 정칙화의 강도 구실을 한다.
  • 해석이 어려워진다. 성분은 원래 변수들의 선형결합이라 실질적 의미를 붙이기 힘들다.
  • 표준화가 필수다. PCA 가 척도에 의존하기 때문이다.

다음 절 PCR·PLS 보기로 넘어간다.