콘텐츠로 이동

P4-17.1 클러스터링(clustering)의 직관

Section ID: P4-17.1 Version: v2026.07.20

P4-16에서는 그래디언트 부스팅(gradient boosting)까지 보면서, 정답(label)이 있는 문제에서 모델이 어떻게 예측 성능을 올리는지를 따라왔습니다. 여기서 시선을 조금 바꾸면 다음 질문이 나옵니다.

정답 라벨이 아예 없다면, 데이터 안의 구조는 어떻게 찾을 수 있을까?

이 질문이 클러스터링(clustering)의 출발점입니다.

클러스터링은 정답 라벨 없이, 서로 비슷한 데이터가 어떤 묶음(cluster)을 이루는지 찾으려는 비지도학습(unsupervised learning) 문제다.

즉, 클러스터링은 정답을 맞히는 문제라기보다 구조를 발견해 보는 문제에 가깝습니다.

이 절은 클러스터링(clustering), 군집(cluster), 정답 라벨과 군집의 차이를 설명합니다. 뒤 절에서는 이 손잡이를 바탕으로 현재 맥락의 판단을 이어 가고, 묶음 제안을 구조 탐색으로 읽는 기본 감각은 이 절과 개념사전을 기준으로 다시 연결합니다.

클러스터링(clustering)의 직관에서 닫을 질문

이 절은 다음 질문에 답합니다.

  • 클러스터링은 지도학습(supervised learning)과 무엇이 다른가?
  • 비슷하다(similar)는 말은 왜 중요한가?
  • 군집(cluster)은 정답 클래스(class)와 왜 다른가?
  • k-means와 DBSCAN은 어떤 다른 직관을 보여 주는가?
  • 클러스터링 결과를 어떤 태도로 읽어야 하는가?

이 절은 먼저 클러스터링이 라벨 없는 구조 탐색에서 어떤 질문에 답하는가를 닫습니다. 결과 해석의 주의점은 P4-17.2에서, 계층적 군집화와 스펙트럴 클러스터링은 P4-17.3 보충학습에서, 군집 품질 지표는 P4-6.4 보충학습에서, 차원 축소와 함께 구조를 읽는 주의점은 P4-18.1, P4-18.2에서 이어집니다.

클러스터링(clustering)의 직관에서 남길 판단 기준

  • 클러스터링을 라벨 없는 구조 찾기로 설명할 수 있습니다.
  • 군집은 사람이 붙여 준 정답이 아니라 데이터에서 찾은 묶음이라는 점을 설명할 수 있습니다.
  • k-means와 DBSCAN이 서로 다른 군집 직관을 가진다는 점을 말할 수 있습니다.
  • 클러스터링 결과를 곧바로 사실이나 원인으로 단정하면 왜 위험한지 감을 잡을 수 있습니다.

왜 이 절이 필요한가

머신러닝을 처음 배우면 보통 분류냐 회귀냐부터 생각합니다. 하지만 실제 업무에서는 라벨이 없는 데이터가 더 흔한 경우도 많습니다.

예를 들어:

  • 고객을 몇 가지 이용 패턴으로 묶어 보고 싶다
  • 뉴스 기사들이 어떤 주제 덩어리로 모이는지 보고 싶다
  • 센서 데이터가 몇 가지 상태로 나뉘는지 보고 싶다
  • 이상한 점(outlier)이 따로 튀는지 보고 싶다

이런 질문은 “정답이 무엇인가?”보다 “어떤 구조가 숨어 있는가?”를 묻습니다. 클러스터링은 바로 이런 질문에 들어가는 첫 도구입니다.

즉, 17.1은 예측 모델 중심의 시야에서 데이터 구조 탐색 중심의 시야로 넘어가는 절입니다.

언제 클러스터링을 먼저 떠올리면 좋은가

클러스터링은 정답을 맞히는 문제가 아니라, 라벨 없이 구조를 먼저 보고 싶은가가 기준일 때 자연스럽게 등장합니다.

