UMAP vs t-SNE 완벽 비교: 고차원 데이터 시각화 실전 가이드 (Python 코드 포함)

들어가며: 왜 차원 축소가 필요한가?

현실 세계의 데이터는 수백, 수천 개의 feature를 갖는 경우가 흔합니다. 이미지 데이터는 픽셀 수만큼, 유전체 데이터는 수만 개의 유전자 발현값을 갖죠. 이런 고차원 데이터를 사람이 이해할 수 있는 2D·3D로 압축하는 것이 차원 축소(Dimensionality Reduction)의 핵심입니다.

그중에서도 t-SNEUMAP은 비선형 차원 축소의 양대 산맥입니다. 이 글에서는 두 알고리즘의 원리, 성능, 실무 활용법을 코드와 함께 비교합니다.

핵심 질문: “내 데이터에는 t-SNE와 UMAP 중 어떤 것이 더 적합할까?”

t-SNE란?

t-SNE(t-distributed Stochastic Neighbor Embedding)는 2008년 Laurens van der Maaten이 제안한 알고리즘입니다.

작동 원리

  1. 고차원 공간에서 각 데이터 포인트 간 조건부 확률(가우시안 분포)을 계산
  2. 저차원 공간에서 t-분포 기반 확률을 계산
  3. 두 확률 분포 간 KL divergence를 최소화하도록 반복 최적화

t-분포를 사용하는 이유는 저차원에서 발생하는 crowding problem을 완화하기 위해서입니다. 가우시안보다 꼬리가 두꺼운 t-분포 덕분에 멀리 있는 점들이 더 잘 분리됩니다.

주요 하이퍼파라미터

  • perplexity (5~50): 이웃 수의 유효 크기. 데이터 크기에 따라 조절
  • learning_rate (10~1000): 너무 작으면 수렴 실패, 너무 크면 발산
  • n_iter (≥1000): 충분한 반복 횟수가 필요

UMAP이란?

UMAP(Uniform Manifold Approximation and Projection)은 2018년 Leland McInnes가 제안했으며, 리만 기하학과 대수적 위상수학에 기반합니다.

작동 원리

  1. 고차원 데이터의 k-최근접 이웃 그래프를 구성
  2. 이 그래프를 fuzzy simplicial set으로 표현
  3. 저차원에서 유사한 위상 구조를 갖도록 cross-entropy를 최소화

주요 하이퍼파라미터

  • n_neighbors (5~200): 지역 vs 전역 구조 균형 조절
  • min_dist (0.0~1.0): 저차원에서 포인트 간 최소 거리
  • metric: 거리 측정 방식 (euclidean, cosine, manhattan 등)

t-SNE vs UMAP 핵심 비교

비교 항목 t-SNE UMAP
속도 느림 (O(n²) ~ O(n log n)) 빠름 (대규모 데이터에 강점)
확장성 수만 건까지 실용적 수십만~수백만 건도 가능
전역 구조 보존 약함 (지역 구조에 집중) 상대적으로 우수
지역 구조 보존 우수 우수
재현성 실행마다 결과 변동 random_state 고정 시 안정적
새 데이터 변환 불가 (재학습 필요) 가능 (transform 메서드)
이론적 기반 확률 분포 매칭 위상수학·리만 기하학
하이퍼파라미터 민감도 높음 (perplexity 영향 큼) 상대적으로 낮음

UMAP은 속도와 확장성에서 t-SNE를 압도하며, 전역 구조 보존에서도 앞서는 경우가 많습니다. 다만 t-SNE는 작은 데이터셋의 클러스터 분리를 시각적으로 더 뚜렷하게 보여주는 경향이 있습니다.

Python 실전 코드: MNIST 데이터셋 비교

환경 설정

pip install umap-learn scikit-learn matplotlib

데이터 준비 및 PCA 전처리

import numpy as np
import matplotlib.pyplot as plt
from sklearn.datasets import fetch_openml
from sklearn.decomposition import PCA
from sklearn.manifold import TSNE
import umap
import time

# MNIST 로드 (70,000장의 손글씨 숫자, 784차원)
mnist = fetch_openml('mnist_784', version=1, as_frame=False)
X, y = mnist.data[:10000], mnist.target[:10000].astype(int)

# PCA로 50차원으로 사전 축소 (t-SNE 속도 개선용)
pca = PCA(n_components=50, random_state=42)
X_pca = pca.fit_transform(X)
print(f"PCA 설명 분산: {pca.explained_variance_ratio_.sum():.2%}")

