Ming's Life

머신러닝(클러스터링) 본문

머신러닝

머신러닝(클러스터링)

chamiii 2025. 7. 8. 19:29

1. 오늘 학습 키워드

  • 머신러닝 기초

 


 

2. 오늘 학습 한 내용을 나만의 언어로 정리하기

 

1. 비지도 학습 개요

☑️ 비지도 학습이란?

  • 비지도 학습(Unsupervised Learning)은 정답(레이블) 없이 데이터에서 패턴이나 구조를 찾는 머신 러닝 기법을 의미
  • 활용 영역
    • 데이터의 군집화(Clustering)
    • 차원 축소(Dimensionality Reduction)
    • 이상치 탐지(Anomaly Detection) 등

 

☑️ 지도 학습과의 비교

  • 지도 학습(Supervised Learning)
    • 입력 데이터에 대한 정답(레이블)을 알고 있는 상태에서 모델을 학습하여, 새로운 데이터가 들어왔을 때 레이블을 예측.
    • ex) 이미지 분류, 스팸 메일 분류
  • 비지도 학습(Unsupervised Learning)
    • 별도의 레이블이 없고, 오직 입력 데이터만으로부터 구조를 파악.
    • ex) 고객 그룹화(세분화), 문서 토픽 분류

핵심 포인트! 비지도 학습에서는 ‘라벨’ 대신 ‘데이터 자체의 유사성과 패턴’에 집중

 

 

 


2. 군집 분석(Clustering)의 개념

☑️ 군집 분석이란 ?

  • 비슷한 특성을 가진 데이터들을 묶어서(Cluster) 각 그룹 내 데이터들끼리의 유사도를 최대화하고, 다른 그룹과의 차이는 최대화하는 기법.

목적 

1️⃣ 데이터의 구조 파악 : 정답 없이 데이터의 자연스러운 분포를 확인

2️⃣ 세분화(Segmentation) : 마케팅에서는 고객 세분화를, 제조업에서는 센서 데이터로 기계 작동 패턴 분류 등을 수행

 

 

☑️ 군집 분석의 절차

1. 데이터 수집 및 전처리

: 이상치 제거, 결측치 처리, 스케일링/정규화

 

2. 군집 수 또는 파라미터 설정

: K-Means의 경우 k 설정, DBSCAN은 거리(ε), 최소 데이터 수(minPts) 등

 

3. 군집화 알고리즘 적용

: 설정에 따라 알고리즘 수행

 

4. 결과 해석 및 평가

: 실루엣 계수 등 군집 평가 지표 활용

 

5. 사후 활용

: 마케팅 전략, 제품 개선, 이상치 탐지 등

 

 


3. 주요 군집 분석 알고리즘 소개

 

 

☑️ K-Means

1. 알고리즘 개요

: 미리 군집 수 k를 지정해야 함

: 무작위로 k개의 중심(centroid)을 선택 후, 각 데이터 포인트를 가장 가까운 중심에 할당

: 각 군집의 중심을 다시 계산하고 재할당하는 과정을 반복

: 군집 내 데이터와 중심 간 거리의 제곱합을 최소화

 

2. 장점

: 계산 속도가 빠르고 구현이 간단

: 대용량 데이터에도 비교적 잘 작동

 

3. 단점

: 군집 수 k를 미리 알아야 함

: 이상치에 취약(중심값에 영향을 미침)

: 구형(球形) 구조가 아닌 복잡한 형태의 분포를 파악하기 어려움

 

4. 예시

: 고객 데이터를 나이, 월평균 지출액, 자주 구매하는 카테고리(One-hot 인코딩 후 스케일링 적용) 등을 가지고 분석

: k=3으로 설정한다면 “저가 위주의 고객”, “중간 가격대 선호 고객”, “고가 제품 위주 고객” 등으로 군집이 나뉠 수 있음

 

 

☑️ DBSCAN(Density-Based Spatial Clustering of Applications with Noise)

 

 

1. 알고리즘 개요

: 밀도 기반 군집화 기법. 일정 거리(ε) 내 데이터가 많으면(최소 포인트 수 minPts 이상) 그 영역을 ‘밀도가 높다’고 판단해 하나의 군집으로 결정

: k를 미리 설정하지 않아도 되며, 노이즈 포인트(어느 군집에도 속하지 않는 점)을 구분할 수 있음

 

2. 장점

: 군집 수를 사전에 알 필요가 없음

: 노이즈와 이상치를 자연스럽게 처리

: 구형이 아닌 복잡한 형태의 군집도 잘 찾아냄

 