현재 질문 클러스터링을 먼저 떠올릴 이유 먼저 확인할 점
라벨 없이 이용 패턴을 묶어 보고 싶다 비슷한 데이터의 묶음을 제안하는 데 맞기 때문 어떤 특징을 비슷함 기준으로 쓸지
정답보다 탐색적 구조 파악이 우선이다 예측보다 구조 발견이 목적이기 때문 군집을 정답처럼 읽지 않는지
이상치나 따로 튀는 묶음을 보고 싶다 밀도/거리 기반 군집으로 구조를 볼 수 있기 때문 k-means와 DBSCAN 중 무엇이 더 맞는지
고객/문서/센서 상태를 몇 덩어리로 나눠 보고 싶다 세그먼트 가설을 만드는 출발점이 되기 때문 군집 수나 밀도 기준의 민감성
후속 라벨링이나 도메인 검토 질문을 만들고 싶다 군집이 해석 후보를 제안해 주기 때문 군집 결과를 정책으로 바로 넘기지 않는지

이 표의 핵심은 클러스터링을 예측 모델의 대체재가 아니라 구조 탐색과 가설 생성의 도구로 위치시키는 데 있습니다.

클러스터링은 무엇을 하려는가

scikit-learn 사용자 가이드는 clustering을 unlabeled data에 대해 수행하는 작업으로 설명합니다. 즉, 이미 정답이 주어진 상태에서 맞히는 것이 아니라, 데이터를 묶을 기준을 알고리즘이 찾아보게 하는 것입니다.

라벨이 없는 점들을 보고, 서로 가까운 것끼리 혹은 비슷한 패턴을 가진 것끼리 묶어 보자.

이때 중요한 것은 비슷함(similarity)입니다. 클러스터링은 결국 무엇을 비슷하다고 볼 것인가의 문제와 연결됩니다.

지도학습과 무엇이 다른가

분류(classification)에서는 보통 이런 질문을 합니다.

  • 이 이메일은 스팸인가 아닌가?
  • 이 고객은 이탈할까 아닐까?

여기에는 이미 정답 라벨이 있습니다.

반면 클러스터링은 이렇게 묻습니다.

  • 이 고객들은 어떤 이용 패턴별로 나뉘어 보이는가?
  • 이 문서들은 어떤 주제 덩어리처럼 보이는가?

즉, 클러스터링은 라벨을 맞히는 문제가 아니라 라벨이 없을 때 묶음을 제안하는 문제입니다.

질문 지도학습 클러스터링
정답 라벨이 있는가 있다 없다
목표 정답 예측 구조 탐색
출력 class, score, value cluster label, grouping
핵심 질문 무엇을 맞힐까 무엇이 비슷하게 묶이는가

여기서 cluster label은 사람이 미리 준 의미가 아닙니다. 알고리즘이 편의상 붙인 번호일 뿐입니다.

이 차이를 한 번 더 도식으로 보면 다음과 같습니다.

flowchart TD
  A["입력 데이터"]
  B{"레이블이 주어졌는가?"}
  C["매핑을 학습"]
  D["알려진 타깃을 예측"]
  E["유사도 구조를 탐색"]
  F["군집 그룹을 제안"]

  A --> B
  B -->|예| C --> D
  B -->|아니오| E --> F

이 도식은 지도학습과 클러스터링의 출발점이 어디서 갈리는지 한 번에 보여 줍니다. 지도학습은 정답 라벨을 가지고 mapping을 배우지만, 클러스터링은 라벨 없이 비슷함의 구조를 먼저 찾고 그 묶음을 사람이 다시 해석해야 합니다.

비슷하다는 말이 왜 중요한가

클러스터링은 결국 데이터 사이의 거리(distance), 밀도(density), 연결(connectivity), 중심(center) 같은 개념 위에서 작동합니다.

즉, 군집은 그냥 생기는 것이 아니라, 어떤 기준으로 비슷함을 정의했는가에 따라 달라집니다.

예를 들어 고객 데이터를 생각해 봅시다.

  • 월 방문 수
  • 평균 구매 금액
  • 최근 로그인 일수

이 세 특징(feature)을 가지고 고객을 본다면, 비슷함은 이 세 축에서의 위치가 가깝다는 뜻이 될 수 있습니다.

하지만 텍스트 문서라면 비슷함은 단어 분포나 임베딩(embedding) 공간에서의 가까움으로 바뀔 수 있습니다.

즉, 클러스터링에서 “비슷하다”는 말은 감정적 표현이 아니라 특징 공간(feature space)에서의 관계 정의입니다.

이를 데이터 흐름처럼 줄이면 다음과 같습니다.

