HDBSCAN이란? AI에서 밀도가 다른 군집을 계층 구조로 찾아내는 방법
TL;DR
HDBSCAN은 데이터가 모인 밀도 구조를 여러 수준에서 살펴보고 안정적으로 남는 군집을 고르는 알고리즘입니다. DBSCAN처럼 한 거리 임계값에서만 묶음을 결정하지 않으므로 밀도가 다른 무리를 다룰 때 유용합니다. 다만 군집 수를 자동으로 맞혀 주는 마법은 아니며 거리 척도, 최소 크기, 노이즈와 안정성을 함께 검토해야 합니다.
핵심 3줄 요약
- 핵심 1
여러 밀도의 군집을 비교합니다. 하나의 거리 경계로 자르기보다 밀도에 따른 계층을 만들고 군집의 지속성을 살핍니다. - 핵심 2
크기와 밀도 기준은 따로 봅니다. 최소 군집 크기와 핵심 표본 수가 결과에 다른 방식으로 영향을 줍니다. - 핵심 3
노이즈도 결과입니다. 어느 군집에도 속하지 않은 표본을 억지로 배정하지 않고 입력 거리와 결과를 확인합니다.
이 글에서 다룰 내용
- HDBSCAN의 한 문장 정의
- 밀도가 다른 고객 문의 임베딩 예시
- 상호 도달 가능 거리와 계층 생성 순서
- 최소 군집 크기·핵심 표본 수·군집 선택 설정
- DBSCAN·OPTICS·계층적 군집화와의 차이
- 실전 사용처, 체크리스트와 주의점
- 자주 묻는 질문과 공식 자료
HDBSCAN을 한 문장으로 정의하면 무엇인가요?
HDBSCAN은 표본 사이의 밀도 연결을 계층으로 만들고 그중 안정적으로 유지되는 군집을 뽑는 밀도 기반 군집화 방법입니다. 이름은 Hierarchical Density-Based Spatial Clustering of Applications with Noise의 약자로 쓰입니다.
가까운 표본이 많이 모인 곳은 군집 후보가 되고 주변과 멀거나 연결이 약한 표본은 노이즈로 남을 수 있습니다. 이를 위해 핵심 거리와 상호 도달 가능 거리를 계산한 뒤 밀도 관계를 나무처럼 정리합니다. hdbscan 저자들의 설명은 계층을 응축하고 군집 안정성에 따라 평면적인 최종 결과를 선택하는 순서를 제시합니다.
계층은 정답 라벨이 아닙니다. 업무상 유용한 고객 유형인지는 사람이 확인해야 합니다.
한 줄 정리: HDBSCAN은 임계 거리 한 곳에서만 자른 군집이 아니라 밀도 계층에서 선택한 군집을 반환합니다.
쉬운 예시로 이해해 볼까요?
감자나라ai님이 고객 문의 문장을 임베딩으로 바꿔 비슷한 내용끼리 묶는다고 가정해 보겠습니다. 배송 관련 문의는 빽빽하게 모이고 결제 관련 문의는 조금 넓게 흩어질 수 있습니다. 환불과 배송을 함께 묻는 문장은 어느 무리와도 안정적으로 묶이지 않을 수 있습니다.
DBSCAN에서 같은 거리 기준을 전부에 적용하면 촘촘한 배송 무리에 맞춘 값이 넓은 결제 무리를 잘게 나누거나, 결제 무리에 맞춘 값이 배송과 다른 무리를 합칠 수 있습니다. HDBSCAN은 밀도 수준을 달리하며 나타나는 묶음의 계층을 살핀 뒤 오래 유지되는 후보를 선택합니다. 실제 결과는 선택한 임베딩과 거리에 따라 달라집니다.
- 입력: 같은 모델로 만든 문의 임베딩과 정해 둔 거리 척도
- 출력: 각 문의의 군집 라벨 및 별도 노이즈 표기
- 검토: 묶인 문의의 대표 원문과 누락된 드문 문의 확인
이 예시는 가상 상황입니다. 실제 검색·고객 응대에 쓰려면 원문을 읽고 업무 기준으로 평가해야 합니다.
쉬운 예시: 같은 간격의 울타리 하나로 모든 모임을 자르지 않고, 모임이 이어지는 여러 밀도 수준을 살펴보는 방식입니다.
왜 AI에서 HDBSCAN이 중요한가요?
임베딩의 묶음을 탐색합니다
텍스트나 이미지의 임베딩에서 유사한 사례가 어떤 덩어리를 이루는지 찾는 탐색 작업에 쓸 수 있습니다. 데이터에 명시적인 정답 라벨이 없어도 군집 후보를 만들지만, 벡터 공간의 가까움이 곧 의미나 정답의 일치를 보장하지는 않습니다.
임베딩 모델·전처리·거리 척도를 고정하고 각 군집의 원본을 읽어야 합니다.
밀도가 일정하지 않은 데이터도 살핍니다
scikit-learn의 HDBSCAN 문서는 거리 기준을 달리한 밀도 군집 결과를 통합해 안정적인 묶음을 고른다고 설명합니다. 이 때문에 서로 다른 밀도의 군집을 탐색할 여지가 있으며 DBSCAN에서 하나의 거리 임계값을 정하기 어려운 상황에 맞습니다.
그렇다고 모든 밀도에서 군집을 반드시 찾아내는 것은 아닙니다. 희소한 영역이 노이즈가 되는지, 가까운 무리가 하나로 합쳐지는지는 표본 규모와 설정에 좌우됩니다.
노이즈를 별도로 남깁니다
흩어진 문의나 특이한 패턴을 어느 군집에도 억지로 넣지 않을 수 있습니다. scikit-learn의
labels_
에서 일반적인 노이즈는
-1
로 나타납니다. 유효하지 않은 입력의 별도 음수 라벨도 문서에 있으므로 모든 음수 라벨을 동일한 이상치 의미로 해석해서는 안 됩니다.
노이즈가 많다고 곧 입력이 불량하다는 뜻도 아닙니다. 드문 정상 사례가 포함될 수 있고 거리 척도나 최소 표본 기준이 지나치게 보수적일 수도 있습니다.
핵심 인사이트: HDBSCAN의 출력은 업무 분류의 정답표가 아니라 사람이 확인할 밀도 기반 후보 묶음입니다.
HDBSCAN은 어떤 순서로 작동하나요?
1. 이웃을 기준으로 핵심 거리를 구합니다
각 표본의 주변 이웃이 어느 정도 떨어져 있는지 계산해 지역적인 밀도를 가늠합니다. 빽빽한 영역에서는 핵심 거리가 짧고, 성긴 영역에서는 길어집니다. 몇 번째 이웃을 볼지는 최소 표본 수와 연결됩니다.
원래 벡터의 거리를 직접 해석하기 전에 사용한 거리 척도와 정규화를 확인하세요. 같은 데이터라도 척도를 바꾸면 핵심 거리와 군집 경계가 함께 달라질 수 있습니다.
2. 상호 도달 가능 거리로 연결합니다
두 점의 직접 거리만 사용하지 않고 각 점의 핵심 거리도 고려한 상호 도달 가능 거리를 만듭니다. 구현 문서에서는 두 핵심 거리와 원래 거리 중 큰 값을 연결 거리로 사용합니다. 성긴 영역의 연결을 상대적으로 길게 잡는 역할입니다.
이 값은 확률이나 문장 유사도 점수가 아닙니다. 거리 단위가 무엇이고 큰 값이 어떤 연결을 나타내는지 구분해 읽어야 합니다.
3. 최소 신장 트리와 계층을 만듭니다
상호 도달 가능 거리의 연결 관계에서 최소 신장 트리를 만들고 밀도에 따라 연결이 나뉘는 계층을 얻습니다. 그 계층을 최소 군집 크기에 맞춰 응축하면 아주 작은 분기는 별도 군집으로 오래 남지 않을 수 있습니다.
일반 계층적 군집화의 덴드로그램과 닮아도 거리와 추출 기준은 다릅니다. HDBSCAN은 밀도와 안정성에 초점을 둡니다.
4. 안정적으로 남는 군집을 선택합니다
응축된 나무에서 오래 유지된 군집 후보를 고르면 최종 라벨이 나옵니다. scikit-learn은 기본 군집 선택 방법으로
cluster_selection_method="eom"
을 문서화합니다. 작은 분기를 더 세밀하게 보려면
cluster_selection_method="leaf"
도 제공합니다.
방법을 바꿔 얻은 더 많은 군집이 무조건 더 나은 결과는 아닙니다. 군집 내용과 노이즈 비율을 함께 보고 적절한 해상도를 선택해야 합니다.
설정값과 결과는 어떻게 읽나요?
최소 군집 크기는 작은 묶음의 기준입니다
min_cluster_size
는 군집으로 고려할 묶음의 최소 크기를 정합니다. 값이 커지면 작은 분기가 노이즈로 돌아가거나 다른 군집에 합쳐질 수 있습니다. 작은 패턴까지 보려는지 안정적인 큰 묶음을 원하는지에 맞춰 설정합니다.
저자 구현의 매개변수 안내는 이 값을 바꿀 때
min_samples
기본값도 함께 바뀔 수 있음을 보여 줍니다. 두 효과를 분리해서 비교하려면 핵심 표본 수를 명시적으로 고정하고 최소 군집 크기를 바꾸세요.
핵심 표본 수는 보수성을 좌우합니다
min_samples
는 주변 이웃을 보며 핵심 거리를 정할 때 영향을 줍니다. 값을 올리면 보수적으로 군집을 고르고 노이즈가 늘 수 있지만 항상 같은 비율로 늘지는 않습니다. 문서의 기본값과 자동 연결 규칙을 확인해야 합니다.
두 Python 구현의 숫자를 그대로 복사하지 마세요. scikit-learn 문서는 자체
min_samples
가 표본 자기 자신을 포함하지만 scikit-learn-contrib/hdbscan 구현은 포함하지 않는다고 밝힙니다. 비교할 때는 각 구현의 정의에 맞춰 값을 조정합니다.
라벨과 소속 강도를 구분합니다
군집 라벨은 어떤 묶음이 선택됐는지 나타내고
probabilities_
는 선택된 군집에 대한 소속 강도를 나타냅니다. 이 값이 실제 업무 라벨이 맞을 확률이나 외부 정답에 대한 정확도는 아닙니다.
scikit-learn의 예제는 소속 강도를 그림 속 점의 크기에 반영합니다. 숫자 하나만 비교하지 말고 낮은 강도의 경계 사례와 노이즈 사례의 원문을 함께 읽어야 합니다.
HDBSCAN과 헷갈리는 용어는 무엇이 다른가요?
DBSCAN과 HDBSCAN의 차이
DBSCAN은 정해 둔 거리 범위에서 충분히 많은 이웃을 가진 점을 바탕으로 군집을 확장합니다. 하나의 거리 기준을 선택해야 하는 반면 HDBSCAN은 밀도 수준에 따른 계층에서 군집을 추출합니다.
DBSCAN이 언제나 나쁜 것은 아닙니다. 관심 있는 거리 척도와 임계값이 명확하면 그 기준으로 묶이는 결과를 직접 해석하기 쉽습니다.
OPTICS와 HDBSCAN의 차이
OPTICS는 표본의 처리 순서와 도달 가능 거리를 기록해 다양한 밀도 구조를 살펴보는 방법입니다. HDBSCAN은 상호 도달 가능 거리를 사용한 계층을 응축하고 군집 안정성에 따라 최종 묶음을 선택합니다.
두 방법 모두 여러 밀도를 다루지만 같은 배열이나 같은 점수표를 반환하지는 않습니다. OPTICS의 도달 가능 거리 그림을 HDBSCAN의 소속 강도 그래프로 읽지 않도록 구분하세요.
계층적 클러스터링과 HDBSCAN의 차이
일반적인 응집형 계층적 클러스터링은 정한 연결 규칙에 따라 표본이나 묶음을 차례로 합칩니다. HDBSCAN도 계층을 만들지만 밀도 관련 거리와 군집 안정성, 노이즈 처리가 핵심입니다.
나무 모양이 비슷해도 같은 군집을 보장하지 않습니다. 입력 거리와 추출 규칙부터 비교해야 합니다.
K-means와 HDBSCAN의 차이
K-means는 지정한 수의 중심을 기준으로 표본을 배정하고 중심과의 거리를 줄이는 방식입니다. HDBSCAN은 군집 수를 직접 정하지 않고 밀도의 연결을 살피며 일부 표본을 노이즈로 남깁니다.
모든 표본에 반드시 한 개의 배정이 필요하고 중심을 설명해야 하는 일이라면 K-means 쪽이 더 간단할 수 있습니다. 군집 수가 미정이거나 노이즈를 남길 이유가 있다면 HDBSCAN을 비교해 보세요.
비교 정리: DBSCAN은 고정 거리의 밀도 군집, OPTICS는 도달 가능 거리의 순서와 구조, HDBSCAN은 응축된 밀도 계층에서 안정적인 군집 선택에 초점이 있습니다.
실전에서는 어디에 쓰이나요?
고객 문의의 주제 후보 탐색
비슷한 문의 문장의 임베딩을 묶어 자주 등장하는 유형 후보와 소수의 특이한 질문을 살펴봅니다. 자동 생성된 군집 이름을 그대로 고객용 분류 체계에 넣기 전에 원문을 읽고 실제 문의 의도와 맞는지 검사합니다.
특히 여러 질문을 함께 담은 문장이나 표현이 매우 짧은 문장은 잘못 붙거나 노이즈로 남을 수 있습니다. 이 사례를 모아 입력 표현과 임베딩 모델도 함께 점검합니다.
이미지·소리 특징의 패턴 탐색
특징 벡터가 있는 이미지나 소리 사례에서 반복되는 패턴 후보를 찾아 사람이 검토할 묶음을 만들 수 있습니다. 예를 들어 유사한 신호를 먼저 훑어보되, 거리의 가까움이 촬영 대상이나 음성의 동일성을 증명한다고 말하지 않습니다.
특징 추출 방법이 바뀌면 거리 구조도 바뀝니다. 서로 다른 모델에서 나온 벡터를 하나의 거리 공간으로 섞지 말고 같은 설정으로 추출했는지 확인하세요.
평가용 데이터의 편중 살피기
테스트 사례가 몇몇 문장 유형에 몰려 있는지, 눈에 잘 띄지 않는 무리가 남아 있는지 탐색할 수 있습니다. 군집 크기는 데이터 분포를 살피는 신호일 뿐 모델의 정확도나 공정성 수치가 아닙니다.
희귀 사례를 노이즈라는 이유로 버리면 검증에서 중요한 실패 유형을 놓칠 수 있습니다. 노이즈 원본을 별도 목록으로 보고 수동 표본 검토를 붙이세요.
HDBSCAN을 적용할 때 어떤 순서로 확인하나요?
1. 입력 데이터와 거리의 뜻을 정합니다
텍스트라면 같은 임베딩 모델로 벡터를 만들고 결측·중복 사례를 점검합니다. 벡터를 정규화할지, 어떤 거리 척도를 쓸지는 사용 중인 라이브러리와 목적에 맞춰 따로 정합니다.
이전 실험과 비교하려면 모델, 전처리, 거리 척도, 데이터 범위를 함께 기록합니다.
2. 작은 표본에서 설정을 비교합니다
먼저
min_cluster_size
가 의미하는 최소 묶음 규모를 정하고,
min_samples
를 고정하거나 그 기본 동작을 기록합니다. 한 번에 여러 설정을 움직이면 무엇이 군집 변화를 만들었는지 구분하기 어렵습니다.
기본 군집 선택과 더 세분화된 선택의 차이도 원본 표본으로 확인합니다. 알고리즘이 반환한 군집 수 하나만 목표로 잡지 마세요.
3. 군집과 노이즈의 원본을 읽습니다
각 군집의 원본 사례를 여러 개 열어 공통 주제가 실제로 있는지 확인합니다. 경계의 낮은 소속 강도 사례와 노이즈 사례를 따로 살펴보면 무리한 합침이나 분리가 보입니다.
노이즈 비율을 줄이려고 설정을 완화한 뒤 관련 없는 문장이 한 군집으로 섞이면 목적을 잃습니다. 사람이 검토할 수 있는 군집의 일관성을 우선합니다.
4. 독립된 데이터에서 해석을 확인합니다
다른 시기에도 비슷한 주제가 등장하는지 살피고, 업무 분류에는 사람이 검토한 정답을 따로 사용합니다.
같은 운영 데이터를 지속적으로 다룰 때는 벡터 생성 방식과 라이브러리 구현을 기록해 재현성을 확보합니다. 새 데이터가 들어왔다고 이전 군집 번호가 항상 같은 의미를 유지하지는 않습니다.
한 줄 정리: 군집 수와 노이즈 비율뿐 아니라 입력 거리, 표본 내용, 구현별 매개변수 의미까지 함께 기록하세요.
사용할 때 무엇을 주의해야 하나요?
첫째, 두 구현의 설정을 그대로 옮기지 않습니다. scikit-learn과 hdbscan 패키지는 핵심 표본 수에 자기 자신을 포함하는지 다릅니다. 같은 숫자를 넣었다고 같은 밀도 기준이 되지는 않습니다.
둘째, 차원이 높은 벡터의 거리를 먼저 점검합니다. 일부 임베딩에서는 거리가 직관과 다르게 움직입니다. 군집 결과만 보지 말고 근접한 원문 사례가 실제로 비슷한지 표본으로 확인합니다.
셋째, 노이즈를 오류나 폐기 대상으로 단정하지 않습니다. 희귀하지만 중요한 고객 문제, 새로운 패턴 또는 입력 전처리의 차이가 섞여 있을 수 있습니다. 노이즈 목록을 별도 검토합니다.
넷째, 군집 소속 강도를 정답 확률로 쓰지 않습니다. 모델 출력은 해당 밀도 구조의 소속 신호이지 업무 정답 라벨의 검증 점수가 아닙니다. 업무에 쓰는 기준은 별도의 라벨과 평가로 세웁니다.
다섯째, 자원 비용을 사전에 확인합니다. 데이터 양과 거리 척도, 구현 방식에 따라 계산과 메모리 요구가 달라집니다. 작은 표본으로 먼저 시험하고 처리 시간과 메모리를 기록합니다.
주의: 군집 결과가 보기 좋게 나왔더라도 사람이 의미를 검토하지 않았다면 분류 체계나 자동 조치의 근거가 될 수 없습니다.
자주 묻는 질문
Q1. HDBSCAN은 DBSCAN의 거리 임계값을 자동으로 찾아 주나요?
단일 거리 임계값 하나를 자동 추정해서 DBSCAN을 한 번 실행하는 방식이 아닙니다. 여러 밀도 수준의 계층을 만들고 군집의 지속성으로 최종 결과를 선택합니다.
Q2. 군집 개수를 직접 지정해야 하나요?
보통 군집 수를 입력하지 않습니다. 최소 군집 크기와 밀도 관련 설정에 따라 선택된 군집 수가 달라지므로 출력 수가 업무의 정답이라고 볼 수는 없습니다.
Q3. 노이즈가 많으면 실패한 건가요?
그렇지 않습니다. 드문 사례가 실제로 흩어져 있을 수 있습니다. 원본과 입력 거리, 최소 크기와 핵심 표본 수를 확인한 뒤 판단합니다.
Q4. 소속 강도를 정답 확률처럼 써도 되나요?
안 됩니다. 소속 강도는 선택된 밀도 군집에 대한 값이지 사람이 정의한 업무 정답의 확률이 아닙니다. 정답 평가에는 별도 검증 데이터를 사용합니다.
Q5. scikit-learn과 hdbscan 패키지의 설정값이 같은가요?
이름이 같아도 완전히 같지 않습니다. 특히 scikit-learn의 핵심 표본 수에는 표본 자체가 포함되지만 별도 hdbscan 패키지는 그렇지 않습니다. 옮길 때 구현별 정의를 확인하세요.
출처
마무리
HDBSCAN은 데이터의 이웃 밀도에 따라 계층을 만든 뒤 안정적으로 남는 군집을 고릅니다. 같은 거리 경계에서 모든 무리를 판단하기 어려운 자료를 탐색할 때 DBSCAN이나 OPTICS와 함께 비교할 만한 방법입니다.
처음 적용할 때는 입력 벡터와 거리의 뜻부터 확인하고 최소 군집 크기와 핵심 표본 수를 각각 기록하세요. 최종 라벨과 소속 강도, 노이즈의 원본 사례를 읽어 본 뒤에야 그 묶음에 업무상 이름을 붙이는 편이 안전합니다.
