군집분석

Clustering

비즈니스 애널리틱스 · 10주차

군집분석의 활용

  • 군집분석(clustering): 정답 표시 없이 비슷한 대상끼리 묶는 분석
  • 활용 분야
    • 고객 세분화: 구매 행태가 비슷한 고객을 묶어 마케팅을 달리함
    • 사용 패턴 유형화: 전력·설비 사용 시간대가 비슷한 고객이나 설비를 묶음
    • 상품·매장 유형화: 판매 패턴이 비슷한 상품이나 매장을 묶어 운영 방식을 정함
    • 대표 표본: 군집마다 대표 대상을 골라 조사·실험 비용을 줄임
  • 회귀·분류와의 차이: 맞혀야 할 \(y\)가 없음
    • 결과의 좋고 나쁨은 해석이 되는지, 결정에 쓸 수 있는지로 판단

이번 주의 결정 문제

대상을 몇 개의 무리로 나누고, 어느 무리에 무엇을 할 것인가
  • 교재: 온라인 도매상 고객 5,852명, 재구매 쿠폰을 보낼 무리
  • 랩: 전력 고객 370곳(기록 정리 뒤 357곳), 저녁 수요반응 프로그램을 먼저 제안할 무리
  • 필요한 도구
    • 대상 사이의 거리
    • 비슷한 대상을 묶는 알고리즘: k-means, 계층 군집
    • 군집 수를 정하는 기준

강의 구성

  1. 거리와 척도
  2. k-means
  3. 계층 군집과 dendrogram
  4. 군집 수 정하기와 결과 해석
  • 모든 계산 예제: 교재와 같은 온라인 도매상 고객 자료

예제 자료: 고객별 RFM

  • 출처: UCI Online Retail II, 영국 온라인 선물 도매상의 2009-12 ~ 2011-12 실제 주문
  • 고객 5,852명마다 구매 행태를 세 숫자로 요약, 기준일 2011-12-10
지표정의고객 12346고객 12347
R (recency)마지막 구매 후 기준일까지 지난 날수3252
F (frequency)주문 수38
M (monetary)구매 금액 합계, 파운드77,3534,922
  • 고객 한 명 = 세 변수 공간의 점 하나, 군집분석은 가까운 점끼리 묶는 일

유클리드 거리의 정의

정의변수 \(p\)개로 나타낸 두 대상 \(x=(x_1,\dots,x_p)\), \(y=(y_1,\dots,y_p)\)의 유클리드 거리 \[d(x,y)=\sqrt{\sum_{j=1}^{p}(x_j-y_j)^2}\]
예고객 12346과 12347
  • 차이: R 323일, F −5회, M 72,431파운드
  • \(d=\sqrt{323^2+5^2+72{,}431^2}=72{,}432\)
  • 거리 제곱의 99.99% 이상이 M 차이에서 나옴
  • 결과: 단위가 큰 변수 하나가 거리를 지배함, R과 F의 차이는 거리에 반영되지 않음

척도 맞추기: 로그 변환과 표준화

  • 치우친 분포: M 중앙값 856파운드, 평균 2,917파운드, 최댓값 580,987파운드
