DBSCAN이란? AI에서 밀집된 데이터를 묶고 노이즈를 구분하는 방법
TL;DR
DBSCAN은 가까운 이웃이 충분한 핵심점에서 시작해 밀집 영역을 연결하고, 어느 영역에도 속하지 않는 점을 노이즈로 남기는 군집화 알고리즘입니다. 클러스터 수를 미리 정하지 않아도 길게 휘어진 모양을 찾을 수 있습니다. 대신 이웃 반경 eps와 최소 표본 수 min_samples를 데이터에 맞춰 정해야 합니다. 노이즈라는 표시는 오류 판정이 아니며, 서로 다른 밀도가 섞이면 하나의 설정으로 나누기 어렵습니다.
핵심 3줄 요약
- 핵심 1
밀도로 그룹을 만듭니다. 중심점과의 거리보다 핵심점끼리 이어지는 이웃 관계를 따라 클러스터를 확장합니다. - 핵심 2
핵심점·경계점·노이즈를 구분합니다. 주변 이웃이 적어도 핵심점 가까이에 있으면 경계점으로 그룹에 들어갑니다. - 핵심 3
설정과 거리 기준이 결과를 바꿉니다. eps는 그룹 전체의 최대 폭이 아닙니다. 단위·밀도 차이·노이즈 비율을 함께 확인합니다.
이 글에서 다룰 내용
- DBSCAN의 한 문장 정의
- 숫자 예시로 보는 핵심점과 경계점
- AI 데이터 탐색에서 쓰는 이유
- 이웃 반경과 최소 표본 수의 작동 방식
- K-means·이상 탐지·분류와의 차이
- 실전 사용처와 결과 점검 순서
- 밀도 차이·입력 순서·메모리의 주의점
DBSCAN을 한 문장으로 정의하면 무엇인가요?
DBSCAN은 정한 반경 안에 이웃이 충분한 점들을 이어 클러스터를 만들고, 그 클러스터에 연결되지 않는 점을 노이즈로 구분하는 밀도 기반 비지도학습 알고리즘입니다.
이름은 Density-Based Spatial Clustering of Applications with Noise의 약어입니다. 원 논문은 불규칙한 모양의 군집을 찾으면서 노이즈를 함께 다루는 방법을 제안했습니다. 여기서 밀도는 주변 공간에 사례가 얼마나 모여 있는지로 판단합니다.
클러스터링이 데이터를 묶는 작업 전체를 가리킨다면 DBSCAN은 그 작업을 수행하는 구체적인 규칙입니다. 정답 라벨을 맞히도록 학습하는 모델도, LLM이 문장을 생성하는 방식도 아닙니다. 숫자 특징이나 임베딩 사이의 거리를 이용해 입력 데이터의 구조를 탐색합니다.
한 줄 정리: DBSCAN은 밀집된 곳에서 연결을 넓혀 가되, 모든 점을 억지로 어느 그룹에 넣지는 않습니다.
쉬운 예시로 이해해 볼까요?
하나의 특징값으로 표현한 점 여섯 개가 있다고 가정해 보겠습니다. 값은 0, 0.1, 0.2, 0.3, 0.49, 2입니다. 설명용 설정으로 eps는 0.21, min_samples는 4를 사용하고 별도의 표본 가중치는 주지 않습니다. 거리는 두 값의 차이로 계산합니다.
0.1 주변에는 자기 자신을 포함해 0, 0.1, 0.2, 0.3이 있습니다. 모두 0.21 이내이므로 이 점은 핵심점입니다. 0.2와 0.3도 주변에 조건을 만족하는 점이 충분해 핵심점이 됩니다. scikit-learn의 min_samples는 자기 자신도 셉니다.
0.49는 주변 점이 충분하지 않아 핵심점이 아닙니다. 그래도 핵심점인 0.3과 가까우므로 같은 그룹의 경계점으로 들어갑니다. 0 역시 핵심점은 아니지만 그룹에 속합니다. 멀리 떨어진 2는 핵심점과 연결되지 않아 노이즈로 남습니다.
이 예시를 scikit-learn으로 실행하면 앞의 다섯 점은 같은 클러스터, 마지막 점은 -1로 표시됩니다. -1은 노이즈 라벨입니다. 0과 0.49의 거리가 eps보다 큰데도 같은 그룹이라는 점을 보세요. 핵심점의 이웃 관계가 이어지면 클러스터 전체 폭은 반경보다 커질 수 있습니다.
쉬운 예시: 한 모임의 모든 사람이 서로 바로 옆에 있어야 하는 것은 아닙니다. 사람이 충분히 모인 자리들이 이어져 있으면 길게 늘어진 하나의 모임이 됩니다. 다만 DBSCAN은 이 비유를 정해진 거리와 이웃 수로 엄격하게 계산합니다.
왜 AI에서 DBSCAN이 중요한가요?
그룹 수를 먼저 정하지 않아도 됩니다
문서나 센서 기록을 처음 살펴볼 때 묶음이 몇 개일지 모를 수 있습니다. DBSCAN은 K-means의 K처럼 클러스터 수를 직접 입력받지 않습니다. 선택한 거리와 밀도 기준에서 연결되는 영역을 찾은 결과로 그룹 수가 정해집니다. 설정이 필요 없다는 의미는 아닙니다.
둥글지 않은 데이터 구조를 찾습니다
초승달이나 길게 굽은 띠처럼 중심점 하나로 표현하기 어려운 모양도 핵심점들이 이어져 있으면 묶을 수 있습니다. 반대로 두 덩어리 사이에 밀집된 연결 구간이 생기면 사람이 나누고 싶었던 그룹이 합쳐질 수 있습니다. 모양을 찾는 장점과 연결에 민감한 한계를 함께 봅니다.
묶이지 않는 사례도 검토 대상으로 남깁니다
일부 알고리즘은 모든 점을 정해진 그룹에 배정하지만 DBSCAN은 노이즈를 별도로 남깁니다. 덕분에 흔한 패턴과 드문 패턴을 나눠 볼 수 있습니다. 드문 정상 사례나 새 주제가 노이즈로 나올 수도 있으므로 삭제보다 원자료 확인이 먼저입니다.
DBSCAN은 어떻게 작동하나요?
eps로 이웃 범위를 정합니다
eps는 두 점을 이웃으로 볼 최대 거리입니다. 같은 숫자라도 특징을 표준화했는지, 어떤 거리 함수를 썼는지에 따라 뜻이 달라집니다. scikit-learn API 문서는 이 값이 클러스터 내부의 모든 점 사이 거리를 제한하는 값이 아니라고 명시합니다.
min_samples로 핵심점을 구분합니다
일반적인 가중치 없는 설정에서는 자기 자신을 포함해 eps 이내의 표본 수가 min_samples 이상인 점이 핵심점입니다. 같은 반경에서 최소 표본 수를 높이면 더 조밀한 영역만 핵심점이 됩니다. 표본 가중치를 사용하면 단순 개수 대신 가중치 조건을 적용하므로 별도로 확인합니다.
핵심점에서 이웃을 따라 확장합니다
핵심점의 이웃을 모으고 그중 핵심점인 이웃에서 다시 범위를 넓힙니다. 핵심점은 아니지만 핵심점의 이웃인 점은 경계점으로 포함합니다. 경계점은 자기 주변의 다른 점을 계속 끌어오는 확장 거점이 아닙니다. 이 차이를 놓치면 가까운 점을 무조건 잇는 알고리즘으로 오해하기 쉽습니다.
확장이 끝나면 라벨을 확인합니다
어느 클러스터에도 들어가지 못한 점은 노이즈로 남습니다. scikit-learn에서는 labels_로 전체 라벨을 확인하고 core_sample_indices_로 핵심점의 위치를 확인합니다. 군집 수를 셀 때 -1은 일반 클러스터에서 제외하고 노이즈 수와 비율을 따로 기록합니다.
핵심 인사이트: DBSCAN의 판단 기준은 점 하나의 절댓값이 아니라 주변 이웃 관계입니다. 같은 점도 함께 분석하는 데이터와 설정이 달라지면 역할이 바뀔 수 있습니다.
DBSCAN과 헷갈리는 용어는 무엇이 다른가요?
클러스터링과 DBSCAN의 차이
클러스터링은 비슷한 사례를 묶는 작업이고 DBSCAN은 밀도로 그 작업을 수행하는 알고리즘입니다. 기본 개념은 클러스터링 용어 설명에서 확인할 수 있습니다. 여기서는 핵심점·경계점과 이웃 확장 규칙에 초점을 맞춥니다.
K-means와 DBSCAN의 차이
K-means는 정한 수의 중심점을 조정하고 각 사례를 가까운 중심에 배정합니다. DBSCAN은 클러스터 수 대신 밀도 조건을 정하며 노이즈를 남길 수 있습니다. 어떤 방법이 더 좋은지는 데이터 모양과 목적에 달렸습니다. 비슷한 크기의 둥근 그룹이라면 K-means도 유용한 비교 대상입니다.
이상 탐지와 DBSCAN의 차이
이상 탐지는 평소 패턴에서 벗어난 사례를 찾는 작업입니다. DBSCAN의 노이즈 라벨은 이상 후보를 찾는 단서가 될 수 있지만 위험도 점수나 부정행위 확정 결과는 아닙니다. 밀도가 낮은 정상 집단 전체가 노이즈로 남는지도 확인해야 합니다.
분류와 DBSCAN의 차이
분류 모델은 미리 정한 정답 범주를 학습해 새 입력을 판정합니다. DBSCAN의 군집 번호에는 그런 정답 의미가 없습니다. scikit-learn의 DBSCAN에는 일반 분류기처럼 새 표본을 바로 배정하는 predict 메서드가 없습니다. fit_predict는 입력한 데이터 자체를 다시 군집화해 라벨을 반환합니다.
실전에서는 어디에 쓰이나요?
공간 좌표와 센서 패턴을 탐색합니다
위치나 센서 측정값에서 조밀한 영역과 떨어진 관측값을 나눠 살펴보는 데 씁니다. 좌표의 거리 단위가 실제 분석 목적과 맞아야 합니다. 서로 다른 센서의 측정값을 섞을 때는 단위와 측정 간격부터 확인하고, 장비 오류 여부는 원본 기록과 대조합니다.
문서 임베딩의 묶음을 검토합니다
문의나 문서를 임베딩으로 바꾼 뒤 DBSCAN으로 비슷한 사례의 묶음을 탐색할 수 있습니다. 이는 적용 예시이며 모든 임베딩에서 좋은 결과를 보장하지 않습니다. 차원이 높으면 거리의 차이가 흐려질 수 있으므로 그룹별 대표 문서와 노이즈 문서를 사람이 읽어 봅니다.
데이터 품질 점검을 보조합니다
주된 패턴에서 떨어진 기록을 모아 누락, 단위 오류, 새로운 유형을 점검하는 출발점으로 사용합니다. 군집화만으로 어떤 원인인지 구분할 수는 없습니다. 복제된 데이터가 한곳에 몰리면 밀도가 부풀려지므로 중복 기록을 어떻게 다룰지도 분석 전에 정합니다.
DBSCAN을 적용할 때 어떤 순서로 확인하나요?
1. 사례와 거리의 뜻을 정합니다
한 행이 문서인지 센서 관측인지 먼저 정하고 식별자처럼 거리 의미가 없는 열을 제외합니다. 필요한 표준화는 목적에 맞춰 적용합니다. 공식 데모도 생성한 데이터를 StandardScaler로 변환한 뒤 군집화하지만 모든 데이터에 그 변환이 정답인 것은 아닙니다.
2. 반경과 최소 표본 수를 함께 비교합니다
eps와 min_samples를 여러 조합으로 바꿔 군집 수, 노이즈 비율, 그룹 크기 분포를 기록합니다. 최근접 이웃 거리 그래프의 꺾이는 부분은 반경 후보를 찾는 참고 자료입니다. 꺾이는 지점이 뚜렷하지 않거나 밀도가 다른 집단이 섞이면 한 값으로 결론 내리기 어렵습니다.
3. 핵심점과 경계 사례를 따로 읽습니다
큰 클러스터의 대표 사례만 보면 결과가 좋아 보이기 쉽습니다. 핵심점과 경계점, 노이즈를 나눠 살펴보고 목적과 다른 사례가 연결돼 있지 않은지 확인합니다. 정답 라벨이 있는 시험 데이터에서는 외부 평가 지표를 쓰고, 없는 데이터에서는 사례 검토와 설정 변화에 대한 안정성을 함께 봅니다.
4. 설정과 실행 조건을 저장합니다
입력 순서, 데이터 버전, 전처리, 거리 함수, eps, min_samples와 라이브러리 버전을 남깁니다. 다음 실행과 비교할 때 군집 번호만 맞추지 말고 구성원과 특징을 비교합니다. 작은 표본에서 시작해 이웃 수와 메모리 사용을 확인한 뒤 전체 데이터로 넓히는 편이 안전합니다.
사용할 때 무엇을 주의해야 하나요?
밀도가 다른 집단을 하나의 반경으로 나누기 어렵습니다. 조밀한 집단을 잘 나누는 작은 eps는 듬성듬성한 정상 집단을 노이즈로 만들 수 있습니다. 반경을 키우면 떨어져 있어야 할 그룹이 합쳐지기도 합니다. DBSCAN에 맞지 않는 데이터 구조일 가능성도 열어 둡니다.
입력 순서가 경계점의 소속에 영향을 줄 수 있습니다. 같은 데이터와 같은 순서에서는 결과가 결정적이지만 두 클러스터의 핵심점에 모두 가까운 경계점은 먼저 확장된 그룹에 들어갈 수 있습니다. 군집 번호 변경과 실제 구성원 변경을 구분해 비교하세요.
기본값을 최적값으로 받아들이지 않습니다. 숫자 단위나 임베딩 모델을 바꿨다면 예전에 쓰던 eps를 그대로 옮길 근거가 없습니다. 모든 점이 노이즈이거나 하나의 거대 그룹이면 설정, 전처리와 거리 기준을 다시 점검합니다.
메모리 비용을 실제 구현 기준으로 봅니다. scikit-learn은 이웃 질의를 모아서 계산합니다. 반경이 커 이웃이 많아지면 메모리 부담이 늘며 최악에는 표본 수의 제곱에 비례할 수 있습니다. 원 논문의 알고리즘 설명만 보고 현재 구현도 항상 선형 메모리라고 가정하면 안 됩니다.
주의: 노이즈는 현재 밀도 조건에서 어느 클러스터에도 속하지 않았다는 표시입니다. 오류·불량·위험한 사용자라는 뜻으로 바꾸거나 원본 데이터를 자동 삭제하는 근거로 쓰지 마세요.
자주 묻는 질문
Q1. DBSCAN도 클러스터 수를 정해야 하나요?
클러스터 수 자체를 입력하지는 않습니다. 대신 eps와 min_samples, 거리 기준을 정합니다. 그룹 수는 그 조건과 데이터에서 나온 결과이므로 사람이 원하는 개수와 다를 수 있습니다.
Q2. min_samples에 자기 자신도 포함하나요?
scikit-learn의 DBSCAN에서는 포함합니다. 별도 표본 가중치가 없다면 반경 안의 자신과 이웃을 합쳐 셉니다. 다른 구현을 사용할 때도 문서에서 포함 기준과 가중치 처리 방식을 확인하세요.
Q3. 같은 클러스터의 모든 점이 eps 이내인가요?
아닙니다. eps는 두 점 사이의 이웃 관계를 정하는 반경입니다. 핵심점들이 차례로 이어지면 클러스터 양 끝의 거리는 eps보다 훨씬 클 수 있습니다.
Q4. -1로 표시된 점은 지워도 되나요?
자동으로 지우지 않는 편이 좋습니다. 새 유형, 드문 정상 사례, 잘못된 거리 설정도 노이즈를 만들 수 있습니다. 노이즈 비율과 원자료를 확인하고 삭제가 필요한 이유를 별도로 검증합니다.
Q5. 새 데이터가 오면 기존 번호로 바로 분류하나요?
scikit-learn의 기본 DBSCAN은 새 표본용 predict를 제공하지 않습니다. 다시 군집화하거나 별도의 배정 규칙을 설계해야 하며, 그 규칙은 원래 DBSCAN과 같은 결과를 보장하지 않습니다. 번호보다 그룹의 구성과 의미를 비교하세요.
출처
마무리
DBSCAN은 핵심점의 이웃 관계를 확장해 밀집 영역을 묶고 노이즈를 따로 남기는 알고리즘입니다. 그룹 수를 먼저 정하지 않고 불규칙한 모양을 찾을 수 있지만 거리와 밀도 기준이 맞아야 결과를 해석할 수 있습니다.
처음에는 작은 데이터에서 핵심점·경계점·노이즈가 어떻게 나뉘는지 확인하세요. eps를 그룹 전체 폭으로 오해하지 않고, 노이즈를 오류로 단정하지 않는 것이 출발점입니다. 설정별 군집 수와 노이즈 비율, 대표 사례를 함께 보면 DBSCAN이 현재 데이터 탐색에 적합한지 판단하기 쉽습니다.