flowchart TD
  A["원시 기록"]
  B["특징을 고른다"]
  C["유사도를 정의한다<br/>거리 / 밀도 / 연결성"]
  D["가깝거나 관련된 점을 묶는다"]
  E["이 묶음이 의미 있는지 살핀다"]

  A --> B --> C --> D --> E

이 도식은 클러스터링이 데이터 원본에서 곧바로 답을 꺼내는 과정이 아니라는 점을 보여 줍니다. 어떤 특징을 고르고, 어떤 비슷함 규칙을 쓸지 정한 뒤에야 군집이 만들어지므로, 결과는 항상 표현 방식과 유사도 정의의 영향을 받습니다.

바로 앞 도식의 마지막 단계가 중요한데, 클러스터링은 정답 생성기가 아니라 구조 제안기입니다. 결과가 나오면, 그다음에는 사람이 그 묶음이 실제로 무슨 뜻인지 해석해야 합니다.

군집은 클래스(class)와 왜 다른가

가장 자주 하는 오해는 이것입니다.

군집이 나왔으니, 이것이 곧 진짜 카테고리이겠구나.

하지만 군집은 클래스와 다릅니다.

  • 클래스(class): 사람이 의미를 정해 둔 정답 범주
  • 군집(cluster): 데이터 안에서 알고리즘이 찾아낸 묶음

예를 들어 고객 세그먼트를 3개 군집으로 나눴다고 해서, 그것이 곧 “VIP / 일반 / 이탈위험” 같은 공식 범주를 뜻하는 것은 아닙니다. 그런 해석은 나중에 사람이 붙이는 것입니다.

즉, 클러스터링은 의미를 자동으로 확정하는 것이 아니라, 해석 후보를 제안하는 쪽에 가깝습니다.

이 점을 그림으로 보면 다음과 같습니다.

flowchart TD
  A["알고리즘 출력<br/>군집 0 / 1 / 2"]
  B["대표 사례를 검토한다"]
  C["가능한 의미를 나중에 붙인다<br/>VIP? 일반? 위험?"]

  A --> B --> C

이 도식은 군집 번호와 비즈니스 의미를 분리해서 읽게 해 줍니다. cluster 0, cluster 1 같은 출력은 아직 임시 번호일 뿐이고, 그것을 VIP 고객, 가벼운 사용자, 위험군처럼 해석하는 일은 뒤의 사람 검토 단계에서 이루어집니다.

k-means는 어떤 직관을 보여 주는가

scikit-learn 사용자 가이드는 K-means를 샘플을 n groups of equal variance로 나누고, inertia(within-cluster sum-of-squares)를 줄이려는 알고리즘으로 설명합니다. 또한 중심점(centroid)을 기준으로 각 샘플을 가장 가까운 군집에 배정하는 흐름을 설명합니다.

k-means는 몇 개의 중심점을 놓고, 각 점을 가장 가까운 중심에 붙이는 방식으로 군집을 만듭니다.

즉, k-means는 중심(center) 기반 직관입니다.

그래서 다음 상황에서 잘 어울리는 편입니다.

  • 군집 수를 미리 정할 수 있을 때
  • 군집이 둥글고 비교적 고른 크기처럼 보일 때
  • 빠르게 기본 구조를 보고 싶을 때

하지만 scikit-learn 문서도 지적하듯, 길쭉하거나 복잡한 모양의 군집에는 잘 맞지 않을 수 있습니다.

DBSCAN은 어떤 직관을 보여 주는가

scikit-learn clustering 개요 표는 DBSCAN을 non-flat geometry, uneven cluster sizes, outlier removal에 유용한 방식으로 설명합니다.

DBSCAN은 중심점을 먼저 정하지 않고, 점이 얼마나 빽빽하게 모여 있는지를 보고 군집을 만든다.

즉, DBSCAN은 밀도(density) 기반 직관입니다.

그래서 다음 상황에서 떠올립니다.

  • 군집 모양이 둥글지 않을 때
  • 일부 점을 노이즈(noise)나 이상치처럼 따로 두고 싶을 때
  • 군집 크기가 고르지 않을 수 있을 때

반대로, 밀도 차이가 매우 크거나 파라미터가 맞지 않으면 군집이 잘 안 잡힐 수 있습니다.

k-means와 DBSCAN을 나란히 보면

