기초통계

[차원축소와 군집분석] 군집분석 : Clustering

2022. 10. 4. 20:35

군집분석


군집분석 Clustering

•  비슷한 사례들을 '군집'으로 묶음
   예: 비슷한 성향의 고객들을 묶어 군집별로 프로모션/상품 추천 등

 

•  K-means, 위계적 군집분석, 가우시안 혼합 모형 등의 방법


 

군집분석의 필요성

보통 고객을 성별, 연령 등 인구학적 변수에 따라 그룹화하는 것이 흔함.

 

그러나,  고객들은 그렇게 단순하게 나눠지지 않으며, 정확성도 떨어짐

 

  데이터에 기반해서 고객들을 그룹화할 필요가 있음 → '군집 분석' 필요

 


분류분석과 군집분석의 차이

로지스틱 회귀분석과 같은 분류분석에서는 각 사례의 범주가 관찰변수

군집분석에서는 각 사례의 범주가 직접 관찰되지 않은 잠재변수

 


K-Means

가장 널리 사용되는 클러스터링 방법

> 군집의 평균(중심점)을 구해서, 사례를 중심점이 가장 가까운 군집에 포함시킴

 

K-Means 작동방식


  Python에서의 K-Means  

>  데이터 불러오기

# iris 데이터 불러오기
import pandas as pd

iris = pd.read_excel('iris.xlsx')
x = iris.iloc[:, 0:4]
x

> 데이터 학습 & 예측하기

from sklearn.cluster import KMeans

 

# 훈련

km = KMeans(n_clusters=군집개수)

km.fit( )

 

# 예측

cluster = km.predict( )

cluster

# 학습
from sklearn.cluster import KMeans
km = KMeans(n_clusters=3)
km.fit(x)

# 예측
cluster = km.predict(x)
cluster

# Cluster 
import seaborn
seaborn.scatterplot(x=pc[:,0], y=pc[:,1], hue=cluster,
                    palette=['#ff7f0e', '#1f77b4', '#2ca02c'])

 

> Clustering이 잘 된것인지 확인해보기 위해 이전에 PCA 해본 것과 비교해보면,

# PCA분석
from sklearn.decomposition import PCA
pca = PCA(n_components=2)
pca.fit(x)
pc = pca.transform(x)

import seaborn
seaborn.scatterplot(x=pc[:,0], y=pc[:,1], hue=iris.species)
PCA scatterplot Cluster(K-Means) scatterplot

 

🛠 정답이 없는 경우에는 Clustering이 잘 된지 어떻게 알 수 있을까?

> 이럴때는 Clustering 기반으로 실행한 광고나 프로모션이 얼마나 잘 되었는지를 통해서 확인해볼 수 있음.

 


K-Means 장/단점

장 점 👍🏻 단 점 👎🏻
•  k만 정해주면 돼서 간단함.
•  거리를 정할 수 있고, 
    중심점 주변에 사례들이 몰려있는 경우에 사용
•  소수의 사례만 무작위로 뽑아 클러스터링도 가능
    (미니배치 k-Means)
•   초기값에 따라 결과가 달라질 수 있음
•   연속변수에만 적용가능
•   볼록하지 않은 모양의 군집에는 성능이 떨어짐
•   군집 수 결정이 어려움
•   이상값에 크게 영향 받음