top of page

4.4 군집분석

키워드 : 머신러닝, 로지스틱 회귀, 의사결정나무, 나이브 베이즈, 서포트 벡터 머신, 기계학습, 군집분석, 회귀분석, 분류 분석, NLP, 자연어, 지리적 분석, 지도학습, 비지도학습, 클러스터링, 딥러닝, AI, 파이썬, 데이터 분석, 데이터 시각화, EDA, 데이터 수집, 데이터 모델링

01. 군집분석(Clsutering)이란

군집분석(clstering) 이란 데이터를 동일한 성격을 가진 여러 개의 그룹으로 분류하는 것을 말합니다. 비슷한 샘플을 구별해 하나의 클러스터 또는 비슷한 샘플의 그룹으로 할당하는 작업으로 앞서 배운 분류와 마찬가지로 각 샘플은 하나의 그룹에 할당됩니다. 하지만 분류와 달리 군집은 비지도 학습입니다. 이러한 군집분석을 통해 나뉘어 진 부분 집단을 일반적으로 군집(cluster)이라고 말합니다.

Untitled.png

💡 군집분석에서 비지도 학습이란?

군집분석의 경우 클러스터에 ‘정답’의 개념이 없습니다. 목표로 하는(정답인) 클러스터 없이, 오로지 데이터의 특성 만으로 클러스터가 결정됩니다.

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

💬 분류분석 : 클래스 혹은 레이블의 분류에 ‘정답’이 있는 지도 학습 데이터가 주어졌을 때 학습된 모델을 통해 어느 범주에 속한 데이터인지 판단하고 예측

💬 군집분석 : 클러스터에 ‘정답’의 개념이 없는 비지도 학습 데이터를 동일한 성격끼리 같은 그룹으로 그룹핑

즉, 분류분석은 어느 그룹으로 분류 할 것인지의 ‘예측’에 집중한다면 군집분석은 유사도에 따른 ‘그룹핑’에 집중하는 분석입니다.

02. 군집분석의 목적 및 활용

군집분석은 데이터를 유사한 성격을 가지는 몇 개의 군집으로 집단화하고 형성된 군집들의 특성을 파악하는 과정입니다. 이러한 군집분석은 다음과 같은 목적에서 이루어집니다.

  • 데이터셋을 요약하고 정리

  • 데이터 전체의 구조에 대한 이해

  • 군집들 사이의 관계 분석

Untitled (9).png

군집분석은 고객 분류, 데이터 분석, 이상치 탐지, 이미지 분할과 같은 다양한 분야에서 사용됩니다. 군집분석의 경우 시각화를 통한 탐색적 분석에도 활용되는 기법입니다. 이러한 측면에서 군집화는 탐색과 분석 두 측면에서 유용하게 활용될 수 있는 분석 기법입니다.

03. 군집분석 기법 종류

군집분석은 크게 두 종류로 구분됩니다. 두 군집분석을 이미지로 나타내면 다음과 같습니다. 분할적군집화는 분석에, 계층적군집화는 주로 시각화를 통한 데이터 탐색에 활용됩니다.

  • 분할적군집화(partitioning clustering)

  • 계층적군집화(hierarchical clustering)

Untitled (2).png

3.1 분할적군집화(partitioning clustering)

먼저 분할적군집화(paritioning clustering)에 대해 알아보겠습니다. 분할적군집화란 데이터끼리 겹치지 않게 군집을 나누는 것이다. 과정은 다음과 같습니다.

  • 관측치(데이터)들을 무작위로 k개의 집단으로 분할하고

  • 평균, 최빈값 등의 기준을 바탕으로 집단을 재분류 해 나갑니다.

각 개체가 하나의 군집에만 속하도록 구분하는 방법으로, 각 특성별 다수의 군집을 생성합니다.

분할적군집화의 대표적인 방법으로는 평균을 기준으로 군집화하는 K-MEANS, 최빈값을 기준으로 군집화하는 K-MODES, DBSCAN 등이 있습니다.

