군집분석(Clustering Analysis)은 데이터 세트를 유사한 특성을 가진 그룹(군집)으로 나누는 기법입니다. 각 군집 내의 데이터는 서로 유사성이 높고, 다른 군집 간의 데이터는 유사성이 낮습니다. 군집분석은 비지도 학습의 한 형태로, 데이터에 대한 사전 정보가 없는 상태에서 데이터의 구조를 발견하는 데 사용됩니다.
군집분석의 주요 개념
- 군집:
- 데이터 포인트들의 그룹으로, 군집 내 데이터 포인트들은 서로 유사성이 높습니다.
- 군집 간 데이터 포인트들은 유사성이 낮습니다.
- 비지도 학습:
- 라벨링된 데이터 없이 학습하는 방법으로, 데이터 내의 숨겨진 구조나 패턴을 발견합니다.
군집분석의 종류
K-평균 군집화 (K-Means Clustering):
- 데이터를 K개의 군집으로 나눕니다.
- 각 군집은 중심점(센트로이드)을 가지며, 각 데이터 포인트는 가장 가까운 중심점에 할당됩니다.
- 알고리즘은 반복적으로 중심점을 갱신하고 데이터 포인트를 재할당하여 최적의 군집을 찾습니다.
계층적 군집화 (Hierarchical Clustering):
- 데이터를 계층적으로 분류하는 방법으로, 덴드로그램(dendrogram)을 통해 시각화할 수 있습니다.
- 병합형(agglomerative) 방법: 각 데이터 포인트를 하나의 군집으로 시작하여, 유사한 군집끼리 병합해 나갑니다.
- 분할형(divisive) 방법: 전체 데이터를 하나의 군집으로 시작하여, 반복적으로 분할해 나갑니다.
DBSCAN (Density-Based Spatial Clustering of Applications with Noise):
- 데이터 포인트의 밀도에 기반하여 군집을 형성합니다.
- 밀도가 높은 영역을 군집으로 식별하고, 밀도가 낮은 영역은 노이즈로 간주합니다.
- 군집의 개수를 사전에 지정할 필요가 없습니다.
Gaussian Mixture Models (GMM):
- 데이터가 여러 개의 가우시안 분포로 구성되어 있다고 가정하고 군집화합니다.
- 각 군집은 가우시안 분포로 모델링되며, EM(Expectation-Maximization) 알고리즘을 사용하여 최적의 파라미터를 찾습니다.
군집분석의 활용 분야
고객 세분화:
- 마케팅에서 고객을 유사한 특성을 가진 그룹으로 나누어 맞춤형 전략을 세울 수 있습니다.
이미지 분할:
- 컴퓨터 비전에서 이미지를 여러 개의 의미 있는 부분으로 나누는 데 사용됩니다.
이상 탐지:
- 금융 분야에서 이상 거래 탐지, 네트워크 보안에서 이상 행동 탐지 등에 활용됩니다.
문서 군집화:
- 텍스트 마이닝에서 유사한 주제를 가진 문서들을 그룹으로 나눕니다.
군집분석의 예시 (Python 코드)
다음은 K-평균 군집화를 Python으로 구현하는 간단한 예시입니다.
import matplotlib.pyplot as plt
from sklearn.datasets import make_blobs
from sklearn.cluster import KMeans
# 데이터 생성
X, y = make_blobs(n_samples=300, centers=4, cluster_std=0.60, random_state=0)
# K-Means 군집화
kmeans = KMeans(n_clusters=4)
kmeans.fit(X)
y_kmeans = kmeans.predict(X)
# 클러스터 중심 좌표
centers = kmeans.cluster_centers_
# 그림 생성
plt.figure(figsize=(10, 6))
plt.scatter(X[:, 0], X[:, 1], c=y_kmeans, s=50, cmap='viridis')
plt.scatter(centers[:, 0], centers[:, 1], c='red', s=200, alpha=0.75, marker='X')
plt.title('K-Means Clustering')
plt.xlabel('Feature 1')
plt.ylabel('Feature 2')
plt.grid(True)
plt.show()
코드 설명
데이터 생성:
make_blobs
함수를 사용하여 300개의 샘플과 4개의 중심을 가지는 데이터 세트를 생성합니다.
K-Means 군집화:
KMeans
클래스를 사용하여 K-평균 군집화를 수행합니다. 여기서는 4개의 군집을 찾습니다.fit
메서드를 사용하여 모델을 학습시키고,predict
메서드를 사용하여 각 데이터 포인트의 군집을 예측합니다.
시각화:
plt.scatter
함수를 사용하여 각 데이터 포인트를 시각화합니다. 색상은 각 데이터 포인트가 속한 군집을 나타냅니다.- 빨간색 ‘X’ 표시는 각 군집의 중심을 나타냅니다.
군집분석은 데이터의 숨겨진 구조를 발견하고, 데이터 포인트 간의 관계를 이해하는 데 매우 유용한 기법입니다. 이를 통해 다양한 분야에서 중요한 통찰을 얻을 수 있습니다.


