Programming

비지도학습(군집화) 마무리 정리: “정답이 없을 때, 무엇을 기준으로 묶을 것인가”

Lucas.Kim 2026. 1. 12. 15:23
반응형

실무에서 군집화가 필요한 이유

비지도학습은 “정답(label)”이 없어서 성능을 바로 채점하기 어렵습니다. 그럼에도 군집화를 쓰는 이유는 명확합니다.

  • 고객 세그먼트 찾기: VIP/이탈 위험/신규 유입/가격 민감군 등
  • 이상 탐지: 결제 사기, 센서 고장, 비정상 트래픽
  • 데이터 압축/요약: 수십만 포인트를 몇 개의 군집으로 요약해 보고서/의사결정에 활용
  • 후속 모델의 전처리: 군집 결과를 “파생 피처”로 만들어 지도학습 성능을 끌어올리기도 합니다.

핵심은 한 문장으로 정리됩니다.

군집화는 데이터를 비슷한 특성끼리 묶어 숨은 구조를 드러내는 것입니다.


1) “유사성”은 누가 정의하는가? → 하이퍼파라미터가 정의합니다

비지도학습에서 가장 중요한 포인트는, 유사성의 기준을 사람이 정해줘야 한다는 점입니다.
그 기준이 바로 하이퍼파라미터입니다.

하이퍼파라미터가 하는 일(쉽게 말해)

  • “어느 정도 가까우면 같은 그룹인가?”
  • “군집 중심은 몇 개로 할까?”
  • “밀집이라고 부를 최소 기준은 무엇인가?”
  • “확률 분포를 몇 개 섞여 있다고 볼까?”
  • “밀도 계산 범위를 얼마나 넓게 볼까?”

즉 하이퍼파라미터는 모델의 ‘해석 렌즈’ 역할을 합니다.
정답이 없기 때문에 이 렌즈가 바뀌면 결과 자체가 바뀌는 것이 정상입니다.


2) 알고리즘별 “언제 쓰고/언제 망하는지” 사례로 이해하기


(A) K-Means: “가장 가까운 중심점에 배정”

개념 핵심

K-Means는 데이터를 K개의 중심점(centroid)으로 대표하게 만들고,
각 점을 가장 가까운 중심점에 반복적으로 배정하면서 수렴합니다.

실무에서 잘 먹히는 상황

  • **군집 모양이 원형(동그랗게 뭉침)**에 가깝다
  • 군집 간 거리 차이가 어느 정도 존재한다
  • 데이터가 크고 빠르게 군집화가 필요하다

잘 망하는 대표 상황(중요)

  • 타원형/길쭉한 군집
  • 예: 길게 늘어난 고객 행동 패턴(“조용히 늘어난 구매액” 같은 흐름)
  • K-Means는 “원형 거리”로 나누기 때문에 긴 타원을 잘못 자릅니다.
  • 스케일이 다른 피처
  • 예: 구매금액(0~수천)과 방문횟수(0~50)를 그대로 넣으면
    구매금액이 거리 계산을 압도합니다.
  • 그래서 StandardScaler가 사실상 필수입니다.
  • 이상치(outlier)
  • 중심점은 평균 기반이라 이상치가 있으면 중심이 끌려갑니다.

실무 팁

  • KMeans는 “대충 빠르게 나누고 싶을 때” 좋은 1차 선택입니다.
  • 하지만 비원형, 밀도 불균형, 이상치 많음이면 다른 알고리즘을 고려합니다.

(B) GMM: “여러 개의 정규분포가 섞여 있다”

개념 핵심

GMM은 데이터를 “원형 군집”으로 보지 않고
여러 개의 정규분포(가우시안)가 섞여 있다고 가정합니다.

  • K-Means가 “거리로 가장 가까운 중심”이면
  • GMM은 “확률적으로 이 분포에 속할 가능성”으로 할당합니다.

실무에서 강한 상황

  • 군집이 타원형으로 늘어져 있을 때
  • 같은 군집이라도 “조금 겹치는 영역”이 존재할 때
    (GMM은 “소속 확률”을 가질 수 있어 더 자연스럽습니다)

한계(주의)

  • 군집 개수(n_components) 를 지정해야 합니다.
  • 이상치에 아주 강한 편은 아닙니다(완전 강력하진 않음).
  • “정규분포 혼합” 가정이 데이터와 너무 다르면 결과가 흔들릴 수 있습니다.

(C) DBSCAN: “밀집된 곳은 군집, 듬성듬성은 노이즈”

개념 핵심

DBSCAN은 거리보다 밀도를 봅니다.

  • eps(입실론): “주변으로 몇 만큼을 이웃으로 볼 것인가”
  • min_samples: “이웃이 몇 개 이상이면 핵심(Core)인가”