3. 단점

: 파라미터 ε와 minPts에 민감

: 데이터 밀도가 균일하지 않으면 성능이 떨어질 수 있음

 

4. 예시

: 지리정보(GIS) 분석에서 지역별로 가게가 얼마나 밀집되어 있는지 분석할 때 사용

: 특정 지점에 가게가 몰려 있으면 하나의 군집, 중간에 뜨문뜨문 있는 가게는 노이즈(Cluster에 속하지 않는 포인트)로 분류

 

 

 

☑️ 계층적 클러스터링(Hierarchical Clustering)

 

 

1. 알고리즘 개요

: 데이터 포인트 각각이 하나의 군집으로 시작 → 유사도가 가장 높은 군집들끼리 병합 → 최종적으로 하나의 군집(트리) 형성

: 또는 하나의 군집에서 시작해 분할해 나가는 방법도 있음(분할적 접근)

: 덴드로그램(Dendrogram)으로 시각화가 가능

 

2. 장점

: 군집의 계층적 구조 파악이 쉬움(덴드로그램)

: 군집 수를 명확히 결정하지 않아도, 덴드로그램의 특정 높이(cut)에 따라 유연하게 군집 개수 결정 가능

 

3. 단점

: 계산 복잡도가 높아서 대규모 데이터에 적용하기 어려움

 

4. 예시

: 유전자 데이터 분석: 유전자 발현 패턴이 유사한 것끼리 계층적으로 묶어, 생물학적 특성을 추론

: 다양한 문서(텍스트) 클러스터링에서 단어의 사용 빈도 등을 기반으로 문서 구조를 시각화

 

 

 

☑️ 클러스터링 코드 예시

import numpy as np
import pandas as pd
import matplotlib.pyplot as plt

from sklearn.datasets import load_iris
from sklearn.cluster import KMeans, DBSCAN, AgglomerativeClustering
from sklearn.model_selection import train_test_split
from sklearn.metrics import silhouette_score
from sklearn.decomposition import PCA

# 1. 데이터 로드
iris = load_iris()
X = iris.data
y = iris.target  # 실제 품종 레이블(군집 학습 자체에는 사용하지 않음)


# 3. K-Means
kmeans = KMeans(n_clusters=3, random_state=42)
kmeans_labels = kmeans.fit_predict(X)

# 4. DBSCAN
dbscan = DBSCAN(eps=0.5, min_samples=5)
dbscan_labels = dbscan.fit_predict(X)

# 5. 계층적 클러스터링 (AgglomerativeClustering)
agg = AgglomerativeClustering(n_clusters=3)
agg_labels = agg.fit_predict(X)

# 6. 각 군집 결과의 실루엣 지수 평가
kmeans_sil = silhouette_score(X, kmeans_labels)
dbscan_sil = silhouette_score(X, dbscan_labels)
agg_sil = silhouette_score(X, agg_labels)

print("=== 군집 결과 비교 ===")
print("K-Means: 실루엣 점수 =", kmeans_sil, "| 클러스터 라벨 =", np.unique(kmeans_labels))
print("DBSCAN: 실루엣 점수 =", dbscan_sil, "| 클러스터 라벨 =", np.unique(dbscan_labels))
print("Agglomerative: 실루엣 점수 =", agg_sil, "| 클러스터 라벨 =", np.unique(agg_labels))

# 7. 시각화를 위해 PCA로 차원 축소 (2차원)
pca = PCA(n_components=2)
X_pca = pca.fit_transform(X)

# 8. 군집 결과 시각화
fig, axes = plt.subplots(1, 3, figsize=(15, 4))

# K-Means 시각화
axes[0].scatter(X_pca[:, 0], X_pca[:, 1], c=kmeans_labels)
axes[0].set_title("K-Means")

# DBSCAN 시각화
axes[1].scatter(X_pca[:, 0], X_pca[:, 1], c=dbscan_labels)
axes[1].set_title("DBSCAN")

# Agglomerative 시각화
axes[2].scatter(X_pca[:, 0], X_pca[:, 1], c=agg_labels)
axes[2].set_title("Agglomerative")

plt.tight_layout()
plt.show()

 