위 그림은 K-평균(K-Means) 군집 분석 결과를 시각적으로 나타낸 것입니다.
구성 요소:
- 데이터 점들:
- 각 점은 데이터 샘플을 나타내며, 서로 다른 색상으로 표시되어 있습니다.
- 색상은 각 데이터 점이 속한 군집을 나타냅니다.
- 클러스터 중심:
- 빨간색 ‘X’ 표시는 각 군집의 중심을 나타냅니다.
- 군집의 중심은 해당 군집 내의 데이터 점들의 평균 위치입니다.
해석:
- 군집화: K-평균 군집화 알고리즘을 사용하여 300개의 데이터 샘플을 4개의 군집으로 나누었습니다.
- 데이터의 분포: 데이터가 네 개의 중심을 기준으로 군집화되어 있음을 알 수 있습니다.
- 클러스터 중심: 빨간색 ‘X’ 표시는 각 군집의 중심을 나타내며, 데이터가 이 중심을 기준으로 분포되어 있습니다.
이 그림을 통해 데이터가 어떻게 군집화되었는지 직관적으로 이해할 수 있으며, 각 군집의 중심 위치를 파악할 수 있습니다.

K-Modes Algorithm
K-Modes 알고리즘은 범주형 데이터를 군집화하는 데 사용되는 기법입니다. K-Means 알고리즘이 주로 수치형 데이터에 사용되는 반면, K-Modes는 범주형 데이터에 더 적합합니다. K-Modes 알고리즘은 각 군집의 모드를 기반으로 데이터 포인트를 군집화합니다.
K-Modes 알고리즘의 주요 개념
모드(Mode):
- 모드는 주어진 데이터에서 가장 자주 나타나는 값을 의미합니다. K-Modes 알고리즘에서는 각 군집의 중심(centroid)을 모드로 정의합니다.
범주형 데이터:
- 범주형 데이터는 순서나 수치적인 의미가 없는 데이터입니다. 예를 들어, 색상(빨강, 파랑, 녹색), 성별(남성, 여성) 등이 범주형 데이터에 해당합니다.
거리 측정:
- K-Modes 알고리즘에서는 두 데이터 포인트 간의 유사성을 측정하기 위해 해밍 거리(Hamming distance)를 사용합니다. 해밍 거리는 두 벡터 간의 차이점을 측정하는 방법으로, 서로 다른 항목의 개수를 계산합니다.
K-Modes 알고리즘의 동작 과정
초기 모드 선택:
- 처음에 K개의 모드를 무작위로 선택합니다.
데이터 포인트 할당:
- 각 데이터 포인트를 가장 가까운 모드에 할당합니다. 이 과정에서 해밍 거리를 사용하여 가장 가까운 모드를 찾습니다.
모드 업데이트:
- 각 군집의 모드를 갱신합니다. 각 군집에서 가장 자주 나타나는 값으로 모드를 업데이트합니다.
수렴 확인:
- 데이터 포인트의 할당이 더 이상 변경되지 않을 때까지 2단계와 3단계를 반복합니다.
K-Modes 알고리즘의 예시 (Python 코드)
다음은 K-Modes 알고리즘을 Python으로 구현하는 간단한 예시입니다. 이를 위해 kmodes
라이브러리를 사용합니다.
from kmodes.kmodes import KModes
import numpy as np
# 예시 데이터 생성
data = np.array([
['green', 'M', 10],
['blue', 'L', 20],
['blue', 'L', 30],
['green', 'M', 10],
['green', 'L', 40],
['yellow', 'M', 20]
])
# K-Modes 모델 생성 및 학습
km = KModes(n_clusters=2, init='Huang', n_init=5, verbose=1)
clusters = km.fit_predict(data)
# 결과 출력
print(f'Clusters: {clusters}')
print(f'Centroids: {km.cluster_centroids_}')
코드 설명
데이터 생성:
- 범주형 데이터를 포함하는 예시 데이터를 생성합니다.
K-Modes 모델 생성 및 학습:
KModes
클래스를 사용하여 K-Modes 모델을 생성하고 학습시킵니다. 여기서n_clusters
는 군집의 수를 의미하며,init
는 초기 모드 선택 방법을 지정합니다.
결과 출력:
- 각 데이터 포인트가 속한 군집과 각 군집의 중심(모드)을 출력합니다.
K-Modes 알고리즘의 장점
범주형 데이터 처리:
- K-Modes 알고리즘은 범주형 데이터를 직접 처리할 수 있어, 수치형 데이터로 변환할 필요가 없습니다.
단순하고 이해하기 쉬움:
- 알고리즘이 비교적 단순하고 직관적이므로, 이해하고 구현하기 쉽습니다.
효율성:
- K-Means 알고리즘과 유사한 방식으로 동작하므로, 큰 데이터셋에서도 비교적 효율적으로 작동합니다.
K-Modes 알고리즘의 한계
초기 모드 선택:
- 초기 모드 선택에 따라 결과가 달라질 수 있습니다. 따라서 여러 번 실행하여 최적의 결과를 선택하는 것이 필요합니다.
고차원 데이터:
- 매우 높은 차원을 가진 데이터에서는 효율성이 떨어질 수 있습니다.
K-Modes 알고리즘은 범주형 데이터를 군집화하는 데 매우 유용한 도구로, 다양한 실세계 응용 분야에서 사용할 수 있습니다. 이를 통해 데이터 내의 숨겨진 구조를 발견하고, 의미 있는 군집을 형성할 수 있습니다.