본문 바로가기
C.W.K.
Stream
Lesson 01 of 04 · published

Clustering

~28 min · clustering, kmeans, dbscan

Level 0Scout
0 XP0/48 lessons0/11 achievements
0/120 XP to next level120 XP to go0% complete

군집은 정답 없이 비슷한 사례를 묶어

군집화는 미리 붙은 범주 없이 선택한 거리에서 서로 가까운 사례를 같은 묶음으로 찾아. 고객 행동 유형을 탐색하고, 이상 후보를 좁히거나, 후속 모델에 넣을 요약 특성을 만드는 데 쓸 수 있어. 하지만 자료 안에 본래 존재하는 절대 범주를 발견하는 장치는 아니야. 어떤 특성과 거리, 스케일을 골랐는지가 군집의 모양을 결정해.

목적이 거리 정의보다 먼저야

고객의 구매 규모를 묶고 싶은지 상품 취향을 묶고 싶은지에 따라 필요한 특성이 달라. 소득과 클릭 횟수를 그대로 넣으면 숫자 단위가 큰 열이 거리를 지배하므로 표준화나 강건한 스케일링이 필요해. 범주형과 수치형이 섞이면 단순 유클리드 거리보다 목적에 맞는 거리나 표현을 골라야 하고.

K-평균은 둥근 묶음을 찾는다

K-평균은 미리 정한 K개의 중심과 각 사례 사이 제곱거리를 줄여. 빠르고 큰 자료에도 잘 확장되지만 군집이 비슷한 크기의 볼록한 덩어리라는 가정이 숨어 있어. 극단치가 중심을 끌어당기고 초기값에 따라 결과가 달라질 수 있으므로 여러 초기화와 씨앗에서 안정성을 봐야 해.

밀도 기반 방법은 잡음을 남겨둘 수 있어

DBSCAN과 HDBSCAN은 사례가 빽빽한 영역을 이어 임의 모양의 군집을 찾고, 어느 군집에도 충분히 속하지 않는 행을 잡음으로 남겨. K를 먼저 정하지 않아도 되지만 거리 척도와 밀도 손잡이에 민감해. HDBSCAN의 min_cluster_size는 ‘업무상 의미 있는 묶음은 최소 고객 200명’처럼 현실 기준에서 출발할 수 있어.

계층 군집은 묶이는 순서를 보여줘

응집형 군집은 각 사례를 따로 시작해 가까운 묶음을 차례로 합쳐. 덴드로그램으로 어느 높이에서 군집이 합쳐지는지 볼 수 있어 작은 자료의 구조를 토론하기 좋아. 연결 방식에 따라 길쭉한 사슬이나 조밀한 덩어리를 선호하므로 여러 방식을 결과 의미와 함께 비교해야 해.

K는 곡선과 안정성으로 고르되 정답처럼 읽지 마

K-평균의 K를 늘리면 관성은 반드시 줄어. 감소 폭이 꺾이는 팔꿈치와 실루엣 점수를 참고하되 뚜렷한 굽이가 없을 수도 있어. K가 조금 달라져도 핵심 사례가 같은 묶음에 남는지, 여러 씨앗에서 군집이 안정적인지 확인해. 내부 점수가 높아도 업무에서 행동을 달리할 이유가 없다면 쓸모없는 분할이야.

이름 붙이기 전에 원본 사례를 읽어

각 군집에서 중심 사례, 경계 사례, 무작위 사례를 뽑아 실제 기록을 봐. ‘고가치 고객’ 같은 이름을 먼저 붙이면 그 이름에 맞는 특징만 보게 돼. 군집별 크기와 주요 특성 차이, 시간에 따른 이동을 기술한 뒤 관계자가 사용할 행동이 있는지 물어. 군집은 검증해야 할 가설이지 새 고객의 영구 신분이 아니야.

Code

팔꿈치와 실루엣 진단을 곁들인 K-평균·python
from sklearn.cluster import KMeans
from sklearn.metrics import silhouette_score
from sklearn.preprocessing import StandardScaler

Xs = StandardScaler().fit_transform(X)
for k in range(2, 11):
    km = KMeans(n_clusters=k, n_init="auto", random_state=7).fit(Xs)
    sil = silhouette_score(Xs, km.labels_)
    print(f"k={k}  inertia={km.inertia_:,.0f}  silhouette={sil:.3f}")
잡음을 남기는 밀도 기반 군집화 HDBSCAN·python
import hdbscan

clusterer = hdbscan.HDBSCAN(min_cluster_size=200, min_samples=5)
labels = clusterer.fit_predict(Xs)
print("clusters:", len(set(labels)) - (1 if -1 in labels else 0))
print("noise:", (labels == -1).mean())

External links

Exercise

같은 스케일 자료에 K-평균과 HDBSCAN을 적용해. 각 군집의 중심·경계·무작위 사례를 합쳐 열 개씩 읽고 관찰 문장을 적어. 군집이 실제 업무 질문에 답하는지 특성 선택의 부산물인지 판단해.

Progress

Progress is local-only — sign in to sync across devices.
이 페이지에서 버그를 발견하셨거나 피드백이 있으세요?문제 신고

댓글 0

🔔 답글 알림 (로그인 필요)
로그인댓글을 남기려면 로그인해 주세요.

아직 댓글이 없어요. 첫 댓글을 남겨보세요.