로그 변환큰 값 사이의 차이를 줄임, 0에도 쓸 수 있음 \[x'=\log(1+x)\]
표준화모든 변수를 평균 0, 표준편차 1로 맞춤 \[z=\frac{x'-\bar{x}'}{s_{x'}}\]
예고객 12346 = (0.85, −0.20, 3.22), 고객 12347 = (−2.09, 0.81, 1.23)
  • 차이 R 2.94, F 1.00, M 2.00, 거리 \(d=3.69\): 세 변수의 차이가 모두 거리에 반영됨

centroid와 WSS의 정의

centroid군집 \(C_k\)에 속한 대상 \(n_k\)개의 변수별 평균, 군집의 중심점 \[\mu_k=\frac{1}{n_k}\sum_{i\in C_k}x_i\]
WSSwithin-cluster sum of squares, 각 대상과 자기 군집 centroid 사이 거리의 제곱을 모두 더한 값 \[\mathrm{WSS}=\sum_{k=1}^{K}\sum_{i\in C_k}\lVert x_i-\mu_k\rVert^2\]
  • WSS가 작을수록 군집 안의 대상끼리 가까움
  • 코드: model.cluster_centers_는 centroid, model.inertia_는 WSS

k-means의 목표

목표정해진 군집 수 \(K\)에 대해 WSS가 가장 작은 나눔 \(C_1,\dots,C_K\)를 찾음 \[\min_{C_1,\dots,C_K}\ \sum_{k=1}^{K}\sum_{i\in C_k}\lVert x_i-\mu_k\rVert^2\]
  • 가능한 나눔의 수가 매우 많음
    • 대상 20개를 군집 4개로 나누는 방법만 452억 가지
  • 모든 나눔을 비교하는 대신, WSS를 조금씩 줄이는 반복으로 좋은 나눔을 찾음
  • 군집 수 \(K\)는 분석가가 정함

k-means 알고리즘의 절차

1. 시작centroid \(K\)개를 정함
→
2. 배정각 대상을 가장 가까운 centroid의 군집에 넣음
→
3. 갱신군집마다 centroid를 소속 대상의 평균으로 다시 계산
→
4. 반복배정이 바뀌지 않을 때까지 2~3을 되풀이
  • 시작 centroid: 대상 가운데 \(K\)개를 고름, sklearn은 서로 멀리 떨어진 대상을 고르는 k-means++ 방식
  • 결과: 대상별 군집 번호 labels_, centroid, WSS
  • 군집 번호는 이름표, 번호의 크고 작음에는 뜻이 없음

k-means 진행 예: 자료와 시작

  • 고객 8명, 표준화된 R과 M 두 변수, \(K=2\)
고객R(일)M(파운드)표준화 R표준화 M
1234632577,3530.853.22
1234724,922-2.091.23
12348751,658-0.060.44
12349183,679-0.931.02
123503102940.82-0.81
123513753010.94-0.80
12352361,730-0.510.47
123532044070.56-0.58
  • 시작 centroid: A = 고객 12350 (0.82, -0.81), B = 고객 12353 (0.56, -0.58)
-2-101-10123표준화 R (클수록 오래전 구매)표준화 M (클수록 구매 금액 큼)1234612347123481234912350123511235212353

k-means 진행 예: 1회차 배정

고객centroid A까지centroid B까지배정
123464.033.81B
123473.553.21B
123481.531.19B
123492.532.19B
123500.000.35A
123510.120.44A
123521.851.50B
123530.350.00B
  • 배정: A = {12350, 12351}, B = 나머지 6명
  • WSS = 33.29
-2-101-10123표준화 R (클수록 오래전 구매)표준화 M (클수록 구매 금액 큼)1234612347123481234912350123511235212353

k-means 진행 예: 2회차 갱신과 재배정

  • 갱신: A = (0.88, -0.81), B = (-0.36, 0.97), 각 군집의 평균
고객centroid A까지centroid B까지배정
123464.032.56B
123473.601.75B
123481.560.61B
123492.570.57B
123500.062.13A
123510.062.20A
123521.890.52B
123530.391.80A ← 이동
  • 재배정: 고객 12353이 B에서 A로 이동
  • WSS: 33.29 → 10.72
-2-101-10123표준화 R (클수록 오래전 구매)표준화 M (클수록 구매 금액 큼)1234612347123481234912350123511235212353

k-means 진행 예: 3회차와 종료

  • 갱신: A = (0.77, -0.73), 고객 3명의 평균 · B = (-0.55, 1.28), 고객 5명의 평균
  • 재배정: 바뀌는 고객이 없으므로 종료
  • WSS: 33.29 → 10.72 → 10.02
  • 결과
    • A {12350, 12351, 12353}: 오래전에 적게 산 고객
    • B 나머지 5명: 최근에 샀거나 많이 산 고객
-2-101-10123표준화 R (클수록 오래전 구매)표준화 M (클수록 구매 금액 큼)1234612347123481234912350123511235212353

반복할수록 WSS가 줄어드는 이유

  • 배정 단계: 각 대상을 가장 가까운 centroid로 옮기면 그 대상의 거리 제곱은 같거나 줄어듦
  • 갱신 단계: 군집 안 거리 제곱의 합 \(\sum_{i\in C_k}\lVert x_i-c\rVert^2\)를 가장 작게 하는 점 \(c\)는 군집의 평균 \(\mu_k\)
  • 두 단계 모두 WSS를 늘리지 않음
  • 나눔의 수는 유한하므로 반복은 반드시 멈춤
예고객 8명의 WSS: 33.29 → 10.72 → 10.02에서 멈춤

시작점과 local optimum

  • 멈춘 결과가 WSS가 가장 작은 나눔이라는 보장은 없음: local optimum
  • 예: 시작 centroid를 고객 12347, 12348로 두면
    • {12347, 12349} 대 나머지 6명에서 멈춤
    • WSS 14.21 > 10.02
  • 대응: 시작점을 여러 번 바꿔 돌리고 WSS가 가장 작은 결과를 씀
    • 코드: KMeans(n_clusters=4, n_init=10, random_state=0)
-2-101-10123표준화 R (클수록 오래전 구매)표준화 M (클수록 구매 금액 큼)1234612347123481234912350123511235212353

계층 군집의 아이디어

  • 시작: 대상 하나하나를 각각 하나의 군집으로 둠
  • 반복: 가장 가까운 두 군집을 합침, 군집이 하나 남을 때까지
    • 대상 \(n\)개이면 \(n-1\)번 합침
  • 기록: 합친 순서와 그때의 거리를 dendrogram으로 남김
  • 군집 수: 미리 정하지 않음, dendrogram을 잘라 정함
  • "가장 가까운 두 군집"의 기준: 군집 사이 거리, 곧 linkage

군집 사이 거리: linkage

linkage두 군집 \(A\), \(B\) 사이의 거리특징
single가장 가까운 대상 쌍의 거리 \(\min_{i\in A,\,j\in B}d(x_i,x_j)\)길게 이어진 군집, 한 군집이 커지기 쉬움
complete가장 먼 대상 쌍의 거리 \(\max_{i\in A,\,j\in B}d(x_i,x_j)\)지름이 작은 군집
average모든 대상 쌍 거리의 평균 \(\frac{1}{n_An_B}\sum_{i\in A}\sum_{j\in B}d(x_i,x_j)\)single과 complete의 중간
Ward합쳤을 때 늘어나는 WSS크기가 비슷한 군집, k-means와 같은 WSS 기준
  • 코드: linkage(X, method="ward"), method에 single·complete·average·ward

Ward linkage의 정의

정의두 군집 \(A\), \(B\)를 합칠 때 늘어나는 WSS \[\Delta(A,B)=\mathrm{WSS}(A\cup B)-\mathrm{WSS}(A)-\mathrm{WSS}(B)=\frac{n_An_B}{n_A+n_B}\lVert\mu_A-\mu_B\rVert^2\]
  • 매 단계 \(\Delta\)가 가장 작은 두 군집을 합침
  • 대상 둘을 합칠 때: \(n_A=n_B=1\)이므로 \(\Delta=\tfrac12\,d(x_i,x_j)^2\)
예고객 12350 (0.82, −0.81)과 12351 (0.94, −0.80)
  • \(d^2=0.12^2+0.01^2=0.0145\), \(\Delta=0.0145/2=0.007\)

계층 군집 진행 예: 합치는 순서

같은 고객 8명, 표준화된 R과 M, Ward linkage

단계합친 두 군집\(\Delta\)합친 뒤 WSS군집 수
1{12350}, {12351}0.0070.0077
2{12348}, {12352}0.1020.1096
3{12353}, {12350, 12351}0.1020.2115
4{12349}, {12348, 12352}0.4900.7014
5{12347}, {12348, 12349, 12352}2.1542.8553
6{12346}, {12347, 12348, 12349, 12352}7.16710.0222
7두 군집 전체10.81920.8411
  • 합친 뒤 WSS: 그때까지의 \(\Delta\)를 모두 더한 값, 마지막 20.84는 한 군집일 때의 WSS
  • 군집 2개일 때 WSS 10.02: k-means 예제의 결과와 같은 나눔

dendrogram 읽기

  • 가로: 대상, 세로: 합칠 때 늘어난 WSS \(\Delta\)
  • 두 가지가 만나는 높이: 그 두 군집을 합친 단계의 \(\Delta\)
  • 낮은 곳에서 만난 대상끼리 비슷함
    • 12350과 12351: 0.007
  • 높은 곳에서 만난 가지끼리 서로 다름
    • 마지막 합치기: 10.82
  • 코드 dendrogram(Z)의 세로축은 \(\sqrt{2\Delta}\), 합치는 순서는 같음
0246810합칠 때 늘어난 WSS (Δ)1235312350123511234612347123491234812352

dendrogram 자르기

  • 가로선으로 자르면 선 아래 가지 수 = 군집 수
  • \(\Delta\)가 크게 뛰는 곳에서 자름: 2.15 → 7.17 → 10.82
    • 군집 2개: 7.17과 10.82 사이, {12350, 12351, 12353}과 나머지 5명
    • 군집 3개: 2.15와 7.17 사이, 고객 12346이 따로 떨어짐
  • 코드: fcluster(Z, t=4, criterion="maxclust"), 군집이 4개가 되는 높이에서 자름
0246810합칠 때 늘어난 WSS (Δ)1235312350123511234612347123491234812352군집 2개군집 3개

k-means와 계층 군집의 비교

항목k-means계층 군집 (Ward)
군집 수미리 정함dendrogram을 잘라 나중에 정함
기준전체 WSS 최소매 단계 WSS 증가 최소
결과의 재현성시작점에 따라 달라질 수 있음, n_init로 보완같은 자료면 늘 같은 결과
계산량반복마다 대상 \(n\) × 군집 \(K\)번 거리 계산대상 쌍 \(n(n-1)/2\)개의 거리, 고객 5,852명이면 약 1,712만 쌍
출력군집 번호, centroid합치는 순서, dendrogram
  • 대상이 많으면 k-means, 군집이 합쳐지는 구조를 보려면 계층 군집
  • 두 방법을 함께 돌려 결과가 비슷한지 확인

군집 수 정하기: WSS 곡선

kWSS감소율
117,553
28,571−51.2%
36,357−25.8%
44,948−22.2%
54,128−16.6%
63,577−13.3%
73,205−10.4%
82,915−9.0%
  • k를 늘리면 WSS는 항상 줄어듦
  • 기준: 감소율이 20% 이상인 마지막 k = 4
  • 결정에 쓸 군집이 나오는지 함께 확인
05,00010,00015,00012345678군집 수 kk = 4, WSS 4,948

군집 프로필 읽기

고객 5,852명, k-means \(K=4\), 군집별 중앙값

이름고객 수마지막 구매주문 수구매 금액매출 비중
우수 고객1,109명15일 전13회5,12072%
최근 소액 고객1,220명23일 전3회7086%
이탈 위험 고객1,469명157일 전5회1,58119%
이탈 고객2,054명398일 전1회2914%
  • 군집 번호 대신 특징으로 이름을 붙임
  • 치우친 분포이므로 평균보다 중앙값이 대표값으로 나음
  • 재구매 쿠폰 대상: 구매 이력은 있으나 다섯 달째 사지 않은 이탈 위험 고객 1,469명

해석 시 주의

  • 변수 선택이 군집을 정함: 넣는 변수가 달라지면 다른 군집이 나옴
  • 척도와 극단값: 로그 변환 없이 표준화만 하면 구매 금액이 아주 큰 고객 4명과 38명이 군집 하나씩을 차지함
  • 군집 번호는 이름표: 다시 돌리거나 패키지 판이 바뀌면 번호가 바뀔 수 있음
  • 방법에 따라 경계가 다름
    • k-means와 Ward가 같은 무리로 묶은 고객: 76%
    • 이탈 위험 1,469명 군집은 Ward에서 여러 군집으로 흩어짐
  • 군집은 결정의 출발점: 쿠폰의 효과는 군집 안 무작위 실험으로 확인

정리

개념정의예제의 값
유클리드 거리\(\sqrt{\sum_j(x_j-y_j)^2}\)고객 두 명: 72,432 → 척도 맞춘 뒤 3.69
척도 맞추기\(\log(1+x)\) 뒤 표준화R·F·M 모두 평균 0, 표준편차 1
WSS대상과 자기 centroid 거리 제곱의 합\(K=4\)에서 4,948
k-means배정과 centroid 갱신을 배정이 바뀌지 않을 때까지 반복고객 8명: WSS 33.29 → 10.72 → 10.02
Ward 계층 군집WSS 증가 \(\Delta\)가 가장 작은 두 군집을 합치기를 반복군집 2개에서 k-means와 같은 나눔
군집 수WSS 감소율과 결정에 쓸 수 있는지로 정함\(K=4\)