미리 정한 정답표가 없는 묶음 찾기
웹사이트 이용자를 방문 횟수와 머문 시간으로 묶는다고 합시다. 이미 정해진 회원 등급을 예측하는 문제와, 비슷한 이용 패턴의 집단을 찾아보는 문제는 다릅니다. 앞의 문제는 목표 레이블을 배우는 분류이고 뒤의 문제는 군집분석입니다. 군집은 주어진 특성과 거리 또는 밀도 기준에 맞춰 자료를 묶는 비지도학습의 한 방법입니다.
좋은 군집인지는 사용한 변수, 유사성 기준, 활용 목적에 따라 판단합니다. 방문 횟수로 만든 묶음과 읽은 주제로 만든 묶음은 같은 사람들에서도 달라질 수 있습니다. 군집 번호 0, 1, 2는 보통 식별용 라벨이며 우수함의 순서가 아닙니다.
K-means는 중심과의 제곱거리를 줄이는 기준, 계층적 방법은 군집을 합치거나 나누는 기준, DBSCAN은 이웃이 충분히 모였는지를 판단하는 밀도 기준을 사용합니다.
네 점으로 K-means의 목적을 계산합니다
일차원 자료 1, 2, 8, 9를 두 군집으로 나눠 봅니다. {1, 2}와 {8, 9}의 중심은 각각 1.5와 8.5입니다. 각 점에서 자기 군집 중심까지의 거리를 제곱해 더하면 0.25 + 0.25 + 0.25 + 0.25 = 1입니다. 이 군집 내 제곱합을 작게 만들려는 것이 K-means의 기본 목적입니다.
모두 한 군집으로 두면 중심은 5입니다. 제곱거리 합은 16 + 9 + 9 + 16 = 50입니다. 두 군집으로 나누면서 값이 크게 줄었습니다. 그러나 군집을 네 개로 만들어 각 점을 혼자 두면 제곱합은 0이 됩니다. 이 숫자만 줄이려 하면 모든 점을 별도 군집으로 만들게 됩니다. 군집 수를 정할 때 제곱합 외에 해석 가능성과 다른 평가도 필요한 이유입니다.
K-means는 정한 개수의 중심에 점을 배정하고, 각 묶음의 평균으로 중심을 다시 계산하는 과정을 반복합니다. 초기 중심에 따라 다른 결과에 도달할 수 있으므로 여러 초기화나 적절한 초기화 방법을 사용합니다. 알고리즘이 멈췄다는 사실은 전체 가능한 분할 중 가장 좋은 해를 증명했다는 뜻이 아닙니다.
거리의 단위가 묶음을 좌우합니다
두 특성이 방문 횟수와 체류 시간이라면 단위를 먼저 확인합니다. 방문 횟수가 1부터 10이고 체류 시간이 초 단위로 수백에서 수천까지 나타나면, 단순 유클리드 거리에서는 시간 차이가 계산을 지배할 수 있습니다. 표준화 등을 검토할 때는 모든 변수를 같은 비중으로 보는 것이 목적에 맞는지도 살펴봅니다.
표준화는 단위를 맞추는 유용한 방법이지만 아무 변수나 추가해도 된다는 허가가 아닙니다. 의미 없는 식별번호를 거리 계산에 넣으면 번호가 비슷한 사람을 묶을 수 있습니다. 명목형 범주에 1, 2, 3을 붙였다고 수치 간 거리가 생기는 것도 아닙니다. 변수의 측정 수준과 거리 정의를 먼저 연결합니다.
| 방법 | 묶음을 만드는 기준 | 확인할 조건 |
|---|---|---|
| K-means | 점과 중심 사이의 제곱거리 | 군집 수, 단위, 초기 중심, 이상치 |
| 계층적 군집 | 군집 사이의 연결 거리 | 거리 척도와 연결 방법, 절단 위치 |
| DBSCAN | 이웃 반경 안에 모인 점의 밀도 | 이웃 반경, 최소 점 수, 밀도 차이 |
계층적 군집에서도 연결 방법에 따라 결과가 달라집니다. 단일 연결은 두 군집의 가장 가까운 점 사이 거리를, 완전 연결은 가장 먼 점 사이 거리를 사용합니다. 가까운 점이 사슬처럼 이어질 때와 군집 전체가 조밀하게 모일 때를 다르게 판단하므로 덴드로그램의 모습도 달라질 수 있습니다.
실루엣은 안쪽 거리와 바깥쪽 거리를 비교합니다
한 점의 실루엣을 계산할 때 a는 같은 군집의 다른 점까지의 평균 거리입니다. b는 그 점이 속하지 않은 각 군집까지 평균 거리를 구한 뒤 가장 작은 값입니다. 계산식은 (b − a)/max(a, b)입니다. 가까운 다른 군집의 중심까지 거리 하나를 그대로 b에 넣는 것이 아니라, 그 군집 구성원까지의 평균 거리를 사용합니다.
앞의 {1, 2}, {8, 9} 분할에서 점 1의 a는 1입니다. 다른 군집의 8과 9까지 거리는 7과 8이므로 b는 7.5입니다. 실루엣은 (7.5 − 1)/7.5로 약 0.867입니다. 점 2에서는 a가 1, b가 6.5이므로 약 0.846입니다. 점 8과 9도 대칭적으로 같아 전체 평균은 약 0.856입니다.
1에 가까우면 자기 군집 안에서 가깝고 다른 군집과 떨어져 있다는 신호입니다. 0 근처이면 경계가 겹칠 수 있고, 음수이면 선택한 거리 기준에서 다른 군집 쪽이 더 가까운 점일 수 있습니다. 점수가 높다는 사실이 묶음에 현실적인 의미가 있다는 증명은 아닙니다. 비슷한 모양의 볼록한 군집에 유리한 평가 특성도 있어 밀도 기반 군집과 단순 비교할 때 주의합니다.
잡음으로 남긴 점도 결과의 일부입니다
DBSCAN은 이웃 반경과 최소 점 수를 사용해 밀도가 높은 지역을 확장합니다. 군집 수를 미리 입력할 필요는 없지만 적절한 반경과 밀도 기준을 정해야 합니다. 충분한 이웃을 갖지 못하고 어느 군집에도 연결되지 않는 점은 잡음으로 남을 수 있습니다. 모든 점을 강제로 어느 군집에 넣지 않는 특징입니다.
잡음 표시가 곧 오류나 쓸모없는 자료라는 뜻은 아닙니다. 드문 이용 패턴일 수도 있고 변수 선택이나 반경이 맞지 않았을 수도 있습니다. 밀도가 크게 다른 군집이 함께 있는 자료에서는 한 가지 반경으로 모두 잘 찾기 어려울 수 있습니다. 군집 수를 정하지 않는다는 장점과 조정할 조건이 없다는 주장은 구분해야 합니다.
검토 단계에서는 각 군집의 크기와 대표적인 특성을 원래 단위로 다시 읽습니다. 작은 군집 하나가 실제 운영에서 설명 가능한지, 초기값이나 일부 표본을 바꿔도 비슷한 결과인지 확인합니다. 군집을 만든 뒤 그 특징을 설명하는 과정에서 결과를 보고 붙인 이름을 원래부터 존재한 정답처럼 다루지 않습니다. 거리에서 단위의 영향을 줄이는 방법은 표준화 계산과 적용 조건에서 이어서 확인할 수 있습니다.
핵심 정리와 실수 점검
핵심 정리
- 군집분석은 선택한 특성과 유사성 기준에 따라 자료를 묶으며 번호에 우열은 없습니다.
- K-means의 제곱합은 군집 수를 늘리면 줄 수 있어 그것만으로 군집 수를 고르지 않습니다.
- 실루엣과 안정성, 각 군집의 실제 해석을 함께 살펴 결과를 검토합니다.
놓치기 쉬운 지점
- 식별번호나 범주 코드를 실제 거리로 취급하는 실수
- 실루엣이 높으니 현실에서도 의미 있는 집단이 발견됐다고 단정하는 실수
확인할 내용
- 어떤 변수와 거리로 비슷함을 정의했는지 적는다.
- 군집 수와 초기화 또는 밀도 조건을 기록한다.
- 군집별 크기와 원래 단위의 특성을 확인한다.
이해한 내용 확인하기
직접 작성한 학습용 문항입니다. 공식 기출문제가 아닙니다.
Q1. 자료 2, 4를 한 군집으로 묶으면 중심과 군집 내 제곱합은 얼마인가요?
생각한 뒤 해설 보기
중심은 3이고 제곱합은 (2−3)²+(4−3)²=2입니다.
Q2. 어떤 점의 a=2, b=5이면 실루엣은 얼마인가요?
생각한 뒤 해설 보기
(5−2)/max(2,5)=3/5=0.6입니다.
Q3. DBSCAN에서 군집 수를 미리 정하지 않으므로 조정할 설정도 없다는 설명은 맞나요?
생각한 뒤 해설 보기
아닙니다. 이웃 반경과 최소 점 수 등 밀도를 판단하는 설정이 결과에 영향을 줍니다.
Q4. 한 점의 같은 군집 안 평균 거리가 6이고 가장 가까운 다른 군집까지 평균 거리가 3입니다. 실루엣과 그 부호의 뜻은 무엇인가요?
생각한 뒤 해설 보기
a=6, b=3이므로 (3−6)/max(6,3)=−0.5입니다. 선택한 거리 기준에서 자기 군집보다 다른 군집 쪽이 평균적으로 더 가깝습니다. 이 값만 보고 어느 점을 반드시 옮겨야 하는지까지 결정하지는 않습니다.
Q5. 정답표 없이 방문 패턴으로 군집을 만든 뒤 운영자가 각 군집에 입문자와 숙련자라는 이름을 붙였습니다. 기존 숙련도 정답을 학습한 분류 모델인가요?
생각한 뒤 해설 보기
아닙니다. 학습 과정에서 그 정답을 사용하지 않고 묶음을 만든 군집분석입니다. 사후에 붙인 이름의 타당성은 별도로 검토해야 하며, 이름만으로 숙련도 예측의 정답률을 주장할 수 없습니다.
관련 객관식 연습
더 궁금한 점
군집이 하나인데 실루엣 점수를 계산할 수 있나요?
일반적인 실루엣 평가에는 비교할 다른 군집이 필요합니다. scikit-learn은 군집 레이블 수가 2 이상이며 전체 표본 수보다 작을 때 계산하도록 안내합니다.
군집 번호가 실행할 때마다 바뀌면 실패인가요?
번호 자체는 의미 없는 식별자이므로 같은 구성원끼리 묶였는데 번호만 바뀐 경우는 동일한 분할입니다. 번호의 일치보다 구성원 묶음이 달라졌는지 비교합니다.
참고 자료와 확인 범위
- scikit-learn 군집분석 안내 ↗
군집 방법의 차이와 평가 지표의 한계를 확인했습니다.
- scikit-learn KMeans 문서 ↗
군집 내 제곱합과 초기화의 역할을 확인했습니다.
- scikit-learn 실루엣 점수 문서 ↗
a와 b의 정의, 점수 범위, 계산 가능한 레이블 수를 확인했습니다.
- scikit-learn DBSCAN 문서 ↗
이웃 반경과 밀도 기준과 잡음 처리의 의미를 확인했습니다.