t-SNE 실행

start = time.time()
tsne = TSNE(n_components=2, perplexity=30, learning_rate=200,
            n_iter=1000, random_state=42)
X_tsne = tsne.fit_transform(X_pca)
print(f"t-SNE 소요 시간: {time.time() - start:.1f}초")

UMAP 실행

start = time.time()
reducer = umap.UMAP(n_neighbors=15, min_dist=0.1,
                    n_components=2, random_state=42)
X_umap = reducer.fit_transform(X_pca)
print(f"UMAP 소요 시간: {time.time() - start:.1f}초")

시각화 비교

fig, axes = plt.subplots(1, 2, figsize=(16, 7))

for ax, data, title in zip(axes, [X_tsne, X_umap], ['t-SNE', 'UMAP']):
    scatter = ax.scatter(data[:, 0], data[:, 1], c=y, cmap='tab10',
                         s=1, alpha=0.7)
    ax.set_title(title, fontsize=16, fontweight='bold')
    ax.set_xticks([])
    ax.set_yticks([])

plt.colorbar(scatter, ax=axes, label='Digit', shrink=0.8)
plt.tight_layout()
plt.savefig('tsne_vs_umap.png', dpi=150, bbox_inches='tight')
plt.show()

실무에서의 선택 가이드

UMAP을 선택하는 경우

  • 데이터가 10만 건 이상으로 대규모일 때
  • 학습된 모델로 새로운 데이터를 변환해야 할 때
  • 전역 구조(클러스터 간 거리 관계)가 중요할 때
  • ML 파이프라인에 차원 축소를 전처리 단계로 포함할 때

t-SNE를 선택하는 경우

  • 데이터가 수천~수만 건으로 비교적 작을 때
  • 클러스터 분리를 명확하게 시각화하고 싶을 때
  • 탐색적 분석(EDA) 목적으로 한 번만 시각화할 때
  • 논문이나 발표에서 시각적으로 뚜렷한 군집을 보여줘야 할 때

하이퍼파라미터 튜닝 팁

상황 t-SNE 권장값 UMAP 권장값
작은 데이터 (<1K) perplexity=5~15 n_neighbors=5~15
중간 데이터 (1K~50K) perplexity=30~50 n_neighbors=15~30
큰 데이터 (>50K) 사용 비권장 n_neighbors=30~200
밀집 클러스터 강조 min_dist=0.0~0.05
전역 구조 강조 n_neighbors ↑, min_dist ↑

자주 하는 실수와 주의점

  1. 클러스터 간 거리를 해석하지 마세요 — t-SNE에서 클러스터 간 거리는 의미가 없습니다. UMAP은 상대적으로 낫지만 여전히 주의가 필요합니다.
  2. PCA 전처리를 빼먹지 마세요 — 고차원 데이터를 50~100차원으로 먼저 축소하면 속도와 품질 모두 향상됩니다.
  3. 하이퍼파라미터 하나로 판단하지 마세요 — perplexity나 n_neighbors를 여러 값으로 실험하고 결과를 비교하세요.
  4. 클러스터 크기를 비교하지 마세요 — 두 알고리즘 모두 클러스터의 상대적 크기를 보존하지 않습니다.

실무 팁: 결과 해석 시에는 반드시 원본 feature space에서의 통계량(거리, 밀도 등)을 함께 확인하세요. 시각화는 탐색의 출발점이지, 결론이 아닙니다.

마무리

  • t-SNE는 작은 데이터의 지역 구조 시각화에 탁월하며, 클러스터를 시각적으로 뚜렷하게 분리합니다.
  • UMAP속도, 확장성, 전역 구조 보존 모든 면에서 실무에 유리하며, transform() 메서드로 새 데이터 변환이 가능합니다.
  • 2024년 이후 대부분의 실무 프로젝트에서는 UMAP이 기본 선택지로 자리잡고 있습니다.
  • 어떤 알고리즘을 쓰든 하이퍼파라미터 실험PCA 전처리는 필수입니다.
  • 시각화 결과만으로 결론 내리지 말고, 정량적 분석과 함께 활용하세요.

이 글이 도움이 되셨나요?

Buy me a coffee

코멘트

답글 남기기

이메일 주소는 공개되지 않습니다. 필수 필드는 *로 표시됩니다

TODAY 180 | TOTAL 180