PCA·t-SNE·UMAP으로 차원 축소 기법 선택하기

PCA, t-SNE, UMAP의 차원 축소 원리와 구조 보존 특성을 비교하고, 전처리·재현성·대규모 운영 조건에 따른 선택 기준을 정리한다.

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

고차원 데이터에서 무엇을 남길 것인가

차원 축소는 고차원 공간의 정보를 가능한 한 덜 잃으면서 저차원 공간으로 옮기는 절차다. 시각화가 쉬워지고, 노이즈와 계산·메모리 비용을 줄일 수 있으며, 데이터의 인접성이나 구조를 보존하는 데도 쓴다.

PCA는 선형 투영 방식이고, t-SNE와 UMAP은 비선형 매니폴드 학습 기법에 속한다. 같은 데이터를 줄이더라도 각 기법이 우선하는 구조와 운영 방식은 다르다.

PCA는 분산을 설명 가능한 축으로 바꾼다

PCA는 공분산 행렬의 고유분해 또는 SVD를 사용해 주성분 축을 찾는다. 설명분산 비율을 기준으로 유지할 차원 수를 정할 수 있다.

주성분을 해석하기 쉽고 선형 변환 경로를 제공한다는 점이 장점이다. 반면 선형성 가정과 스케일·공분산 구조의 영향을 받는다. 대규모 데이터에서는 Incremental PCA로 확장할 수 있다.

t-SNE와 UMAP이 보존하는 구조의 차이

t-SNE는 고차원에서의 국소 확률 분포와 저차원 분포 사이의 KL 발산을 최소화해 임베딩을 만든다. 군집 분리를 시각적으로 확인하는 데 강하지만, 전역 거리는 왜곡될 수 있다. 비매개변수적 특성 때문에 새 샘플의 변환도 지원하지 않는다.

UMAP은 근접 그래프와 잠재 공간의 퍼지 단체 복합체를 구성한 뒤 저차원 임베딩을 최적화한다. 대규모 데이터에 적용하기 좋고 전역·국지 구조의 균형을 노릴 수 있다. 새 샘플에 대한 transform도 지원한다.

전처리와 운영 조건이 결과를 바꾼다

표준화는 분산 편향을 줄이며, PCA에는 평균 0 중심화가 필요하다. t-SNE와 UMAP처럼 거리 기반으로 동작하는 기법은 Euclidean, cosine 등의 metric 선택에 크게 영향을 받는다. 이상치와 중복 데이터는 최근접 그래프를 왜곡할 수 있다.

재현성을 확보하려면 random_state, 라이브러리 버전, 데이터 스냅샷을 고정하고 파이프라인을 캐싱해야 한다. 대용량 환경에서는 ANN, 배치 처리, 메모리 지표 모니터링도 필요하다.

지표 PCA t-SNE UMAP
성능(시간복잡도) O(min(nd², dn²)) SVD 기반 O(n²), Barnes-Hut/FFT로 O(n log n) 근사 O(n log n) 근사 NN + 최적화
확장성 Incremental/Randomized PCA 지원 수십만 샘플 시 메모리 부담 큼 수백만 샘플까지 실무 적용 사례 다수
일관성(재현성) 높음, 결정적 변환 지원 중간, 랜덤 초기화·매개변수 민감 중간~높음, random_state로 안정화
안정성(노이즈/스케일) 스케일·공분산 가정 민감 매개변수 민감, 전역 왜곡 가능 상대적으로 안정, 전역·국지 균형
운영 편의 새로운 샘플 변환 용이 새로운 샘플 변환 미지원 transform 지원, 실시간 추론 가능
해석 가능성 높음(주성분 해석 가능) 낮음 중간

목적과 제약에서 시작하는 선택 경로

설명가능성/선형 가정시각화/군집 분리대규모/전역-국지 균형 샘플 변환t-SNE 재학습 필요위반위반입력: 고차원 데이터 X(n,d)전처리: 결측/이상치 처리,StandardScaler목적/제약 조건PCA 선택t-SNE 선택UMAP 선택하이퍼파라미터:n_components, svd_solver하이퍼파라미터: perplexity,learning_rate,early_exaggeration하이퍼파라미터: n_neighbors,min_dist, metric적합/변환: fit, transform,inverse_transform평가:설명분산/Trustworthiness/군 보존운영PCA/UMAP transform 경로배치/샘플링 전략검증: perplexity < n/3검증: 2 n_neighbors n-1매개변수 조정

임베딩을 시각화와 운영 경로에 연결하기

문서나 이미지처럼 고차원인 임베딩은 2D/3D로 투영해 군집과 이상치 패턴을 확인할 수 있다. 이때 perplexity, n_neighbors를 스윕하고 Trustworthiness와 KNN 보존율로 결과를 선택한다.