(1) K-MEANS clustering (K-평균)

K-means 클러스터링은 K개의 군집을 형성하는 군집화 방법입니다. K개의 중심을 정하고, 그 중심에 가까운 관찰값들을 군집으로 형성합니다. 이때 중심의 개수인 K는 연구자가 지정해야 하며 좌표 기반의 군집 분석 방법입니다.

Untitled (5).png

K-means는 다음과 같은 과정을 거칩니다.

(a) K개의 중심을 무작위로 선택하고 각 개체는 가장 가까운 중심에 할당됩니다.

(b) 각 군집에 속한 모든 개체들의 평균으로 중심을 다시 계산합니다. 이후 다시 각 개체의 가장 가까운 중심점으로 개체가 재할당됩니다.

(c) 오차가 최소화되어 중심이 더 이상 변하지 않을 때까지, 즉, 재할당이 이루어지지 않을 때까지 군집화를 반복합니다.

 

이 과정을 코드와 그래프로 나타내면 다음과 같습니다.
아래 코드는 cluster 개수를 3개로 설정하고 군집화를 진행하는 과정을 나타냅니다.

from sklearn.cluster import KMeans

model = KMeans(n_cluster=3,random_state=42)

model.fit(df)

pred_label=model.predict(df)

print(pred_label[:5])

 

df['label']=pred_label.reshape(-1,1)

pd.crosstab(df['target'],df['label']) #군집화가 효과적으로 됐는지 확인

 

#시각화

x,axes=plt.subplots(1,2,figsize=(10,3))

sns.scatterplot(df['sl'],df['sw'],hue=df['target'],ax=axes[0])

sns.scatterplot(df['sl'],df['sw'],hue=df['label'],ax=axes[1])

 

plt.show()

Untitled (3).png

이어서 K-means 기법의 장점과 단점을 살펴보겠습니다.

    장점

  • 직관적인 방법으로 이해하기 쉬우며, 비교적 정확도 높음

  • 계산량이 많지 않고 간단하여 대용량 데이터 처리에 유리

    단점

  • 중심인 K의 개수를 연구자가 직접 지정해야 함

  • 아웃라이어(이상치, 극단값)에 민감함

    : 극단값이 평균에 영향을 주어 왜곡될 가능성 있음

(2) DBSCAN

마지막으로 DBSCAN (Density-Based Spatial Clustering of Applications with Noise) 알고리즘을 알아보겠습니다. DBSCAN 클러스터링은 개체들의 밀도가 높게 분포되어 있는 개체들끼리 그룹으로 묶는 기법입니다. K-Means 처럼 군집 수 K를 설정하지 않아 정해진 군집의 개수가 없습니다.

Untitled (4).png

DBSCAN 알고리즘의 작동 방식은 다음과 같습니다.

 

(a) 각 샘플에서 아주 가까운 거리에 있는 샘플들의 개수를 확인합니다.

(b) 가까운 거리에 적어도 특정 개수(설정한 min_samples)의 샘플이 있다면 이를 핵심 샘플(core instance)이라고 설정합니다. 즉, 핵심 샘플은 밀집된 지역에 있는 샘플을 나타냅니다.

(c) 핵심 샘플과 가까이 있는 모든 샘플을 동일한 클러스터에 속하게 합니다. 이 때 해당 샘플이 다른 핵심 샘플에도 포함이 될 수 있습니다. 이 경우 이 두 샘플은 같은 클러스터로 묶습니다.

(d) 핵심 샘플도 아니고 이웃도 아닌 샘플은 이상치로 판단합니다.

💡 DBSCAN은 일반적으로 모든 클러스터가 충분히 밀집되어 있고, 밀집되지 않은 지역과의 구분이 뚜렷할 때 좋은 성능을 나타냅니다.

다음은 구체적인 코드로 DBSCAN을 구현해 보겠습니다. 사이킷런에 있는 DBSCAN 클래스를 사용하여 해당 알고리즘을 구현할 수 있습니다. (데이터는 핸즈온 머신러닝 5장에 소개되어 있는 반달 모양 데이터 셋입니다.)

