군집분석
Clustering
비즈니스 애널리틱스 · 10주차
군집분석의 활용
- 군집분석(clustering): 정답 표시 없이 비슷한 대상끼리 묶는 분석
- 활용 분야
- 고객 세분화: 구매 행태가 비슷한 고객을 묶어 마케팅을 달리함
- 사용 패턴 유형화: 전력·설비 사용 시간대가 비슷한 고객이나 설비를 묶음
- 상품·매장 유형화: 판매 패턴이 비슷한 상품이나 매장을 묶어 운영 방식을 정함
- 대표 표본: 군집마다 대표 대상을 골라 조사·실험 비용을 줄임
- 회귀·분류와의 차이: 맞혀야 할 \(y\)가 없음
- 결과의 좋고 나쁨은 해석이 되는지, 결정에 쓸 수 있는지로 판단
이번 주의 결정 문제
대상을 몇 개의 무리로 나누고, 어느 무리에 무엇을 할 것인가
- 교재: 온라인 도매상 고객 5,852명, 재구매 쿠폰을 보낼 무리
- 랩: 전력 고객 370곳(기록 정리 뒤 357곳), 저녁 수요반응 프로그램을 먼저 제안할 무리
- 필요한 도구
- 대상 사이의 거리
- 비슷한 대상을 묶는 알고리즘: k-means, 계층 군집
- 군집 수를 정하는 기준
강의 구성
- 거리와 척도
- k-means
- 계층 군집과 dendrogram
- 군집 수 정하기와 결과 해석
- 모든 계산 예제: 교재와 같은 온라인 도매상 고객 자료
예제 자료: 고객별 RFM
- 출처: UCI Online Retail II, 영국 온라인 선물 도매상의 2009-12 ~ 2011-12 실제 주문
- 고객 5,852명마다 구매 행태를 세 숫자로 요약, 기준일 2011-12-10
| 지표 | 정의 | 고객 12346 | 고객 12347 |
|---|---|---|---|
| R (recency) | 마지막 구매 후 기준일까지 지난 날수 | 325 | 2 |
| F (frequency) | 주문 수 | 3 | 8 |
| M (monetary) | 구매 금액 합계, 파운드 | 77,353 | 4,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 |
|---|---|---|---|---|
| 12346 | 325 | 77,353 | 0.85 | 3.22 |
| 12347 | 2 | 4,922 | -2.09 | 1.23 |
| 12348 | 75 | 1,658 | -0.06 | 0.44 |
| 12349 | 18 | 3,679 | -0.93 | 1.02 |
| 12350 | 310 | 294 | 0.82 | -0.81 |
| 12351 | 375 | 301 | 0.94 | -0.80 |
| 12352 | 36 | 1,730 | -0.51 | 0.47 |
| 12353 | 204 | 407 | 0.56 | -0.58 |
- 시작 centroid: A = 고객 12350 (0.82, -0.81), B = 고객 12353 (0.56, -0.58)
k-means 진행 예: 1회차 배정
| 고객 | centroid A까지 | centroid B까지 | 배정 |
|---|---|---|---|
| 12346 | 4.03 | 3.81 | B |
| 12347 | 3.55 | 3.21 | B |
| 12348 | 1.53 | 1.19 | B |
| 12349 | 2.53 | 2.19 | B |
| 12350 | 0.00 | 0.35 | A |
| 12351 | 0.12 | 0.44 | A |
| 12352 | 1.85 | 1.50 | B |
| 12353 | 0.35 | 0.00 | B |
- 배정: A = {12350, 12351}, B = 나머지 6명
- WSS = 33.29
k-means 진행 예: 2회차 갱신과 재배정
- 갱신: A = (0.88, -0.81), B = (-0.36, 0.97), 각 군집의 평균
| 고객 | centroid A까지 | centroid B까지 | 배정 |
|---|---|---|---|
| 12346 | 4.03 | 2.56 | B |
| 12347 | 3.60 | 1.75 | B |
| 12348 | 1.56 | 0.61 | B |
| 12349 | 2.57 | 0.57 | B |
| 12350 | 0.06 | 2.13 | A |
| 12351 | 0.06 | 2.20 | A |
| 12352 | 1.89 | 0.52 | B |
| 12353 | 0.39 | 1.80 | A ← 이동 |
- 재배정: 고객 12353이 B에서 A로 이동
- WSS: 33.29 → 10.72
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명: 최근에 샀거나 많이 산 고객
반복할수록 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)
- 코드:
계층 군집의 아이디어
- 시작: 대상 하나하나를 각각 하나의 군집으로 둠
- 반복: 가장 가까운 두 군집을 합침, 군집이 하나 남을 때까지
- 대상 \(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.007 | 0.007 | 7 |
| 2 | {12348}, {12352} | 0.102 | 0.109 | 6 |
| 3 | {12353}, {12350, 12351} | 0.102 | 0.211 | 5 |
| 4 | {12349}, {12348, 12352} | 0.490 | 0.701 | 4 |
| 5 | {12347}, {12348, 12349, 12352} | 2.154 | 2.855 | 3 |
| 6 | {12346}, {12347, 12348, 12349, 12352} | 7.167 | 10.022 | 2 |
| 7 | 두 군집 전체 | 10.819 | 20.841 | 1 |
- 합친 뒤 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}\), 합치는 순서는 같음
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개가 되는 높이에서 자름
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 곡선
| k | WSS | 감소율 |
|---|---|---|
| 1 | 17,553 | |
| 2 | 8,571 | −51.2% |
| 3 | 6,357 | −25.8% |
| 4 | 4,948 | −22.2% |
| 5 | 4,128 | −16.6% |
| 6 | 3,577 | −13.3% |
| 7 | 3,205 | −10.4% |
| 8 | 2,915 | −9.0% |
- k를 늘리면 WSS는 항상 줄어듦
- 기준: 감소율이 20% 이상인 마지막 k = 4
- 결정에 쓸 군집이 나오는지 함께 확인
군집 프로필 읽기
고객 5,852명, k-means \(K=4\), 군집별 중앙값
| 이름 | 고객 수 | 마지막 구매 | 주문 수 | 구매 금액 | 매출 비중 |
|---|---|---|---|---|---|
| 우수 고객 | 1,109명 | 15일 전 | 13회 | 5,120 | 72% |
| 최근 소액 고객 | 1,220명 | 23일 전 | 3회 | 708 | 6% |
| 이탈 위험 고객 | 1,469명 | 157일 전 | 5회 | 1,581 | 19% |
| 이탈 고객 | 2,054명 | 398일 전 | 1회 | 291 | 4% |
- 군집 번호 대신 특징으로 이름을 붙임
- 치우친 분포이므로 평균보다 중앙값이 대표값으로 나음
- 재구매 쿠폰 대상: 구매 이력은 있으나 다섯 달째 사지 않은 이탈 위험 고객 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\) |