UMAP이란? AI에서 이웃 그래프로 데이터의 차원을 줄이는 방법
TL;DR
UMAP은 고차원 데이터의 가까운 이웃 관계를 가중치가 있는 그래프로 만들고, 그 연결 구조를 낮은 차원에 옮기는 비선형 차원 축소 방법입니다. 문서나 이미지 특징을 그림으로 살피거나 다른 모델에 넣을 적은 수의 특징으로 바꿀 때 사용합니다. 이웃 수와 점이 뭉치는 정도를 조절하며, 학습한 공간에 새 데이터를 배치하는 기능도 지원합니다. 다만 그림의 섬과 간격이 실제 군집이나 원본 거리를 그대로 뜻하지는 않습니다.
핵심 3줄 요약
- 핵심 1
이웃의 연결 구조를 옮깁니다. 원본 특징 몇 개를 고르는 대신 사례 사이의 연결 강도를 계산해 새로운 좌표를 만듭니다. - 핵심 2
그림과 모델 입력에 모두 씁니다. 출력을 평면에 한정하지 않으며 학습 뒤 새 입력을 같은 공간으로 변환할 수 있습니다. - 핵심 3
설정과 해석을 함께 점검합니다. 이웃 수·거리 기준·난수 상태에 따라 결과가 달라지고 원본 밀도는 완전히 보존되지 않습니다.
이 글에서 다룰 내용
- UMAP의 한 문장 정의
- 문서 특징을 이웃 지도로 바꾸는 쉬운 예시
- 이웃 그래프와 저차원 배치의 작동 원리
- 이웃 수·최소 거리·출력 차원 설정의 뜻
- t-SNE·PCA·클러스터링과의 차이
- 새 데이터 변환과 실전 점검 순서
- 밀도·재현성·데이터 누수 주의점
UMAP을 한 문장으로 정의하면 무엇인가요?
UMAP(Uniform Manifold Approximation and Projection)은 데이터가 놓인 구조를 이웃 관계로 근사하고, 그 구조와 비슷한 저차원 표현을 찾는 차원 축소 알고리즘입니다.
이름은 균일 매니폴드 근사 및 투영이라고 풀어 설명합니다. 매니폴드는 높은 차원 안에서도 데이터가 더 낮은 차원의 구조를 따라 놓일 수 있다는 생각과 연결됩니다. 초보자라면 복잡한 수식보다 각 사례 주변의 연결 관계를 모아 작은 공간에 다시 배치한다는 원리부터 이해하면 됩니다.
원 논문은 리만 기하학과 대수적 위상수학을 바탕으로 이 방법을 제안합니다. 실제 구현에서는 가까운 이웃을 찾고 연결 강도를 계산한 뒤 좌표를 최적화합니다. 결과는 사례별 좌표이며, 문서의 정답 주제나 분류 확률을 직접 내놓는 모델은 아닙니다.
한 줄 정리: UMAP은 많은 숫자로 표현된 사례를 이웃 관계가 드러나는 적은 수의 좌표로 바꿉니다.
쉬운 예시로 이해해 볼까요?
감자나라ai님이 고객 문의를 임베딩 모델로 바꿔 수치 벡터를 얻었다고 가정해 보겠습니다. 문의마다 숫자가 많이 붙어 있으면 목록만 보고 비슷한 내용을 찾기 어렵습니다. UMAP으로 각 문의에 평면 좌표를 붙이면 가까이 놓인 점의 원문을 함께 열어 볼 수 있습니다.
배송 일정에 관한 문장들이 가까이 놓이고 결제 관련 문장이 다른 구역에 나타날 수 있습니다. UMAP은 원본 벡터에서 이웃을 찾은 뒤 그 관계를 그림에 옮깁니다. 이는 원리를 설명하는 가상 예시이며 실제 고객 데이터로 측정한 결과나 자동 주제 분류의 성공 사례는 아닙니다.
다음 날 새 문의가 들어오면 저장한 UMAP 모델의 변환 기능으로 기존 공간에 배치할 수 있습니다. 다만 새로운 언어나 전혀 다른 업무의 문의라면 기존 공간이 그 의미를 잘 담는지 별도로 확인해야 합니다. 지도에 점이 찍혔다는 사실만으로 기존 문의와 같은 성격이라고 판단하지 않습니다.
쉬운 예시: 문의들 사이에 가까운 이웃을 잇는 선을 그린 뒤, 그 연결을 살펴보기 좋은 작은 지도에 옮긴다고 생각하면 됩니다.
왜 AI에서 UMAP이 중요한가요?
고차원 표현을 눈으로 살펴봅니다
이미지 특징이나 문서 임베딩은 사람이 직접 해석하기 어려운 수치 배열입니다. UMAP은 그 표현을 낮은 차원으로 바꿔 비슷한 사례와 섞인 구역을 살피도록 돕습니다. 점의 색상에 기존 라벨을 표시하고 경계 사례의 원본을 확인하면 특징이나 데이터 품질을 점검할 단서를 얻습니다.
시각화보다 높은 출력 차원도 사용합니다
공식 문서와 원 논문은 UMAP을 일반적인 차원 축소에도 사용할 수 있다고 설명합니다. 그림을 그릴 때는 낮은 차원이 편하지만 후속 모델의 입력을 만들 때는 더 많은 차원을 남길 수 있습니다. 보기에 예쁜 평면과 예측에 유용한 특징 공간은 평가 기준이 다릅니다.
학습한 공간을 새 입력에 재사용합니다
umap-learn은 학습 뒤 새 사례를 변환하는 기능을 지원합니다. UMAP으로 만든 특징에 분류기를 학습했다면 운영 중 들어오는 입력도 같은 공간으로 옮겨야 합니다. 공식 변환 예제는 훈련·테스트 데이터를 먼저 분리하고 훈련 데이터에만 UMAP을 맞추는 과정을 보여 줍니다.
UMAP은 어떻게 작동하나요?
원본 공간에서 가까운 이웃을 찾습니다
입력의 거리 기준을 정하고 각 점 주변의 이웃을 구합니다. 표본이 많은 경우에는 근사 최근접 이웃 검색을 활용해 계산 부담을 줄입니다. 여기서 어떤 특징과 거리 기준을 쓰는지가 중요합니다. 단위가 크게 다른 수치 열을 그대로 섞으면 의도와 다른 사례가 이웃으로 선택될 수 있습니다.
주변 거리 규모에 맞춰 연결 강도를 계산합니다
밀집한 곳과 성긴 곳에 같은 거리 반경만 적용하지 않고 각 점 주변의 거리 규모를 고려합니다. 이웃 사이의 연결을 있음과 없음으로만 자르지 않고 강도로 표현합니다. 방향별로 얻은 관계를 합치면 가중치가 붙은 그래프가 만들어지며, 공식 설명에서는 이를 퍼지 위상 구조로 다룹니다.
저차원 좌표를 움직여 연결 관계를 맞춥니다
낮은 차원에 초기 좌표를 놓고 원본에서 강하게 연결된 점은 가깝게, 연결이 약한 관계는 적절히 떨어지게 조정합니다. 두 공간의 퍼지 관계 차이를 교차 엔트로피로 비교합니다. 구현은 확률적 경사 하강과 음성 샘플링을 사용하므로 모든 쌍의 실제 거리를 같은 비율로 줄이는 과정과는 다릅니다.
기존 표현과 새 입력의 변환을 구분합니다
학습 데이터의 좌표는
fit_transform
으로 얻거나 학습 뒤
embedding_
에서 확인합니다. 새로운 데이터는 학습된 모델의
transform
으로 옮깁니다. 전체 데이터에 다시 학습하는 것과 기존 지도를 유지한 채 새 점을 넣는 것은 서로 다른 작업입니다.
이웃 수와 주요 설정은 무엇을 뜻하나요?
이웃 수는 구조를 보는 범위를 정합니다
n_neighbors
는 각 점 주변을 얼마나 넓게 살펴볼지 정하는 설정입니다. 작은 값은 세밀한 국소 관계에 집중하고 큰 값은 더 넓은 연결을 반영하는 쪽으로 작용합니다. 군집 개수를 지정하는 값은 아닙니다. 지나치게 좁은 범위에서는 원래 이어진 데이터도 작은 조각처럼 나타날 수 있습니다.
최소 거리는 점이 뭉치는 정도에 영향을 줍니다
min_dist
는 저차원에서 점들을 얼마나 조밀하게 배치할지 조절합니다. 작은 값은 촘촘한 묶음을, 큰 값은 더 퍼진 배치를 만드는 경향이 있습니다. API 문서의 유효 최소 거리라는 표현을 모든 점 쌍에 강제되는 거리 하한으로 읽지는 마세요. 원본 공간의 이웃 반경을 정하는 값도 아닙니다.
출력 차원과 거리 기준을 따로 고릅니다
n_components
는 결과 좌표의 차원 수이고
metric
은 입력 공간의 거리를 계산하는 기준입니다. 예를 들어
metric="cosine"
은 코사인 거리를 선택하는 설정입니다. 문서 임베딩이라고 무조건 이 설정이 최선은 아니므로 원본 임베딩 모델의 사용 지침과 실제 이웃을 함께 확인합니다.
실전 팁: 이웃 범위, 점의 조밀함, 출력 차원, 거리 기준은 서로 다른 역할입니다. 하나의 숫자로 좋은 그림과 좋은 후속 모델을 동시에 보장할 수는 없습니다.
UMAP과 헷갈리는 용어는 무엇이 다른가요?
t-SNE와 UMAP의 차이
둘 다 고차원 이웃 관계를 시각화하는 비선형 방법이지만 같은 알고리즘은 아닙니다. t-SNE는 이웃 유사도 확률과 t분포를 이용하고 UMAP은 가중 이웃 그래프의 관계를 저차원에 맞춥니다. t-SNE 설명과 비교하면 목적함수와 설정의 차이가 분명해집니다. umap-learn은 새 입력의 변환도 지원하며, scikit-learn의 기본 TSNE와 이 부분이 다릅니다.
PCA와 UMAP의 차이
PCA는 분산이 큰 직교 방향을 찾아 데이터를 선형으로 투영합니다. UMAP은 이웃 연결 구조를 따라 비선형 좌표를 만듭니다. UMAP의 가로축과 세로축을 원본 변수의 단위나 설명 분산 순서로 읽을 수는 없습니다. 선형 요약이 필요한지, 이웃 구조 탐색이 필요한지에 따라 비교합니다.
클러스터링과 UMAP의 차이
클러스터링은 그룹 소속이나 라벨을 정하는 작업이며 UMAP은 좌표를 만드는 방법입니다. UMAP 뒤에 별도 군집 알고리즘을 붙일 수 있지만 그림에 보이는 섬이 곧 정답 군집은 아닙니다. 공식 군집화 문서도 원본 밀도가 완전히 보존되지 않고 인위적인 갈라짐이 생길 수 있다고 경고합니다.
임베딩 모델과 UMAP의 차이
문서 임베딩 모델은 문장의 내용을 수치 벡터로 표현합니다. UMAP은 이미 얻은 벡터나 수치 특징을 입력받아 더 작은 표현을 만듭니다. UMAP을 적용했다고 문장의 의미를 새로 학습하거나 검색 정확도가 자동으로 높아지는 것은 아닙니다. 원본 임베딩과 축소 결과를 구분해 보관합니다.
실전에서는 어디에 쓰이나요?
문서와 이미지의 이웃을 탐색합니다
문서 벡터나 이미지 특징을 점으로 그려 유사한 사례와 어색하게 섞인 사례를 확인합니다. 그림에서 관심 구역을 찾은 다음 원문이나 원본 이미지를 읽는 순서가 좋습니다. 표본 구성이 달라지면 그림도 달라질 수 있으므로 포함한 데이터와 제외한 기준을 남깁니다.
군집화 전처리 후보로 비교합니다
고차원에서는 거리와 밀도를 이용한 군집화가 어려울 수 있어 UMAP으로 차원을 먼저 줄이는 방식을 검토합니다. 이때 그림을 그리는 차원으로 고정할 이유는 없습니다. 공식 문서도 군집화용 설정과 시각화용 설정을 구분하며, 얻은 군집이 원본 사례에서도 의미 있는지 평가하라고 안내합니다.
분류 모델의 입력 특징을 만듭니다
훈련 자료로 UMAP을 학습하고 그 좌표에 분류기를 맞춘 뒤 새 입력을 같은 UMAP으로 변환할 수 있습니다. 성능 개선 여부는 원본 특징을 쓰는 모델과 동일한 평가 분할에서 비교합니다. 축소 단계를 추가하면 저장할 모델과 변환 시간이 늘어나므로 운영 비용도 함께 측정합니다.
UMAP을 적용할 때 어떤 순서로 확인하나요?
1. 목적과 입력의 의미를 정합니다
탐색용 그림인지 후속 모델의 전처리인지 먼저 적습니다. 한 행이 문서인지 이미지인지, 특징의 척도와 거리 기준이 무엇인지 확인합니다. 결측값·중복·불필요한 식별자가 이웃 관계를 왜곡하지 않는지도 살핍니다. 새 데이터에는 학습 때와 같은 열 순서와 전처리를 사용합니다.
2. 평가 데이터는 학습 전에 분리합니다
후속 예측 모델을 평가한다면 UMAP도 훈련 데이터에만 맞춥니다. 교차 검증을 할 때는 각 훈련 폴드 안에서 전처리와 UMAP을 학습합니다. 전체 자료를 먼저 축소한 뒤 나누면 평가 자료의 구조가 학습에 들어갈 수 있습니다. 탐색 그림을 위한 전체 데이터 분석과 성능 검증을 구분하세요.
3. 여러 설정에서 이웃과 결과를 대조합니다
이웃 수와 최소 거리, 출력 차원을 바꾸며 원본의 가까운 사례가 어떻게 배치되는지 확인합니다. 후속 모델이 있다면 같은 검증 지표로 비교합니다. 군집을 만들었다면 각 그룹의 대표 사례와 경계 사례를 열어 봅니다. 잘 분리된 그림 한 장만 골라 데이터의 구조라고 결론 내리지 않습니다.
4. 변환 모델과 실행 조건을 함께 남깁니다
입력 버전·전처리·UMAP 모델·주요 설정·라이브러리 버전을 함께 보관합니다. 재현성을 확인할 때는
random_state
를 명시하고 같은 입력으로 다시 실행합니다. 공식 문서는 난수 상태를 고정하면 재현할 수 없는 일부 병렬 계산이 제한되어 속도와 재현성 사이에 절충이 생긴다고 설명합니다.
사용할 때 무엇을 주의해야 하나요?
원본의 거리와 밀도를 그대로 읽지 않습니다. 이웃 수를 크게 설정해 더 넓은 구조를 반영해도 모든 전역 거리가 보존된다는 보장은 없습니다. 섬 사이의 간격이 두 배라고 의미 차이도 두 배라고 설명하지 마세요. 밀집한 점 무리가 원본에서도 똑같은 밀도라는 주장 역시 별도 확인이 필요합니다.
새 입력의 분포 변화를 살핍니다. 공식 변환 예제는 훈련과 테스트 벡터의 전체 분포가 일관된 상황을 가정합니다. 기존 데이터와 전혀 다른 집단이 들어오면 저장한 공간에 넣는 것만으로 충분하지 않습니다. 원본 공간의 이웃과 새 사례를 점검하고 필요하면 재학습을 검토합니다.
시드 고정과 결론의 안정성을 구분합니다. 같은 결과를 재현하는 것과 여러 조건에서도 같은 결론이 유지되는 것은 다른 문제입니다. 특정 시드에서만 보이는 작은 섬을 확정적인 집단으로 해석하지 않습니다. 입력 순서·버전·실행 환경이 바뀌면 좌표가 같은지도 다시 확인합니다.
속도 비교에는 실제 조건을 남깁니다. 원 논문은 확장성과 실행 성능을 장점으로 설명하지만 모든 데이터와 구현에서 항상 더 빠르다고 단정할 수는 없습니다. 입력 크기·거리 기준·병렬 설정에 따라 비용이 달라집니다. 첫 실행에는 Numba 컴파일 시간이 포함될 수 있어 반복 실행과 구분해 측정합니다.
주의: UMAP 그림은 선택한 데이터와 설정의 결과입니다. 점의 위치만으로 실제 원인, 집단의 본질적인 경계, 이상 여부를 확정하지 않습니다.
자주 묻는 질문
Q1. UMAP은 지도학습인가요?
기본 사용은 라벨 없이 이웃 구조를 학습하는 비지도 방식입니다. umap-learn은 라벨을 사용하는 지도·반지도 방식도 지원하므로 실행 설정을 확인해야 합니다. 결과에 색상 라벨만 붙인 것과 좌표 학습에 라벨을 넣은 것은 다릅니다.
Q2. 이웃 수를 늘리면 군집이 많아지나요?
이웃 수는 군집 개수를 지정하지 않습니다. 주변 구조를 보는 범위를 바꾸는 값이며 결과의 갈라짐과 연결에 영향을 줍니다. 더 많은 이웃을 쓴다는 이유만으로 군집 수나 품질이 일정한 방향으로 변한다고 기대하지 않습니다.
Q3. 최소 거리는 원본 데이터의 거리인가요?
아닙니다. 저차원 배치에서 점이 뭉치는 정도와 관련된 설정입니다. 원본의 이웃 거리 기준은 별도로 정합니다. 최소 거리를 줄여 그림의 점들이 촘촘해져도 원본 데이터의 실제 밀도가 높아진 것은 아닙니다.
Q4. 새 데이터가 오면 전체를 다시 학습해야 하나요?
일반적인 umap-learn 사용에서는 저장한 모델의 변환 기능으로 새 입력을 기존 공간에 배치할 수 있습니다. 단, 입력 특징과 전처리가 같아야 하고 분포 변화도 살펴야 합니다. 전체를 재학습하면 기존 점의 좌표까지 달라질 수 있습니다.
Q5. UMAP은 항상 t-SNE보다 좋은가요?
아닙니다. 시각화할 관계, 출력 차원, 새 데이터 처리, 계산 비용에 따라 선택이 달라집니다. 같은 데이터로 목적에 맞는 평가를 하고 결과의 이웃과 원본 사례를 확인하세요. 두 방법 모두 평면 그림만으로 실제 군집과 거리를 확정할 수는 없습니다.
출처
마무리
UMAP은 원본의 이웃 관계를 가중 그래프로 만들고 그 구조를 낮은 차원의 좌표에 옮기는 방법입니다. 고차원 데이터를 그림으로 살피는 데 쓰며, 더 많은 출력 차원을 남겨 다른 모델의 입력으로 사용하거나 새 데이터를 학습된 공간으로 변환할 수도 있습니다.
초보자라면 이웃 수는 주변을 보는 범위, 최소 거리는 그림이 뭉치는 정도, 출력 차원은 남길 좌표 수라는 구분부터 기억하세요. 원본 이웃을 확인하고 여러 설정을 비교하며, 새 입력에도 같은 전처리와 모델을 적용해야 UMAP 결과를 다음 분석에 안전하게 활용할 수 있습니다.