질문 k-means DBSCAN
군집 직관 중심(center) 밀도(density)
군집 수를 미리 정하나 보통 그렇다 보통 아니다
이상치 처리 약하다 상대적으로 잘 드러낸다
군집 모양 둥글고 고른 모양에 더 잘 맞는다 복잡한 모양에도 대응할 수 있다

이 비교는 “무엇이 더 좋다”가 아니라 “무슨 구조를 기대하느냐”의 차이입니다.

직관만 비교하면, 두 알고리즘은 아예 다른 질문에서 출발한다고 보는 편이 더 읽기 쉽습니다.

flowchart LR
  A["k개의 중심 선택"]
  B["가장 가까운 중심에 점을 배정"]
  C["중심을 갱신"]

  A --> B --> C
flowchart LR
  A["밀집한 이웃을 찾는다"]
  B["연결된 밀집 영역을 확장한다"]
  C["드문 점은 잡음으로 남긴다"]

  A --> B --> C

앞 도식은 k-means가 중심점을 먼저 두고 점을 붙이는 방식임을, 뒤 도식은 DBSCAN이 빽빽하게 이어진 영역을 확장하고 듬성한 점은 남기는 방식임을 각각 따로 보여 줍니다. 비교를 한 장에 몰아넣지 않고 분리하면, 독자는 중심 기반밀도 기반이 서로 다른 군집 질문이라는 점을 더 빨리 읽을 수 있습니다.

사례 및 예시

사례 1. 쇼핑몰 고객을 매출 순위가 아니라 이용 패턴으로 다시 묶어 보고 싶을 때

온라인 쇼핑몰 팀이 고객을 볼 때는 이번 달 구매액이 큰가 같은 단일 기준으로만 나누기 쉽습니다. 하지만 실제로는 방문은 잦지만 소액으로 자주 사는 고객, 방문은 드물지만 한 번에 크게 사는 고객, 최근 방문이 끊긴 고객처럼 서로 다른 패턴이 섞여 있어서, 금액 하나만 보면 같은 부류로 묶여 버릴 수 있습니다. 클러스터링은 방문 수, 구매 금액, 최근 접속일 같은 특징을 함께 보고 비슷한 고객 묶음을 제안합니다. 그래서 팀은 단순 매출 순위표로는 보이지 않던 행동 패턴 중심의 고객 그룹을 발견하고, 이후 해석과 마케팅 전략 검토를 이어갈 수 있습니다.

flowchart TD
  A["고객 표"]
  B["구매만으로 \n 순위를 매긴다"]
  C["섞인 행동 패턴이 \n 숨는다"]
  D["방문, 지출, 최근성으로 \n 군집화"]
  E["자주 사지만 \n 소액인 고객"]
  F["드물게 사지만 \n 고액인 고객"]
  G["최근 \n 비활성 고객"]
  H["사업적 의미는 \n 나중에 검토"]

  A --> B --> C
  A --> D
  D --> E
  D --> F
  D --> G
  E --> H
  F --> H
  G --> H

이 사례를 review 메모처럼 줄이면 다음과 같이 적을 수 있습니다.

묶음 후보 대표 사례 지금 바로 단정하지 않을 것 다음 확인 질문
자주 방문하지만 소액 구매가 많은 고객 묶음 방문 수는 높고 구매액은 중간 이하인 고객 샘플 곧바로 VIP나 충성 고객이라고 부르지 않는다 재방문율, 장기 가치, 이탈률과도 연결되는가
드물게 방문하지만 한 번에 크게 사는 고객 묶음 방문 수는 낮지만 구매액이 높은 고객 샘플 바로 별도 고가 고객군 정책으로 넘기지 않는다 시즌성 구매인지, 반복 패턴인지 확인할까

사례 2. 기사 분류 라벨이 없을 때 편집 검토용 주제 묶음을 먼저 만들고 싶을 때

뉴스 서비스 팀이 새로 들어오는 기사들을 정리하려는데, 아직 정치, 경제, 스포츠 같은 라벨이 충분히 붙어 있지 않다고 해 보겠습니다. 사람이 제목만 훑어보며 순서대로 분류하려 하면, 기술 기사와 산업 기사처럼 경계가 애매한 문서는 어디에 넣을지 자주 흔들립니다. 이때 클러스터링은 기사 임베딩이나 단어 분포를 바탕으로 비슷한 기사끼리 먼저 묶어 보는 출발점을 제공합니다.

