🖇 K-Means 클러스터링이란?
🖇 K-Means 클러스터링 적용하기
지금까지 고객 거래 데이터를 보다 정확하게 분석하기 위해 이상치 제거 → 상관관계 분석 → 피처 스케일링 → 차원 축소(PCA)의 과정을 거쳐왔다.
이제 본격적으로 K-Means 클러스터링을 적용해 고객을 그룹으로 나누어 보자.
K-Means는 데이터를 K개의 그룹(cluster) 으로 나누는 비지도 학습(unsupervised learning) 알고리즘이다.
‘K’는 사용자가 미리 설정하며, K-Means는 각 클러스터의 중심(centroid)을 기준으로 데이터를 반복적으로 그룹화한다.
💡 핵심 개념은 "가장 가까운 중심에 데이터를 배치한 후 중심을 갱신하는 것"이다.
K-Means는 클러스터 레이블(0, 1, 2...)을 임의로 지정한다.
즉, 가장 큰 클러스터가 0번이 될 수도, 2번이 될 수도 있는 것처럼 레이블은 일관되지 않을 수 있는 점에 유의해야 한다.
처음에 어떤 데이터 포인트를 선택했느냐에 따라서 각 데이터 포인트에 가장 가까운 중심이 다르게 할당되고, 업데이트도 다른 방식으로 진행될 수 있기 때문이다.
이를 해결하기 위해 샘플 빈도에 기반한 레이블 재정렬이 가능하다.
0, 그다음 1, 마지막 2로 재정렬이를 통해 재현성 있는 레이블을 부여하고 해석을 쉽게 한다.
from sklearn.cluster import KMeans
from collections import Counter
# K=3으로 K-Means 클러스터링 적용
kmeans = KMeans(n_clusters=3, init='k-means++', n_init=10, max_iter=100, random_state=0)
kmeans.fit(data_pca)
# 각 클러스터의 빈도수 구하기
cluster_frequencies = Counter(kmeans.labels_)
# 빈도수에 기반하여 이전 레이블에서 새 레이블로의 매핑 생성
label_mapping = {label: new_label for new_label, (label, _) in
enumerate(cluster_frequencies.most_common())}
# 매핑을 적용하여 새 레이블 얻기
new_labels = np.array([label_mapping[label] for label in kmeans.labels_])
아래는 주요 파라미터의 동작이다.
| 파라미터 | 설명 |
|---|---|
n_clusters=3 | 클러스터 수 설정 |
init='k-means++' | 초기 중심값을 최적화된 방식으로 설정 |
n_init=10 | 서로 다른 초기값으로 10번 실행하여 최적 결과 선택 |
max_iter=100 | 최대 반복 횟수 |
random_state=0 | 결과 재현을 위한 시드값 고정 |
클러스터링된 결과를 user_data에 병합하고 각 클러스터에 몇 명의 고객이 할당되었는지 확인해 보자.
# 원래 데이터셋에 새 클러스터 레이블 추가
user_data['cluster'] = new_labels
# PCA 버전의 데이터셋에 새 클러스터 레이블 추가
data_pca['cluster'] = new_labels
# 결과 확인
user_data.head()

클러스터링 결과를 확인할 때 중요한 점은 클러스터링의 정확성과 그룹 분포를 확인하는 것이다.
# 각 클러스터별 고객 수 확인
user_data.value_counts('cluster')
이 결과는 각 클러스터에 얼마나 많은 고객이 속했는지를 보여준다. 이 군집들을 분석하여 각각의 고객 특성을 파악할 수 있게 된다.
지금까지 고객을 3개의 클러스터로 분류하는 과정을 수행했다.
| 단계 | 설명 |
|---|---|
| 적용 알고리즘 | K-Means 클러스터링 |
| 클러스터 수 | 3개 (임의 설정) |
| 사전 처리 | PCA로 차원 축소 (6개 주성분 사용) |
| 추가 조치 | 클러스터 빈도 기반 레이블 정리 |
| 결과 | 각 클러스터별 고객 수 확인 완료 |
이제 중요한 것은 각 클러스터가 어떤 특성을 가진 고객 그룹인지 해석하는 일이 될 것이다.
[해당 컨텐츠는 아이펠 캠퍼스 LMS에서 학습한 내용을 재해석한 것으로 무단 복제 및 사용을 금지합니다.]