에듀테크 프로젝트 대시보드
주성분 분석 (PCA)
데이터가 가장 넓게 퍼진 방향을 찾아 새 좌표축으로 삼는 기법입니다. 2차원 점들을 하나의 축으로 요약하면 차원 축소·압축·시각화가 됩니다. 점을 직접 끌어보며 주축(주성분)이 어떻게 따라 움직이는지 확인해 보세요.
● 파란 점 = 데이터 | ━ PC1 (분산 최대 방향) | ━ PC2 (PC1에 직교, 남은 분산) | ✕ 평균점
PC1 하나만 남겨도 원본 분산의 대부분을 보존할 수 있으면 1차원으로 압축 가능합니다.
각 특성에서 평균을 빼 데이터를 원점으로 옮긴다. (스케일 차이가 크면 표준편차로도 나눠 정규화)
C = (1/n) XᵀX. 대각선은 각 축의 분산, 비대각선은 두 축이 함께 움직이는 정도(공분산).
C의 고유벡터 = 주성분 방향, 고유값 λ = 그 방향의 분산. λ가 큰 순서로 정렬한다.
상위 k개 고유벡터에 데이터를 정사영(내적)하면 k차원으로 축소된 좌표를 얻는다.
공분산 행렬이 C = [[a, b], [b, d]] 라면
(대칭이라 오른쪽 위·왼쪽 아래가 같음), 고유값은 2차 방정식 한 번으로 나온다.
# 트레이스 T = a + d, 판별식 재료 D = a·d − b² λ = T/2 ± √( T²/4 − D ) # 큰 쪽이 λ₁(PC1), 작은 쪽이 λ₂(PC2) # 고유벡터 (b ≠ 0 일 때) v = ( λ − d , b ) # 정규화해서 단위벡터로 # 분산 설명 비율 ratio₁ = λ₁ / (λ₁ + λ₂)
두 고유벡터는 항상 서로 직각이다. 그래서 캔버스의 초록·주황 선은 언제나 90°를 이룬다.
타원의 반지름은 √λ 에 비례한다 —
길쭉할수록 PC1로의 압축이 유리하다.
| 선형 회귀 (Least Squares) | PCA (PC1) | |
|---|---|---|
| 무엇을 줄이나 | y 방향 수직 잔차의 제곱합 | 선까지의 수직(직교) 거리의 제곱합 |
| x·y 역할 | x는 입력, y는 정답(비대칭) | x·y 대등하게 취급(대칭) |
| 목적 | y 예측 | 데이터 구조 요약·차원 축소 |
| 축 바꾸면 | 기울기가 달라짐 | 같은 주축(회전 불변) |
두 직선은 데이터가 완벽한 직선일 때만 일치하고, 흩어질수록 벌어진다.
import numpy as np X = X - X.mean(axis=0) # 1) 중심화 C = np.cov(X, rowvar=False) # 2) 공분산 행렬 vals, vecs = np.linalg.eigh(C) # 3) 고유분해 (오름차순) pc1 = vecs[:, -1] # 가장 큰 고유값의 고유벡터 Z = X @ vecs[:, ::-1][:, :k] # 4) 상위 k축에 투영 # sklearn: PCA(n_components=k).fit_transform(X) 와 동일
· 시각화 — 수십 개 특성을 가진 데이터를 2·3차원으로 눌러 산점도로 관찰 (유전자·설문 데이터).
· 압축·잡음 제거 — 이미지의 주요 성분 몇 개만 남겨 용량을 줄이고 미세한 노이즈를 버린다(eigenface).
· 전처리 — 서로 강하게 상관된 특성들을 직교한 소수의 성분으로 바꿔 모델 학습을 안정화(다중공선성 완화).
· 이상 탐지 — 주성분으로 복원했을 때 오차가 큰 샘플을 비정상으로 표시.
한계: 선형 변환만 가능(곡면 구조는 t-SNE·UMAP·오토인코더), 스케일에 민감, 성분의 의미 해석이 어려움.