여기서 중요한 것은 군집이 곧바로 정답 카테고리를 대신하지 않는다는 점입니다. 예를 들어 어떤 묶음이 반도체 투자, AI 칩, 데이터센터 기사를 함께 모았다면, 그것은 기술 군집일 수도 있고 산업 군집일 수도 있습니다. 즉, 클러스터링은 편집팀에게 먼저 같이 검토해 볼 문서 덩어리를 제안해 주지만, 최종 주제명과 운영 분류 체계는 여전히 사람이 다시 붙여야 합니다.

flowchart TD
  A["유입 기사들"]
  B["제목만으로 수동 훑기"]
  C["경계선 주제가 일관되지 않게 처리됨"]
  D["텍스트 유사도로 군집화"]
  E["묶인 기사 집합을 검토"]
  F["편집 라벨은 나중에 붙임"]

  A --> B --> C
  A --> D --> E --> F

이 사례를 작업 메모처럼 줄이면 다음과 같이 적을 수 있습니다.

묶음 후보 대표 사례 지금 바로 단정하지 않을 것 다음 확인 질문
반도체 투자와 AI 인프라 기사가 함께 모인 묶음 데이터센터 투자 기사, AI 칩 수요 기사 곧바로 기술 군집이라고 확정하지 않는다 산업 기사와 기술 기사 경계가 어디서 갈리는가
선수 경기 결과와 구단 운영 기사가 함께 모인 묶음 경기 요약 기사, 감독 교체 기사 바로 스포츠 한 묶음으로만 고정하지 않는다 결과 기사와 운영 기사도 다시 나눌 필요가 있는가

연습 및 예제

이번 예제는 좌표 두 개만으로, 점들이 두 덩어리처럼 보이는지 확인하는 아주 작은 실습입니다. 여기서는 한 번 실행하고 끝내지 않고, 점 하나를 바꾸었을 때 군집 가설이 어떻게 흔들리는지도 같이 봅니다.

  • 문제 상황: 라벨이 없는 점들이 자연스럽게 몇 덩어리처럼 보이는지 본다
  • 입력(input): 2차원 좌표
  • 기대 출력(output): 가까운 점 묶음에 대한 직관
  • 확인할 개념:
  • 군집은 위치 관계에서 시작한다
  • 라벨이 없어도 묶음 감각은 만들 수 있다

먼저 아래 좌표를 보고, 점들이 몇 덩어리처럼 보이는지 스스로 적어 봅니다.

점 ID 좌표
A (1.0, 1.2)
B (1.1, 0.9)
C (0.8, 1.0)
D (5.0, 5.1)
E (5.2, 4.9)
F (4.8, 5.0)

이 장면에서는 보통 다음처럼 읽게 됩니다.

먼저 보인 묶음 가설 왜 이렇게 읽기 쉬운가
A, B, C가 한 덩어리처럼 보인다 좌측 아래에 서로 가깝게 모여 있기 때문
D, E, F가 다른 한 덩어리처럼 보인다 우측 위에 서로 가깝게 모여 있기 때문
전체적으로는 두 묶음처럼 보인다 두 점 집합 사이의 간격이 비교적 크기 때문

여기서 먼저 읽어야 할 것은 다음 세 가지입니다.

  1. 라벨이 없어도 점 위치를 보면 덩어리 감각이 생길 수 있습니다.
  2. 군집은 결국 어떤 공간에서 가까운 점들이 모이는가의 문제와 연결됩니다.
  3. 실제 알고리즘은 이런 묶음 기준을 더 일반화해 자동으로 찾으려는 것입니다.

값 하나 바꿔 보기: 가운데 점이 들어오면 어떻게 읽어야 할까

이번에는 가운데 점 G를 추가해 다시 읽어 봅니다.

점 ID 좌표
A (1.0, 1.2)
B (1.1, 0.9)
C (0.8, 1.0)
G (3.0, 3.1)
D (5.0, 5.1)
E (5.2, 4.9)
F (4.8, 5.0)

먼저 스스로 다음 질문에 답해 봅니다.

  • 여전히 두 덩어리라고 바로 말할 수 있는가?
  • G는 왼쪽 묶음, 오른쪽 묶음, 경계 사례 중 어디에 더 가깝게 읽히는가?
  • 지금 필요한 것은 정답 군집 번호인가, 애매한 점이 어디서 생기는가를 기록하는 일인가?