핵심 포인트 개념이 정말 중요합니다.

  • Core point(핵심): eps 안에 min_samples 이상 이웃이 있는 점
  • Border point(경계): 스스로는 핵심이 아니지만 핵심에 붙어 있는 점
  • Noise(노이즈): 핵심과도 연결되지 않는 점

DBSCAN이 압도적으로 좋은 상황(대표 사례)

  • 도넛 모양/꼬리 모양(make_circles 같은 데이터)
  • 클러스터가 원형이 아닌 “자유형”일 때
  • 이상치가 섞여 있어 “노이즈로 분리”하고 싶을 때

DBSCAN이 힘든 상황

  • 밀도가 군집마다 크게 다른 경우
    • 어떤 군집은 빽빽하고 어떤 군집은 듬성하면
      eps를 하나로 통일하기 어렵습니다.
  • 고차원에서 거리 기반 이웃 계산이 불안정해져 성능이 흔들릴 수 있습니다.

(D) Mean Shift: “밀도가 높은 봉우리로 올라가 군집 중심을 찾는다”

개념 핵심

Mean Shift는 “산을 오르는 방식”으로 이해하면 쉽습니다.

  • 각 데이터 포인트가 주변(반경) 내 데이터들을 보고
  • 가장 밀도가 높은 방향으로 조금씩 이동
  • 결국 밀도의 봉우리(peak)에 모이고
  • 같은 봉우리에 모인 것끼리 같은 군집이 됩니다.

여기서 Bandwidth(대역폭) 가 “주변을 얼마나 넓게 볼지”를 결정합니다.


3) 추가 문제(Mean Shift Bandwidth) — 왜 군집 수가 줄어드는가?

문제

Mean Shift에서 Bandwidth가 커지면 어떻게 될까요?
정답: 더 적은 수의 큰 군집이 생성될 가능성이 높습니다.

직관적 해설(입문자 버전)

Bandwidth는 “현미경 배율”입니다.

  • Bandwidth가 작으면
    아주 좁은 범위만 봅니다 → 작은 봉우리도 각각 따로 보입니다
    → 군집이 쪼개져 많아집니다
  • Bandwidth가 크면
    넓은 범위를 한 번에 봅니다 → 주변 봉우리들이 하나로 뭉개져 보입니다
    → 군집이 합쳐져 적어집니다

Bandwidth ↑ → 더 넓게 본다 → 봉우리들이 합쳐진다 → 군집 수 ↓


4) 실루엣 계수: “군집이 얼마나 깔끔하게 분리됐는가”

실루엣 계수는 다음 질문을 수치로 답합니다.

  • 같은 군집 안에서는 얼마나 가깝나? (a(i))
  • 다른 군집과는 얼마나 멀리 떨어져 있나? (b(i))

값은 -1 ~ 1이고,

  • 1에 가까울수록: “내 군집 안은 촘촘, 다른 군집은 멀다”
  • 0에 가까울수록: “경계에 걸쳐 있다”
  • 음수면: “다른 군집이 더 가까울 수도 있다(잘못 배정 가능성)”

K를 고를 때 평균만 보면 안 되는 이유

전체 평균이 높아도,

  • 어떤 군집은 실루엣이 낮고
  • 한 군집이 거의 붕괴(겹침) 상태일 수 있습니다.

그래서 좋은 기준은 다음입니다.

전체 평균이 높고, 군집별 평균 실루엣 편차가 크지 않은 K가 안정적입니다.


5) “어떤 알고리즘을 선택할까?” 실무용 체크리스트

아래 질문에 답하면 빠르게 감이 잡힙니다.

  1. 군집 형태가 대체로 원형인가?
    K-Means
  2. 군집이 타원형이거나 겹칠 수 있나?
    GMM
  3. 복잡한 모양(도넛/꼬리) + 이상치 분리가 중요하나?
    DBSCAN
  4. 군집 개수를 모르고, 밀도 봉우리를 따라 자동으로 찾고 싶나?
    Mean Shift
    (단, 데이터 크기가 크면 속도가 부담될 수 있습니다)

6) 마무리 결론: 비지도학습은 “정답 찾기”가 아니라 “기준 세우기”입니다

군집화에서 가장 중요한 것은 알고리즘 이름이 아니라, 아래 3가지입니다.

  1. 유사성 정의(거리? 확률? 밀도?)
  2. 하이퍼파라미터 튜닝(K, eps/min_samples, bandwidth)
  3. 평가(실루엣) + 시각화 + 도메인 해석

군집화는 “자동 정답기”가 아니라,
데이터를 이해하기 위한 구조화 도구입니다.

알고리즘 군집 개수 데이터 형태 이상치
K-Means 지정 필요 원형 취약
GMM 지정 필요 타원형 제한적
DBSCAN 자동 자유형 매우 강함
Mean Shift 자동 자유형 보통

 

반응형