from sklearn.cluster import DBSCAN

from sklearn.datasets import make_moons

X,y = make_moons(n_samples=1000, noise=0.05)

dbscan = DBSCAN(eps=0.05, min_samples=5)

dbscan.fit(X)

Untitled (6).png

DBSCAN의 장단점을 살펴보겠습니다. DBSCAN은 K-Means에서 부각된 여러 단점들을 상쇄할 수 있는 장점을 가지지만 한계 또한 존재합니다.

 

    장점

  • 밀도에 따라서 클러스터를 형성하여 기하학적인 모양을 갖는 군집도 찾아낼 수 있음

  • 아웃라이어(이상치, 극단값)들을 노이즈로 구분하여 성능 저하를 막을 수 있음

  • k-means와 다르게 군집의 수를 설정할 필요가 없음

   

    단점

  • 서로 다른 밀도 분포를 가진 데이터에서 군집분석의 수행 능력이 떨어짐

  • 밀도가 낮은 개체들의 군집화에서 이들을 모두 이상치로 구분하여 제거해버릴 가능성 존재

3.2 계층적군집화(hierarchical clustering)

다음으로 계층적군집화(hierarchical clustering)입니다. 계층적군집화는 단어 그대로 각 군집이 계층을 통해 구분되는 방법입니다. 군집의 개수를 정확하게 결정하는 목적이 아닌 데이터의 구조 및 어떤 군집이 이루어졌는지 확인하는 목적이 강합니다. 시각화를 통한 EDA 과정에서 자주 사용하는 방법이기도 합니다.

(1) 덴드로그램

계층적군집화의 결과를 한 눈에 볼 수 있는 그래프로 덴드로그램이 있습니다. 가까운 케이스끼리 묶인 데이터로 군집을 이루며 이러한 결과가 덴드로그램(dendrogram)으로 표현됩니다.

Untitled (7).png

다음은 계층적 군집화를 구현할 수 있는 덴드로그램 구현 코드입니다.

from scipy.cluster.hierarchy import dendrogram, linkage

from matplotlib import pyplot as plt

 

linked = linkage(X, 'single')

04. 군집분석의 사례

군집분석은 다양한 필드에서 데이터의 분포 혹은 특성을 확인하기 위해 자주 활용됩니다. 군집분석의 대표적인 사례인 고객군집분석에 대해 신한카드의 고객 분석 사례로 살펴보겠습니다.

4.1 신한카드 고객 군집분석 사례

Untitled (8).png

신한카드는 2014년부터 빅데이터를 활용하여 고객의 소비 특성을 파악하여 고객분류를 진행했습니다. 그리고 이러한 고객 분류를 통해 고객 그룹에 맞는 카드 혜택과 유형을 정하였습니다. 고객정보와 카드 결제 내역을 군집분석하여 남녀 고객을 총 18가지로 분류하였고 각 분류의 명칭을 설정하였습니다. 이를 바탕으로 카드 이름과 혜택을 설정하여 고객 맞춤 카드 상품을 기획하였음을 알 수 있습니다.

💡 사례에서 확인할 수 있듯이, 군집분석은 데이터 탐색과 분석 두 측면에서 인사이트를 제공할 수 있는 유용한 도구입니다. 이러한 군집분석은 시각화를 통해 정책 집행 및 마케팅 전략 수립 등 다양한 필드에서 활용되고 있습니다 !

05. 참고 자료

[Analytics Vidhya] Spectral Clustering: A Comprehensive Guide for Beginners

https://www.analyticsvidhya.com/blog/2021/05/what-why-and-how-of-spectral-clustering/

[Medium] How to find the optimal number of clusters with R?

https://medium.com/@chyun55555/how-to-find-the-optimal-number-of-clusters-with-r-dbf84988388b

[ResearchGate ] Clustering Facial Attributes: Narrowing the Path From Soft to Hard Biometrics

bottom of page