그다음 아래 해설과 비교합니다.

달라진 장면 먼저 다시 봐야 할 것 왜 중요한가
가운데 점 G가 추가되었다 두 묶음 경계가 여전히 선명한가 경계 사례 하나만으로도 구조 가설이 흔들릴 수 있기 때문
왼쪽 3개, 오른쪽 3개라는 단순 묶음이 깨졌다 G를 어느 쪽으로 읽는지가 자동으로 정해지는가 군집은 정답이 아니라 해석 후보라는 점이 드러나기 때문
점 수가 3 대 3에서 3 대 4로 바뀌었다 묶음 크기보다 경계 해석이 더 중요해졌는가 실무에서는 군집 번호보다 애매한 지점을 먼저 기록해야 하기 때문

점 하나만 추가했는데도 두 덩어리라는 해석은 덜 선명해집니다. 여기서 독자가 체감해야 하는 것은 클러스터링이 답을 주는 장치가 아니라 어떤 비슷함 기준을 택했을 때 구조 가설이 어떻게 달라지는지 보는 장치라는 점입니다. 같은 데이터를 두고도 경계 근처 점을 어떻게 읽는지에 따라 묶음 해석이 바뀌므로, 실무에서는 군집 번호보다 먼저 무엇이 애매했는가를 메모해야 합니다.

k-means와 DBSCAN을 같은 점 집합에 적용해 보기

이번에는 같은 장난감 데이터에 k-meansDBSCAN을 나란히 적용해, 중심 기반밀도 기반이 실제로 어떤 다른 출력을 만드는지 확인해 봅니다.

  • 문제 상황: 두 개의 조밀한 묶음과 멀리 떨어진 점 하나가 있을 때, k-meansDBSCAN이 그 점을 어떻게 다르게 읽는지 본다
  • 입력(input): 두 개의 조밀한 묶음 + 멀리 떨어진 점 1개
  • 기대 출력(output): k-means는 멀리 떨어진 점도 둘 중 한 군집에 넣고, DBSCAN은 그 점을 노이즈로 남길 수 있음을 확인한다
  • 확인할 개념:
  • k-means는 미리 정한 군집 수 안에서 모든 점을 배정한다
  • DBSCAN은 밀도가 낮은 점을 군집 밖에 둘 수 있다
# 같은 점 집합에서 k-means와 DBSCAN이 외곽점 G를 어떻게 다르게 배정하는지 비교하는 예제입니다.
import numpy as np
from sklearn.cluster import DBSCAN, KMeans

names = ["A", "B", "C", "D", "E", "F", "G"]
X = np.array([
    [1.0, 1.1],
    [1.2, 0.9],
    [0.9, 1.0],
    [5.0, 5.1],
    [5.2, 4.8],
    [4.9, 5.0],
    [8.5, 1.0],
])

kmeans = KMeans(n_clusters=2, random_state=0, n_init=10)
km_labels = kmeans.fit_predict(X)

left_km = int(np.argmin(kmeans.cluster_centers_[:, 0]))
right_km = int(np.argmax(kmeans.cluster_centers_[:, 0]))
km_groups = {
    "left-centered group": [name for name, label in zip(names, km_labels) if label == left_km],
    "right-centered group": [name for name, label in zip(names, km_labels) if label == right_km],
}

dbscan = DBSCAN(eps=0.6, min_samples=2)
db_labels = dbscan.fit_predict(X)

dense_labels = sorted(label for label in set(db_labels) if label != -1)
db_groups = {}
for order, label in enumerate(dense_labels, start=1):
    db_groups[f"dense group {order}"] = [
        name for name, current in zip(names, db_labels) if current == label
    ]
db_groups["noise"] = [name for name, current in zip(names, db_labels) if current == -1]

print("k-means :", km_groups)
print("DBSCAN  :", db_groups)

실행 결과 예시는 다음과 같습니다.

k-means : {'left-centered group': ['A', 'B', 'C'], 'right-centered group': ['D', 'E', 'F', 'G']}
DBSCAN  : {'dense group 1': ['A', 'B', 'C'], 'dense group 2': ['D', 'E', 'F'], 'noise': ['G']}