PCA는 차원을 줄인 뒤 선형·트리 기반 모델의 학습 시간과 과적합 위험을 낮추는 데 활용할 수 있다. UMAP으로 10~64차원 임베딩을 만들면 최근접 검색과 추천 인덱스의 효율을 높일 수 있다.

품질 관리에서는 PCA 잔차(Q-통계)와 Hotelling’s T²로 공정 편차를 감지할 수 있다. UMAP 임베딩 공간에서는 DBSCAN, HDBSCAN과 연계한 밀도 기반 이상치 탐지도 가능하다. 검색과 추천에서는 UMAP 임베딩에 ANN(HNSW, FAISS)을 결합해 실시간 근접 검색을 구성하고, PCA 전처리로 코사인 유사도 색인의 메모리 풋프린트를 줄일 수 있다.

메모리와 성능에서 확인할 수 있는 변화

1,000,000×2,048 float32 데이터를 1,000,000×2로 바꾸는 경우 변환 전 크기는 1e6 × 2048 × 4B = 8,192,000,000B ≈ 7.63 GiB이고, 변환 후에는 1e6 × 2 × 4B = 8,000,000B ≈ 7.63 MiB다.

차원 축약 뒤 모델 훈련이 210배 가속된 사례가 있으며, 노이즈 축소로 검증 성능이 13%p 개선된 사례도 있다. t-SNE와 UMAP은 군집 분리도와 신뢰도(trustworthiness) 지표를 높이는 데 활용된다.

파라미터와 변환 경로를 분리해 관리한다

PCA 전에는 표준화와 스케일 관리를 적용한다. 거리 기반 기법은 스케일 불균형에 민감하다. 대규모 처리에서는 Incremental PCA 또는 UMAP+ANN을 사용하고, 배치 크기와 메모리 상한을 정한다.

t-SNE에서는 perplexity 5~50, learning_rate ~ 200~1000 범위를, UMAP에서는 n_neighbors 5~100, min_dist 0.0~0.8 범위를 스윕할 수 있다. PCA와 UMAP은 transform 경로를 운영에 포함할 수 있지만, t-SNE는 재학습 또는 매개변수적 변형(별도 모델)을 고려해야 한다.

선택 결과는 설명분산(PCA), Trustworthiness/Continuity(t-SNE/UMAP), KNN 유지율, 다운스트림 성능을 함께 비교해 판단한다.

재현 가능한 최소 예제

전제조건: Python 3.10+, scikit-learn 1.4+, umap-learn 0.5+, numpy 1.26+
최신 버전 상이 시 파라미터 명세 확인 필요

import numpy as np
from sklearn.preprocessing import StandardScaler
from sklearn.decomposition import PCA, IncrementalPCA
from sklearn.manifold import TSNE
from sklearn.metrics import trustworthiness
import umap

# 데이터 가정
X = np.load("features.npy")  # shape (n_samples, n_features)

# 1) 공통 전처리
scaler = StandardScaler(with_mean=True, with_std=True)
X_std = scaler.fit_transform(X)

# 2) PCA: 선형 축약 + 해석 가능성
pca = PCA(n_components=0.95, svd_solver="full", random_state=42)
X_pca = pca.fit_transform(X_std)
print("PCA 차원 수:", X_pca.shape[1], "설명분산합:", pca.explained_variance_ratio_.sum())

# 대용량 시 Incremental PCA
# ipca = IncrementalPCA(n_components=256, batch_size=8192)
# X_pca_inc = ipca.fit_transform(X_std)

# 3) t-SNE: 시각화 특화 (새 샘플 transform 미지원)
tsne = TSNE(n_components=2, perplexity=30, learning_rate="auto",
            init="pca", early_exaggeration=12, random_state=42, n_iter=1000)
X_tsne = tsne.fit_transform(X_pca)  # 선행 PCA(50~100차) 후 t-SNE 권장

# 4) UMAP: 빠른 임베딩 + transform 지원
umap_model = umap.UMAP(n_components=10, n_neighbors=30, min_dist=0.1,
                       metric="cosine", random_state=42)
X_umap = umap_model.fit_transform(X_std)

# 새 샘플 변환(UMAP/PCA 가능)
# X_new_std = scaler.transform(X_new)
# X_new_pca = pca.transform(X_new_std)
# X_new_umap = umap_model.transform(X_new_std)

# 5) 품질 지표 예시
tw_umap = trustworthiness(X_std, X_umap, n_neighbors=10)
print("UMAP Trustworthiness@10:", round(tw_umap, 4))

t-SNE에는 perplexity < n_samples/3 검증과 O(n²) 메모리 사용량 확인이 필요하다. UMAP에서는 n_neighbors ∈ [2, n-1]metric=cosine/Euclidean를 검증한다. random_state, 라이브러리 버전, 데이터 스냅샷은 함께 고정한다.

차원 축소PCAt-SNEUMAP매니폴드 학습