1. Silhouette Score?
[STUDY/ML(Machine Learning)] - [ML] K-means clustering
[ML] K-means clustering
1. K-means clustering?데이터를 $K$개의 그룹(군집)으로 자동으로 나눠주는 비지도학습 알고리즘각 군집을 대표하는 중심점(centroid)을 그 군집에 속한 데이터들의 평균(mean) 위치로 잡아가면서 군집을
blog.chaenii.me
클러스터링은 비지도학습이라 "정답"이 없다. KMeans를 $K=10$으로 돌린 결과와 $K=70$으로 돌린 결과 중 뭐가 더 "좋은" 군집인지 어떻게 판단할까?
우선 좋은 군집화란: 같은 군집 안의 데이터끼리는 가깝고, 다른 군집과는 멀어야 한다
이 두 조건을 하나의 점수로 합쳐, 좋은 군집화의 표준 지표가 되는 것이 Silhouette Score다.
2. 계산
수식
데이터 포인트 하나(예: $x$)에 대해:
- $a$ = $x$와 같은 군집에 속한 다른 모든 점들까지의 평균 거리 ("내부 응집도" — 작을수록 좋음)
- $b$ = $x$와 가장 가까운 다른 군집에 속한 점들까지의 평균 거리 ("외부 분리도" — 클수록 좋음)
$$
s(x) = \frac{b - a}{\max(a, b)}
$$
- 전체 실루엣 스코어: 모든 데이터 포인트의 $s(x)$를 평균낸 값.
정의 조건
실루엣 스코어는 군집이 최소 2개 이상이어야 계산할 수 있다.
모든 점이 하나의 군집이면 "다른 군집과의 거리" $b$가 없고, 반대로 모든 점이 자기 혼자만의 군집이면 "같은 군집 내 평균 거리" $a$를 안정적으로 정의하기 어렵다.
실무 라이브러리에서는 보통 $2 \le n_{labels} \le n_{samples}-1$ 조건에서만 계산한다.
왜 분모가 $\max(a,b)$인가?
분모 역할은 분자 $(b-a)$를 $[-1,1]$ 범위로 정규화하는 것이다.
$a, b$ 둘 다 양수인 거리이고, 둘 중 큰 값보다 둘의 차이가 더 클 수 없으므로 $|b-a| \le \max(a,b)$가 항상 성립한다.
-> $\max(a,b)$로 나누면 자동으로 $-1 \le s(x) \le 1$ 범위에 들어온다.
굳이 $a+b$나 다른 값으로 나누지 않고 $\max(a,b)$를 쓰는 이유는,
둘 중 더 "안 좋은"(더 큰) 거리를 기준으로 잡아서 점수가 한쪽 극단에 치우치지 않게 균형을 맞추기 위함이다.
계산해보기
아주 작은 예시로 감을 잡아보자.
1차원 직선 위에 점 5개가 있고, 군집이 2개로 나뉘어 있다고 하자
군집 A = {1, 2, 3}, 군집 B = {8, 9}.
점 $x=2$ (군집 A 소속)를 기준으로 계산하면:
- $a$ = 같은 군집(A)의 다른 점들까지 평균 거리 = $\frac{|2-1| + |2-3|}{2} = \frac{1+1}{2} = 1$
- $b$ = 가장 가까운 다른 군집(B)의 점들까지 평균 거리 = $\frac{|2-8| + |2-9|}{2} = \frac{6+7}{2} = 6.5$
- $s(2) = \frac{b-a}{\max(a,b)} = \frac{6.5 - 1}{6.5} \approx 0.846$
자기 군집과는 가깝고(1) 다른 군집과는 멀어서(6.5), 점수가 1에 가깝게 나온다.
-> 군집이 잘 분리된 경우의 전형적인 모습.
같은 방식으로 모든 점에 대해 계산해서 평균을 내면 전체 실루엣 스코어가 나온다.