이 결과에서 먼저 읽어야 할 것은 다음입니다.

비교 포인트 k-means에서 보인 것 DBSCAN에서 보인 것 왜 중요한가
군집 수 처리 미리 정한 2개 군집 안에 모든 점을 넣었다 조밀한 묶음 2개를 만들고 G는 노이즈로 남겼다 군집 수를 강제하는가군집 밖 점을 남길 수 있는가가 갈리는 지점이기 때문
멀리 떨어진 점 G 오른쪽 군집에 함께 배정되었다 어떤 군집에도 넣지 않았다 이상치처럼 보이는 점을 어떻게 다루는지 차이가 직접 보이기 때문
해석 방식 모든 점은 둘 중 하나에 속한다는 읽기로 기운다 조밀한 묶음만 군집으로 보고 나머지는 남긴다는 읽기로 기운다 중심 기반과 밀도 기반 직관 차이를 출력 수준에서 확인하게 해 주기 때문

즉, 같은 입력이어도 k-means미리 정한 군집 수 안에서 중심에 따라 배정하는 방식으로 읽히고, DBSCAN조밀한 영역을 군집으로 만들고 듬성한 점은 밖에 둘 수 있는 방식으로 읽힙니다. 그래서 이상치처럼 보이는 점을 따로 남기고 싶은 장면에서는 DBSCAN이 더 자연스럽고, 빠르게 몇 개 묶음을 기준선으로 보고 싶은 장면에서는 k-means가 더 자연스럽습니다.

이 예제에서 같이 읽어야 할 것

Part 4의 목표는 모델 이름을 나열하는 것이 아니라, 문제를 어떻게 정의하고 결과를 어떻게 읽어야 하는지 판단 기준을 세우는 데 있습니다. 이 연습에서는 정답 라벨이 없는 구조 탐색 문제라는 문제 정의, 중간 점 하나가 들어오면 군집 가설이 흔들린다는 평가 관점, k-means와 DBSCAN이 같은 점을 서로 다르게 읽을 수 있다는 비교 관점, 묶음 가설과 대표 사례를 함께 남겨야 한다는 적용 원칙을 한 번에 확인합니다. 즉, 클러스터링 예제를 돌렸는데도 목표가 체감되지 않았다면, 대개 실행 횟수가 부족해서가 아니라 결과 차이를 해석하고 다음 질문으로 넘기는 문장이 빠져 있었던 것입니다.

공통 기록 언어 이번 예제에서 바로 남길 내용
보인 구조 두 덩어리처럼 보이던 점 집합이 경계 점 하나만으로도 흔들릴 수 있었다
해석 경계 군집은 자동 정답이 아니라 비슷함 기준 위에서 만든 해석 후보다
다음 질문 거리 기준, 스케일, 이상치 처리 방식을 바꾸면 묶음이 어떻게 달라지는가
같이 봐야 할 것 이 절에서 먼저 읽는 질문 바로 다음에 이어질 곳
묶음 가설 어떤 특징 기준에서 어떤 그룹이 보였는가 P4-17.2 군집 해석의 주의점
대표 사례 각 묶음을 실제 샘플 수준에서 어떻게 설명할 것인가 군집별 요약과 도메인 해석
다음 확인 질문 이 구조가 정말 의미 있는지 무엇으로 다시 확인할 것인가 스케일, 파라미터, 후속 성과 비교

체크리스트

  • 지금 필요한 것이 정답 예측이 아니라 구조 탐색이라는 점을 분명히 했는가?
  • 클러스터링이 라벨 없는 데이터에서 구조를 찾는 비지도학습이라는 점을 설명할 수 있는가?
  • 군집이 정답 클래스가 아니라 해석 후보라는 점을 설명할 수 있는가?
  • 비슷함이 거리, 밀도, 연결 같은 기준 위에서 정의된다는 점을 이해했는가?
  • k-means와 DBSCAN을 비교할 때 중심 기반과 밀도 기반이라는 직관 차이부터 말할 수 있는가?
  • 어떤 비슷함 기준과 어떤 군집 직관(k-means/DBSCAN)을 쓰는지 분리해 말할 수 있는가?
  • 클러스터링 결과가 해석의 출발점이지 자동으로 확정되는 진실은 아니라는 점을 알고 있는가?

출처와 참고 자료