반응형
K-Means 클러스터링: 비지도 학습 기반 데이터 그룹화 기법
🔍 K-Means 클러스터링이란?
K-Means 클러스터링은 비지도 학습(Unsupervised Learning) 기법 중 하나로, 데이터를 유사한 특성을 가진 그룹(클러스터)으로 나누는 알고리즘입니다.
데이터의 중심(centroid)을 기반으로 군집을 형성하며, 군집의 개수(K)를 사전에 설정해야 합니다.
📌 K-Means의 특징
- 비지도 학습 방식: 레이블 없이 데이터를 자동으로 그룹화
- 유클리드 거리 기반: 데이터 포인트 간의 거리를 최소화하는 방식
- 빠른 연산 속도: 대규모 데이터에도 적용 가능
- K(클러스터 개수) 설정이 중요
📌 K-Means 알고리즘 동작 과정
1️⃣ 초기 중심(K 개) 설정
- 데이터에서 무작위로 K개의 중심(centroid) 선택
2️⃣ 각 데이터 포인트를 가장 가까운 중심에 할당
- 유클리드 거리(Euclidean distance)를 계산하여 가장 가까운 클러스터에 속하도록 설정
3️⃣ 클러스터 중심 업데이트
- 각 클러스터 내 데이터 포인트의 평균을 계산하여 새로운 중심을 업데이트
4️⃣ 수렴할 때까지 반복
- 데이터 포인트의 클러스터 할당이 변하지 않거나 중심이 더 이상 움직이지 않을 때 종료
🔢 K-Means 수식
K-Means는 **군집 내 오차제곱합(SSE, Sum of Squared Errors)**을 최소화하는 방식으로 클러스터를 구성합니다.
오차제곱합(SSE)은 다음과 같이 정의됩니다.
- kk : 클러스터 개수
- CiC_i : i번째 클러스터
- xjx_j : 클러스터 CiC_i에 속한 데이터 포인트
- μi\mu_i : i번째 클러스터의 중심(centroid)
K-Means의 목표는 SSE 값을 최소화하여 최적의 클러스터링을 찾는 것입니다.
🚀 K-Means의 활용 사례
🏙 1️⃣ 공간 데이터 분석 및 GIS 활용
- 상권 분석: 지역별 유사한 소비 패턴을 가진 지역 군집화
- 부동산 시장 분석: 주거 지역을 가격이나 특성에 따라 군집화
- 교통 분석: 비슷한 유동인구 패턴을 가진 지역 클러스터링
🏥 2️⃣ 의료 및 보건 데이터 분석
- 질병 유형별 환자 그룹화
- 병원 방문 패턴을 기반으로 유사한 환자 그룹 분류
📊 3️⃣ 마케팅 및 소비자 분석
- 고객 세분화: 유사한 소비 패턴을 가진 고객 군집화
- 타겟 마케팅 전략 수립: 특정 소비 유형별 맞춤 광고 제공
📊 Python을 활용한 K-Means 분석 예제
1️⃣ 기본적인 K-Means 클러스터링 적용
import numpy as np
import matplotlib.pyplot as plt
from sklearn.cluster import KMeans
# 샘플 데이터 생성
np.random.seed(42)
X = np.random.rand(300, 2) * 10 # 300개의 랜덤 좌표 (x, y)
# K-Means 적용 (K=3)
kmeans = KMeans(n_clusters=3, random_state=42)
kmeans.fit(X)
# 클러스터 결과 시각화
plt.scatter(X[:, 0], X[:, 1], c=kmeans.labels_, cmap='viridis', alpha=0.5)
plt.scatter(kmeans.cluster_centers_[:, 0], kmeans.cluster_centers_[:, 1], s=200, color='red', marker='X')
plt.title("K-Means Clustering")
plt.show()
🔹 결과 해석
- K=3으로 설정하여 데이터를 3개의 그룹으로 분류
- 클러스터 중심(centroid)은 빨간색 X 마커로 표시
2️⃣ 최적의 K 값 찾기 (엘보우 방법, Elbow Method)
K 값은 사전에 설정해야 하므로, 적절한 클러스터 개수를 찾는 방법이 중요합니다.
wcss = []
for k in range(1, 11):
kmeans = KMeans(n_clusters=k, random_state=42)
kmeans.fit(X)
wcss.append(kmeans.inertia_) # SSE 값 저장
# 엘보우 방법 그래프
plt.plot(range(1, 11), wcss, marker='o')
plt.xlabel("Number of Clusters (K)")
plt.ylabel("Within-Cluster SSE (WCSS)")
plt.title("Elbow Method for Optimal K")
plt.show()
🔹 결과 해석
- WCSS(SSE 값)를 그래프로 그려 급격한 변화가 완화되는 지점(K값)을 최적 K로 선택
- 일반적으로 '엘보우(Elbow)' 지점이 최적의 K
3️⃣ 공간 데이터에서 K-Means 활용 (GIS 분석)
import geopandas as gpd
# 공간 데이터 불러오기 (예: 상권 데이터)
gdf = gpd.read_file("seoul_business.geojson")
# K-Means 적용 (K=5)
kmeans = KMeans(n_clusters=5, random_state=42)
gdf['cluster'] = kmeans.fit_predict(gdf[['longitude', 'latitude']])
# 클러스터링 결과 시각화
fig, ax = plt.subplots(figsize=(8, 6))
gdf.plot(column='cluster', cmap='viridis', legend=True, ax=ax, alpha=0.7)
plt.title("서울시 상권 K-Means 클러스터링")
plt.show()
🔹 결과 해석
- 서울시 상권 데이터를 위도/경도 기준으로 클러스터링하여 지역별 특성 분석
- 특정 클러스터에서 소비 트렌드가 유사한 지역들을 식별 가능
🎯 K-Means 클러스터링의 장단점
장점 단점
연산 속도가 빠름 | 클러스터 개수(K)를 사전에 설정해야 함 |
대규모 데이터에도 적용 가능 | 군집이 원형(구형)으로 분포한다고 가정 |
간단한 개념, 해석이 쉬움 | 이상치(Outlier)에 민감 |
✅ K-Means가 적합한 경우
- 데이터가 비교적 균등하게 분포
- 클러스터 개수를 사전에 정의할 수 있는 경우
- 빠른 계산 속도가 필요한 대규모 데이터
✅ K-Means보다 다른 기법이 적합한 경우
- 클러스터 모양이 원형이 아닐 때 → DBSCAN, Mean-Shift 추천
- 클러스터 개수를 자동으로 정하고 싶을 때 → Gaussian Mixture Model(GMM) 추천
📌 결론
K-Means 클러스터링은 빠르고 직관적인 군집화 알고리즘으로,
공간 데이터 분석, 고객 세분화, 상권 분석, 보건 데이터 분석 등 다양한 분야에서 활용 가능합니다.
반응형
'🖥️ IT, 컴퓨터 > 📁 데이터 분석' 카테고리의 다른 글
[머신러닝] DBSCAN (Density-Based Spatial Clustering of Applications with Noise)이란? (0) | 2025.03.18 |
---|---|
[데이터분석] Spark란? (0) | 2024.12.14 |
[데이터] 데이터 거버넌스(Data Governance)란? (0) | 2024.12.13 |
[데이터 분석] ad hoc 분석이란? (0) | 2024.12.02 |
[데이터 분석] 데이터 EDA(Exploratory Data Analysis)란? 탐색적 데이터 분석 (0) | 2024.11.20 |
댓글