값 해석
- 1 \le s \le 1
- $s \approx 1$: $a \ll b$ — 자기 군집과는 아주 가깝고 다른 군집과는 멀다. 군집 분리가 잘 됨
- $s \approx 0$: $a \approx b$ — 군집 경계에 애매하게 걸쳐 있음
- $s \approx -1$: $a \gg b$ — 사실 다른 군집에 더 가까운데 잘못 배정됨
실전에서 0.7 이상이면 꽤 잘 분리된 것으로 보고, 0.5 이하면 군집 경계가 흐릿하다고 본다 (절대적인 기준은 아니고 도메인에 따라 다름).
3. 거리 메트릭 선택
$a$, $b$를 계산할 때 어떤 거리 함수를 쓰느냐를 고를 수 있다.(유클리드 거리, 코사인 거리 등.)
텍스트 기반 군집(TF-IDF 벡터 등)에는 코사인 거리를 쓰는 게 일반적이고,
이미 저차원으로 변환된 dense 벡터(SVD 적용 후)에는 유클리드 거리를 쓰는 경우가 많다.
같은 데이터라도 어떤 거리 메트릭을 쓰느냐에 따라 점수가 다르게 나올 수 있으니,
서로 다른 군집화 방법을 비교할 때는 같은 메트릭으로 맞춰서 비교해야 한다.
(혹은 메트릭이 다르다는 걸 명시해야 함)
4. 계산 비용과 샘플링
실루엣 스코어 계산은 모든 점 쌍 사이의 거리를 계산해야 한다.
-> 데이터가 $N$개면 $O(N^2)$ 비용
-> 데이터가 수만~수십만 건이면 이 계산이 너무 느려진다.
그래서 실전에서는 전체 데이터가 아니라 무작위로 뽑은 일부(예: 1만 개)에 대해서만 계산하고,
이를 "샘플링된 실루엣 스코어"라고 부른다.
전체를 정확히 대표하진 않지만 합리적인 근사치를 빠르게 얻을 수 있다.
5. 다른 수학적 평가 지표
실루엣 스코어의 $O(N^2)$ 비용이 부담스러울 때, 또는 다른 각도의 관점이 필요할 때 쓰는 지표들이 있다.
Davies-Bouldin Index(DBI)
군집 내 분산 대비 군집 간 거리.
$$\text{DBI} = \frac{1}{K} \sum_{i=1}^{K} \max_{j \neq i} \left( \frac{s_i + s_j}{d_{ij}} \right)$$
$s_i$는 군집 $i$의 평균 내부 거리(군집이 얼마나 흩어져 있는가), $d_{ij}$는 군집 $i$와 $j$의 중심점 사이 거리.
- 낮을수록 좋다. 군집 내부는 조밀하고 군집끼리는 멀리 떨어진 경우
- 계산 비용: 라벨과 중심/분산을 이미 구해둔 뒤에는 대략 $O(N + K^2)$ — 각 점의 군집 내 퍼짐을 한 번 훑고, 군집 쌍 사이 거리를 비교한다. 실루엣보다 훨씬 빠른 편이라 보통 샘플링 없이 계산 가능
- 단점: 볼록한(convex) 모양의 군집을 가정해서, 불규칙한 모양의 군집에는 잘 맞지 않음
Calinski-Harabasz Score(CH) (분산 비율 기준)
$$\text{CH} = \frac{\text{군집 간 분산} / (K-1)}{\text{군집 내 분산} / (N-K)}$$
군집 간 분산이 크고(군집끼리 잘 떨어짐) 군집 내 분산이 작을수록(군집 내 조밀) 점수가 높다.
- 높을수록 좋다 (DBI와 반대)
- 계산 비용: 대체로 데이터 수에 선형적인 빠른 지표 — 실루엣처럼 모든 점 쌍 거리를 보지 않아 훨씬 가볍다
- 단점: $K$가 커질수록 점수가 올라가는 경향이 있어서 $K$ 선택 시 과적합 주의
세 지표 비교
| 지표 | 좋은 방향 | 계산 비용 | 특징 |
| 실루엣 스코어 | 높을수록 ([−1,1][-1,1]) | $O(N^2)$ | 개별 점 수준 진단 가능, 느림 |
| Davies-Bouldin | 낮을수록 | $O(K^2)$ | 빠름, 볼록 군집 가정 |
| Calinski-Harabasz | 높을수록 | $O(N \cdot K)$ | 빠름, $K$클수록 올라가는 경향 |
실전에서는 세 가지를 함께 계산해서 방향이 일치하는 $K$를 선택하는 게 가장 안정적이다.
6. 다른 평가 지표: empty cluster, 군집 크기 분포
실루엣 스코어 외에도 실전에서 중요하게 보는 것들:
- 빈 군집(empty cluster) 개수
- 목표가 $K$개일 때, 실제로 데이터가 하나도 배정 안 된 군집이 몇 개인지.
- 많으면 $K$를 잘못 잡았거나 알고리즘이 데이터 분포에 안 맞는다는 신호
- 군집 크기 분포(최대/최소/중간값)
- 한 군집에 데이터가 몰려있고 나머지는 텅 비어있다면 "균형 잡힌 군집화"가 아니다
이 두 지표는 K-Means와 SOM처럼 서로 다른 클러스터링 방법을 비교할 때 실루엣 스코어보다 오히려 더 직관적으로 차이를 보여줄 때가 많다.
예를 들어 격자가 고정된 SOM은 데이터 분포가 70개 칸에 균등하게 안 맞으면 빈 칸이 많이 생기는데, 자유롭게 움직이는 KMeans는 빈 군집이 거의 안 생긴다.
7. 마무리
- 실루엣 스코어 = "같은 군집과는 가깝고, 다른 군집과는 먼가"를 $-1$~$1$로 수치화한 지표
- $s(x) = (b-a)/\max(a,b)$ — 1에 가까울수록 잘 분리된 군집, 0이면 경계가 애매, 음수면 잘못 배정된 것
- 거리 메트릭(유클리드/코사인) 선택에 따라 점수가 달라지므로, 서로 다른 군집화 방법을 비교할 땐 메트릭을 통일해야 함
- 계산량이 $O(N^2)$이라 대용량에서는 샘플링해서 근사치를 구함
- 빈 군집 개수, 군집 크기 분포도 함께 보는 게 실전적
GitHub 댓글