PCA·요인분석·판별분석·UMAP을 목적에 맞게 고르는 법
PCA, EFA/CFA, LDA/QDA, t-SNE/UMAP의 가정과 평가 지표를 비교하고 다변량 데이터 분석 파이프라인을 설계하는 방법
2026-08-14 · 최초 발행 2025-10-14
다변량 데이터에서는 변수 하나를 따로 보는 방식만으로 구조를 설명하기 어렵다. PCA, 요인분석, LDA/QDA, t-SNE/UMAP은 모두 여러 변수의 관계를 다루지만, 요약·측정모형 검증·분류·시각화처럼 출발점이 서로 다르다.
분석 목적이 기법 선택을 결정한다
PCA는 공분산 구조를 바탕으로 분산을 가장 크게 보존하는 직교 성분을 찾는다. 선형 차원 축소와 잡음 제거에 적합하며, 스케일 표준화를 전제로 설명분산비로 정보 보존 정도를 확인한다.
EFA는 관측 변수에서 잠재 요인 구조를 탐색하고 적재량을 추정한다. varimax 또는 oblimin 회전을 적용하면 해석 가능성을 높일 수 있다. CFA는 이미 세운 이론적 요인 구조가 데이터와 맞는지 확인하는 측정모형 검증 기법이며, CFI/TLI/RMSEA/SRMR로 적합도를 평가한다.
LDA는 클래스 간 분산을 크게 하고 클래스 내 분산을 작게 만드는 선형 경계를 학습한다. 클래스별 공분산이 같다는 가정이 따른다. QDA는 클래스마다 공분산을 따로 추정해 곡선 형태의 경계를 만들 수 있지만, 표본 수에 비해 파라미터가 빠르게 늘어나는 위험이 있다.
t-SNE는 고차원 데이터의 근접성 확률을 보존하는 데 초점을 둬 국소 구조 시각화에 강하다. 대신 전역 거리가 왜곡될 수 있다. UMAP은 매니폴드 근사와 토폴로지 보존을 바탕으로 설계됐고 속도와 확장성이 좋지만, n_neighbors, min_dist 같은 하이퍼파라미터에 민감하다.
전처리부터 검증까지 끊기지 않는 흐름
결측치와 이상치를 처리하고, 표준화와 범주형 인코딩을 마친 뒤 분석 목적을 분명히 해야 한다. 설명·검증·예측·시각화 중 무엇이 우선인지에 따라 모델과 평가 지표가 달라진다. 교차 검증, 홀드아웃, 부트스트랩은 결과의 재현성을 확인하는 검증 프레임으로 사용할 수 있다.
정규성·선형성·등분산성·독립성 가정도 함께 확인한다. Mardia’s test, QQ-plot, Box’s M이 진단에 쓰이며, 공분산 행렬이 불안정하면 VIF로 다중공선성을 점검하고 shrinkage 정칙화를 적용한다.
평가 결과를 읽는 기준
PCA와 EFA에서는 설명분산비, 요인적재량, 고유값>1 규칙을 보고 병렬분석을 함께 적용한다. CFA는 CFI/TLI(≥0.900.95), RMSEA(≤0.060.08), SRMR(≤0.08)을 기준으로 적합도를 판단한다.
LDA/QDA는 정확도, F1, ROC-AUC뿐 아니라 분류 경계의 안정성과 공분산 추정 조건수까지 확인해야 한다. t-SNE/UMAP은 trustworthiness로 이웃 보존을 보고, 군집 분리도와 시각적 해석 가능성을 함께 검토한다. 로딩·성분 스코어 바이플롯, 스크리 플롯, 요인구조도, 판별 경계도는 결과 해석에 활용할 수 있다. 시드를 고정하고 하이퍼파라미터 민감도를 분석해 재현성을 관리한다.
| 기법 | 목적 적합성 | 확장성 | 재현성 | 수치 안정성 | 운영 편의 |
|---|---|---|---|---|---|
| PCA | 선형 구조 요약과 노이즈 저감에 적합 | 대규모 특성에 강함(랜덤라이즈드 SVD) | 시드 무관, 결정론적 | 높음(정칙화 가능) | 파이프라인 적용 용이 |
| EFA | 잠재구조 탐색에 적합, 회전으로 해석성 향상 | 변수 수↑ 시 계산 증가 | 초기값·회전에 민감 | 중간(표본수 영향) | 설문/척도 설계에 표준 |
| CFA | 이론 검증과 적합도 지표 활용에 강점 | 모형 복잡도↑ 시 느려짐 | 데이터/모형 의존 | 중간(식별성 중요) | 구조방정식 환경 필요 |
| LDA | 선형 분리에서 강력하고 해석이 쉬움 | 샘플·특성 균형 필요 | 높음(폐형 해) | 공분산 추정 민감 | 배포 간단 |
| QDA | 비선형 경계 학습 가능 | 클래스별 공분산 추정 비용↑ | 표본 변동성 큼 | 특이행렬 리스크 | 정칙화 필수 |
| t-SNE | 국소 구조 시각화에 탁월 | 데이터↑ 시 비용 큼 | 시드/퍼플렉시티 민감 | 임베딩 변동성 | 오프라인 분석 적합 |
| UMAP | 속도와 전역/국소 구조의 균형 | 배치·스트리밍 지원 | 파라미터에 중간 민감 | 견고함(近) | 운영 내재화 용이 |
데이터 현장에서의 적용 방식
제조 공정에서는 PCA로 공정 변수의 차원을 줄인 뒤 Hotelling’s T²와 SPE(Q) 통계로 상태를 감시할 수 있다. 드리프트가 감지되면 로딩 기반 기여도 분석으로 원인 변수를 추적한다.
고객 세분화와 리드 스코어링에서는 UMAP 임베딩으로 군집 구조를 탐색하고, 그 결과를 지도학습 입력으로 연결한다. 세그먼트 라벨 판별에는 LDA를 적용하고 마케팅 실험군 선정 자동화로 이어갈 수 있다.
심리·설문 도구에서는 EFA로 측정항목을 줄이고 요인 구조를 도출한 다음 Cronbach’s α로 신뢰도를 확인한다. 이후 CFA로 모형 적합도를 검증하고 교차검증으로 일반화 성능을 점검한다.
의료 진단 보조에서는 QDA로 비선형 생체지표 경계를 모델링하고 공분산 정칙화로 안정성을 높인다. PCA 로딩을 이용한 변수 영향력 리포트는 임상 해석을 돕는다.
차원 축소는 데이터와 모델에 따라 모델 훈련 시간을 3090% 단축할 수 있다. 노이즈 제거와 다중공선성 완화는 AUC/정확도를 15%p 높일 수 있으며, 핵심 요인과 성분을 가시화하면 의사결정 속도와 품질 개선에도 연결된다. 정칙화와 고정된 파이프라인은 배포 실패율을 낮추고 스케일 변화 리스크를 억제한다.
운영 환경에서 흔들리지 않게 만들기
입력에는 수치·범주 혼재 원천 데이터, 데이터 딕셔너리, 목적 정의가 필요하다. 결측치는 MCAR/MAR/MNAR 여부를 판단하고, Standard/Robust 스케일링 및 희소행렬을 고려한다. 목적에 맞는 기법을 고른 뒤 하이퍼파라미터 탐색, 정칙화, 차원 선택을 병행하며 CV/부트스트랩과 민감도 분석으로 검증한다. 데이터 분할 과정의 누수도 막아야 한다.
산출물은 임베딩·성분·요인 적재, 분류 성능 리포트, 그리고 스케일러·투영행렬·모델 같은 운영화 아티팩트다. 배포 단계에서는 학습에 사용한 스케일러를 그대로 재사용하고, 차원 축소 이후의 fit-transform 불변성을 유지한다. 배치와 실시간 추론 경로는 분리하며, 스케일러·투영행렬·임베딩 모델의 버전과 데이터 드리프트를 관리한다.
특이 공분산으로 역행렬을 구할 수 없으면 Ledoit-Wolf shrinkage, 변수 축소, PCA 선행을 검토한다. QDA/CFA에서 표본 부족에 비해 파라미터가 많다면 파라미터 제한·공유와 규제 항 도입이 필요하다. t-SNE/UMAP 결과가 불안정하면 시드를 고정하고 n_neighbors/perplexity를 그리드 탐색하며 배치 일관 변환(transform)을 사용한다.
실행 가능한 파이프라인 예시
전제조건은 Python 3.10+, scikit-learn 1.5+, umap-learn 0.5+, numpy/pandas/matplotlib다. 재현성을 위해 random_state=42를 고정하고, 데이터는 수치형으로 스케일링한다고 가정한다.
# PCA + 로지스틱 회귀 파이프라인, LDA 비교, UMAP 시각화
from sklearn.datasets import load_breast_cancer
from sklearn.model_selection import StratifiedKFold, cross_val_score
from sklearn.preprocessing import StandardScaler
from sklearn.decomposition import PCA
from sklearn.discriminant_analysis import LinearDiscriminantAnalysis
from sklearn.linear_model import LogisticRegression
from sklearn.pipeline import Pipeline
import umap
import matplotlib.pyplot as plt
X, y = load_breast_cancer(return_X_y=True)
# 1) PCA + LR 파이프라인
pca_lr = Pipeline([
("scaler", StandardScaler()),
("pca", PCA(n_components=0.95, svd_solver="full", random_state=42)),
("clf", LogisticRegression(max_iter=500, n_jobs=None))
])
# 2) LDA 분류기
lda = Pipeline([
("scaler", StandardScaler()),
("clf", LinearDiscriminantAnalysis())
])
cv = StratifiedKFold(n_splits=5, shuffle=True, random_state=42)
for name, model in [("PCA+LR", pca_lr), ("LDA", lda)]:
scores = cross_val_score(model, X, y, cv=cv, scoring="roc_auc")
print(name, "AUC:", scores.mean(), "+/-", scores.std())
# 3) UMAP 2D 임베딩 시각화
X_scaled = StandardScaler().fit_transform(X)
umap_2d = umap.UMAP(n_neighbors=15, min_dist=0.1, random_state=42)
X_emb = umap_2d.fit_transform(X_scaled)
plt.figure(figsize=(5,4))
plt.scatter(X_emb[:,0], X_emb[:,1], c=y, cmap="coolwarm", s=10)
plt.title("UMAP Embedding")
plt.show()
EFA/CFA에는 factor_analyzer(≥0.5.0), semopy(≥2.3) 같은 전용 패키지를 활용할 수 있다. CFI/TLI/RMSEA/SRMR 산출과 회전 옵션은 명시해야 한다.
설명과 해석이 우선이면 PCA→EFA→CFA 순으로 검토하고, 요인 구조를 확정한 뒤 운영화한다. 예측이 목표라면 선형 가정이 충족될 때 LDA를 먼저 고려하고, 표본이 충분하며 정칙화를 적용할 수 있을 때 QDA와 대안 모델을 비교한다. 시각화와 탐색에는 UMAP을 기본으로 두되, 전역 구조를 더 중시하면 파라미터 조정 또는 대체 기법을 병행한다.
t-SNE/UMAP은 시드와 하이퍼파라미터에 민감하므로 배포 전 transform 안정성 검증이 필요하다. 공분산 축소 추정은 일반화와 안정성을 높일 수 있지만, 과도하게 적용하면 분류력이 낮아질 수 있다.