🤖 AI/ML

UMAP

Uniform Manifold Approximation and Projection

t-SNE보다 빠르고 확장성이 뛰어난 차원 축소 기법. 고차원 데이터 시각화와 클러스터링에 널리 활용됩니다.

📖 상세 설명

UMAP(Uniform Manifold Approximation and Projection)은 고차원 데이터를 저차원(주로 2D, 3D)으로 투영하는 비선형 차원 축소 알고리즘입니다. t-SNE와 유사한 목적을 가지지만, 수학적 기반이 다르고 속도와 확장성 면에서 큰 장점을 가집니다.

UMAP은 2018년 Leland McInnes와 John Healy가 발표했습니다. 위상수학(Topology)의 매니폴드 이론과 퍼지 집합 이론에 기반하여, 데이터의 고차원 구조를 저차원에서 보존하면서도 t-SNE보다 10-100배 빠른 속도를 제공합니다.

UMAP의 핵심 하이퍼파라미터는 n_neighbors(지역 구조 정밀도)와 min_dist(점들 간 최소 거리)입니다. n_neighbors가 크면 전역 구조가 잘 보존되고, 작으면 지역 구조가 강조됩니다. min_dist가 작으면 클러스터가 밀집되고, 크면 분산됩니다.

실무에서 UMAP은 임베딩 시각화, 이상 탐지, 클러스터 분석, 데이터 탐색에 널리 사용됩니다. 특히 LLM 임베딩을 시각화하거나, 수백만 개의 데이터 포인트를 빠르게 차원 축소할 때 t-SNE 대신 UMAP이 선택됩니다.

💻 코드 예제

UMAP을 사용한 임베딩 시각화 예제입니다.

import umap
import numpy as np
import matplotlib.pyplot as plt
from sklearn.datasets import load_digits
from sklearn.preprocessing import StandardScaler

# 데이터 로드 (MNIST 손글씨 숫자)
digits = load_digits()
X = digits.data  # (1797, 64) - 64차원
y = digits.target

# 데이터 정규화 (권장)
scaler = StandardScaler()
X_scaled = scaler.fit_transform(X)

# UMAP 차원 축소
reducer = umap.UMAP(
    n_neighbors=15,    # 지역 구조 정밀도 (5-50)
    min_dist=0.1,      # 점 간 최소 거리 (0.0-1.0)
    n_components=2,    # 출력 차원
    metric='euclidean', # 거리 메트릭
    random_state=42     # 재현성
)

# 64차원 -> 2차원 투영
X_embedded = reducer.fit_transform(X_scaled)
print(f"원본: {X.shape} -> UMAP 결과: {X_embedded.shape}")

# 시각화
plt.figure(figsize=(12, 8))
scatter = plt.scatter(
    X_embedded[:, 0],
    X_embedded[:, 1],
    c=y,
    cmap='Spectral',
    s=5,
    alpha=0.7
)
plt.colorbar(scatter, label='숫자 레이블')
plt.title('UMAP: 손글씨 숫자 64차원 → 2차원 시각화')
plt.xlabel('UMAP 1')
plt.ylabel('UMAP 2')
plt.tight_layout()
plt.savefig('umap_digits.png', dpi=150)
plt.show()

# 새로운 데이터에 적용 (학습된 reducer 사용)
new_data = np.random.randn(10, 64)  # 새 데이터
new_data_scaled = scaler.transform(new_data)
new_embedded = reducer.transform(new_data_scaled)
print(f"새 데이터 투영 결과: {new_embedded.shape}")

🗣️ 실무에서 이렇게 말하세요

💬 회의에서
"고객 세그먼트 시각화에 UMAP 써봤는데, t-SNE보다 10배 빠르고 클러스터 분리도 더 깔끔하게 나왔어요. 100만 건 데이터도 몇 분이면 됩니다."
💬 면접에서
"임베딩 품질 평가에 UMAP을 활용했습니다. n_neighbors를 조절하며 클러스터 분포를 확인하고, Silhouette Score와 함께 정량적으로 평가했습니다."
💬 기술 토론에서
"UMAP은 전역 구조 보존이 t-SNE보다 나아요. 다만 min_dist가 너무 작으면 과적합처럼 보일 수 있으니 0.1~0.3 정도로 시작하세요."

⚠️ 흔한 실수 & 주의사항

하이퍼파라미터 고정

기본값만 사용하면 데이터 특성을 제대로 반영 못합니다. n_neighbors, min_dist를 여러 값으로 실험하세요.

정규화 누락

스케일이 다른 피처가 있으면 결과가 왜곡됩니다. StandardScaler나 MinMaxScaler로 전처리하세요.

올바른 방법

데이터 정규화 후 UMAP 적용, 여러 하이퍼파라미터 조합 시각화, random_state 고정으로 재현성 확보하세요.

🔗 관련 용어

📚 더 배우기