☑️ 코드 해설

  • 데이터 로드를 진행
    • load_iris 함수를 사용하여 Iris 데이터를 가져온다.
    • 4차원의 연속형 특성(꽃받침 길이·폭, 꽃잎 길이·폭)과 3개 품종 레이블이 존재한다.
  • 학습/테스트 데이터 분할은 선택 사항이지만, 예시로 70% 데이터를 학습에, 30%를 테스트에 사용하도록 분할했다.
  • 세 가지 군집 기법으로 학습을 수행한다.
    • K-Means: n_clusters=3으로 클러스터를 3개로 분할한다.
    • DBSCAN: eps=0.5, min_samples=5를 기본 설정으로 사용한다.
    • AgglomerativeClustering: n_clusters=3으로 계층적 군집을 수행한다.
  • 군집 결과 평가실루엣 지수(Silhouette Score)와 Davies-Bouldin Index를 각각 계산해 본다.
    • silhouette_score(X_train, labels)는 실루엣 지수를 계산하며, 값이 클수록(최대 1) 군집화가 잘 되었다고 볼 수 있다.
    • davies_bouldin_score(X_train, labels)는 Davies-Bouldin 지수로, 값이 낮을수록 군집화 품질이 우수함을 의미한다.
  • PCA로 2차원 축소 후 군집 결과를 시각화한다.
    • 4차원 데이터를 2차원으로 변환하여 산점도를 그리므로, 실제 군집 분포가 단순화되어 보일 수 있다.
    • 그래프에서는 각각의 모델(K-Means, DBSCAN, Agglomerative) 결과를 다른 축에 표시하여 비교한다.

 

 


4. 군집 분석 평가 방법

☑️ 실루엣 계수(Silhouette Score)

  • 각 데이터 포인트의 응집도(a)와 분리도(b)를 이용해 계산
    • 응집도(a) : 같은 군집 내 데이터와의 평균 거리
    • 분리도(b) : 가장 가까운 다른 군집과의 평균 거리
  • 계산 공식

  • 범위
    • -1 ~ 1
    • 1에 가까울수록 해당 데이터가 잘 군집되었음을 의미
    • 0 근처면 군집 경계에 위치
    • 0보다 작으면 잘못된 군집화 가능성

 

☑️ Davies-Bouldin Index

  • 군집 내 분산과 군집 간 거리의 비율을 활용
    • 각 군집에 대해 다른 군집과의 거리를 비교하면서, 군집끼리 얼마나 겹치는지 측정
  • 범위
    • 0 이상
    • 값이 0에 가까울수록 군집 간 구분이 잘 되어 있음
    • 값이 커질수록 군집 간 겹침이 많아 군집화 품질이 낮음

 

☑️ 내부 평가 vs. 외부 평가

  • 내부 평가(Internal Evaluation)
    • 데이터 내부의 정보(분산, 거리 등)를 활용해 평가 (실루엣 계수, Davies-Bouldin Index 등)
  • 외부 평가(External Evaluation)
    • 이미 알려진 레이블(정답)과 군집 결과를 비교(정답이 있을 때만 가능)

 

 


총 정리

1. 비지도 학습은 레이블 없이 데이터 구조를 파악하는 데 사용

 

2. 군집 분석은 유사한 데이터끼리 묶어 세분화하고, 다양한 분야에서 활용

 

3. K-Means, DBSCAN, 계층적 군집 알고리즘별 특성을 파악해 상황에 맞춰 선택

 

4. 군집화 결과는 실루엣 계수, Davies-Bouldin Index 등으로 정성·정량적으로 평가

 

5. 다양한 실무 분야에서 고객 세분화, 이상치 탐지 등으로 적극 활용 가능

 

💡앞으로 알면 더 좋은 내용!

: 이상치 탐지(Anomaly Detection)나 토픽 모델링(Topic Modeling) 영역과도 연계해 폭넓은 분석 수행

: 실무에서는 여러 알고리즘을 시도해보며 최적의 군집 수 및 파라미터를 찾는 과정(Iteration)이 필수

 

* 토픽 모델링이란?

: 문서를 이루는 단어들의 패턴(분포)을 분석하여,

여러 문서에 걸쳐 자주 함께 등장하는 단어들의 집합을 하나의 토픽(주제)으로 간주하는 방식

 

❗결론

: 군집 분석은 단순히 “데이터를 몇 개 그룹으로 묶었다”에서 끝나지 않고,

왜 그룹이 그렇게 나뉘었는지(의미 해석)와 어떻게 업무에 활용할지(실행 전략)까지 연결해야 비즈니스 가치를 창출

 

'머신러닝' 카테고리의 다른 글

머신러닝(이상탐지)  (1) 2025.07.08
머신러닝(차원축소)  (3) 2025.07.08
머신러닝(앙상블 기법)  (0) 2025.07.07
머신러닝(분류)  (1) 2025.07.04
머신러닝(회귀)  (2) 2025.07.03