🤖

본 콘텐츠의 이미지 및 내용은 AI로 생성되었습니다.

⚠️

본 콘텐츠의 이미지 및 내용을 무단으로 복제, 배포, 수정하여 사용할 경우 저작권법에 의해 법적 제재를 받을 수 있습니다.

이미지 로딩 중...

비지도 학습 기초 완벽 가이드 - 슬라이드 1/7
A

AI Generated

2025. 12. 3. · 11 Views

비지도 학습 기초 완벽 가이드

레이블 없는 데이터에서 숨겨진 패턴을 찾아내는 비지도 학습의 핵심 개념을 다룹니다. K-Means 클러스터링부터 PCA 차원 축소까지, 실무에서 바로 활용할 수 있는 기법들을 쉽게 설명합니다.


목차

  1. 비지도 학습이란?
  2. K-Means 클러스터링
  3. 최적의 K값 찾기(Elbow Method)
  4. 계층적 클러스터링
  5. PCA 차원 축소
  6. 클러스터링 결과 시각화

1. 비지도 학습이란?

김개발 씨는 이커머스 회사에서 고객 데이터를 분석하라는 업무를 받았습니다. 그런데 문제가 있었습니다.

수만 명의 고객 데이터는 있는데, 어떤 고객이 어떤 유형인지 정해진 정답이 없었습니다. "정답 없이 어떻게 분석하지?" 김개발 씨는 고민에 빠졌습니다.

비지도 학습은 정답 레이블 없이 데이터 자체의 구조와 패턴을 찾아내는 머신러닝 기법입니다. 마치 처음 방문한 도서관에서 사서 없이 책들의 배열 패턴을 스스로 파악하는 것과 같습니다.

데이터 군집화, 차원 축소, 이상 탐지 등 다양한 분야에서 활용됩니다.

다음 코드를 살펴봅시다.

from sklearn.datasets import make_blobs
import numpy as np

# 레이블 없는 데이터 생성 (실제로는 레이블을 사용하지 않음)
X, _ = make_blobs(n_samples=300, centers=3, random_state=42)

# 데이터의 형태 확인
print(f"데이터 형태: {X.shape}")  # (300, 2)
print(f"첫 5개 샘플:\n{X[:5]}")

# 비지도 학습에서는 y(정답)를 사용하지 않습니다
# 오직 X(특성)만으로 패턴을 찾아냅니다

김개발 씨는 입사 6개월 차 데이터 분석가입니다. 오늘 팀장님으로부터 특별한 과제를 받았습니다.

"고객들을 비슷한 특성끼리 그룹으로 나눠봐요. 마케팅팀에서 타겟 광고에 활용할 거예요." 데이터를 열어본 김개발 씨는 당황했습니다.

구매 금액, 방문 횟수, 체류 시간 등 다양한 정보는 있는데, 정작 "이 고객은 A그룹, 저 고객은 B그룹"이라고 정해진 정답이 없었습니다. 선배 박시니어 씨에게 도움을 요청했습니다.

"선배, 정답이 없는데 어떻게 분석해요? 지도 학습처럼 학습시킬 레이블이 없잖아요." 박시니어 씨가 미소를 지었습니다.

"바로 그런 상황에서 쓰는 게 비지도 학습이야. 정답 없이도 데이터 자체의 패턴을 찾아낼 수 있어." 비지도 학습이란 정확히 무엇일까요?

쉽게 비유하자면, 처음 가본 외국 마트에서 쇼핑하는 상황을 떠올려 보세요. 안내판이 외국어라 읽을 수 없지만, 비슷한 상품들이 모여 있는 패턴을 보고 "여기는 음료 코너구나, 저기는 과자 코너구나"라고 스스로 파악할 수 있습니다.

비지도 학습도 마찬가지입니다. 누가 알려주지 않아도 데이터의 유사성을 기반으로 자연스러운 그룹을 찾아냅니다.

그렇다면 왜 비지도 학습이 필요할까요? 현실 세계의 데이터는 대부분 레이블이 없습니다.

모든 고객에게 "당신은 충성 고객입니다"라고 태그를 붙이는 것은 불가능에 가깝습니다. 수백만 개의 이미지에 일일이 카테고리를 지정하는 것도 엄청난 비용이 듭니다.

비지도 학습은 크게 세 가지 유형으로 나뉩니다. 첫째는 클러스터링으로, 비슷한 데이터끼리 그룹으로 묶습니다.

둘째는 차원 축소로, 복잡한 데이터를 단순화하면서 핵심 정보는 유지합니다. 셋째는 연관 규칙 학습으로, 데이터 간의 연관성을 찾아냅니다.

위 코드를 살펴보면, make_blobs 함수로 300개의 샘플 데이터를 생성합니다. 반환값에서 y(레이블)는 언더스코어로 무시하고 X(특성)만 사용합니다.

이것이 비지도 학습의 핵심입니다. 오직 특성 데이터만으로 패턴을 발견합니다.

실무에서 비지도 학습은 어디에 쓰일까요? 고객 세분화, 이상 거래 탐지, 추천 시스템, 이미지 압축 등 정말 다양합니다.

특히 새로운 비즈니스 인사이트를 발굴할 때 강력한 도구가 됩니다. 주의할 점도 있습니다.

비지도 학습은 정답이 없기 때문에 결과의 품질을 평가하기 어렵습니다. "이 그룹이 정말 의미 있는 건가?"라는 질문에 명확히 답하기 쉽지 않습니다.

따라서 도메인 지식과 함께 결과를 해석하는 것이 중요합니다. 박시니어 씨의 설명을 들은 김개발 씨는 고개를 끄덕였습니다.

"정답이 없어도 데이터가 스스로 이야기해주는 거네요!" 이제 본격적으로 비지도 학습의 대표 기법들을 하나씩 살펴보겠습니다.

실전 팁

💡 - 비지도 학습은 탐색적 데이터 분석의 강력한 도구입니다

  • 결과 해석 시 도메인 전문가와 협업하면 더 의미 있는 인사이트를 얻을 수 있습니다

2. K-Means 클러스터링

김개발 씨가 비지도 학습의 개념을 이해하고 나니, 이제 실제로 데이터를 그룹으로 나눠야 했습니다. "어떤 알고리즘을 써야 하지?" 고민하던 중 박시니어 씨가 다가왔습니다.

"클러스터링의 기본 중의 기본, K-Means부터 시작해봐."

K-Means 클러스터링은 데이터를 K개의 그룹으로 나누는 가장 대표적인 클러스터링 알고리즘입니다. 마치 학급에서 K명의 조장을 뽑고, 나머지 학생들이 가장 가까운 조장에게 배정되는 것과 같습니다.

간단하면서도 효과적이어서 실무에서 가장 많이 사용됩니다.

다음 코드를 살펴봅시다.

from sklearn.cluster import KMeans
from sklearn.datasets import make_blobs
import numpy as np

# 샘플 데이터 생성
X, _ = make_blobs(n_samples=300, centers=3, random_state=42)

# K-Means 모델 생성 (3개의 클러스터로 분류)
kmeans = KMeans(n_clusters=3, random_state=42, n_init=10)

# 모델 학습 및 클러스터 할당
labels = kmeans.fit_predict(X)

# 각 클러스터의 중심점 확인
print(f"클러스터 중심점:\n{kmeans.cluster_centers_}")
print(f"각 샘플의 클러스터 레이블: {labels[:10]}")

김개발 씨가 K-Means라는 이름을 처음 들었을 때, 궁금증이 생겼습니다. "K는 뭐고, Means는 뭐예요?" 박시니어 씨가 화이트보드에 그림을 그리며 설명했습니다.

"K는 우리가 만들고 싶은 그룹의 개수야. Means는 평균이라는 뜻이고, 각 그룹의 중심점을 평균으로 계산하기 때문에 붙은 이름이지." K-Means의 작동 원리를 쉽게 이해하려면, 운동회의 조 나누기를 생각해보세요.

먼저 운동장에 K명의 조장이 무작위로 서있습니다. 나머지 학생들은 자기와 가장 가까운 조장에게 달려갑니다.

그러면 조장은 자기 조원들의 가운데로 이동합니다. 다시 학생들은 가장 가까운 조장에게 재배치됩니다.

이 과정을 반복하면 결국 안정적인 조가 만들어집니다. 알고리즘은 정확히 다음 단계를 반복합니다.

첫째, K개의 초기 중심점을 무작위로 선택합니다. 둘째, 각 데이터 포인트를 가장 가까운 중심점에 할당합니다.

셋째, 각 클러스터의 중심점을 해당 클러스터 데이터들의 평균으로 재계산합니다. 넷째, 중심점이 더 이상 변하지 않을 때까지 둘째와 셋째를 반복합니다.

위 코드에서 KMeans(n_clusters=3)은 데이터를 3개의 그룹으로 나누겠다는 의미입니다. fit_predict 메서드는 학습과 예측을 동시에 수행하여 각 데이터가 어느 클러스터에 속하는지 레이블을 반환합니다.

cluster_centers_는 최종적으로 수렴한 각 클러스터의 중심 좌표입니다. 실무에서 K-Means는 정말 다양하게 활용됩니다.

고객 세분화에서는 구매 패턴이 비슷한 고객들을 그룹으로 묶어 맞춤형 마케팅을 할 수 있습니다. 이미지 압축에서는 비슷한 색상들을 하나로 묶어 용량을 줄입니다.

문서 분류에서는 비슷한 주제의 문서들을 자동으로 카테고리화합니다. 그러나 K-Means에도 한계가 있습니다.

가장 큰 문제는 K값을 미리 정해야 한다는 것입니다. 적절한 K를 모르면 어떻게 해야 할까요?

또한 초기 중심점의 위치에 따라 결과가 달라질 수 있습니다. n_init 파라미터로 여러 번 시도하여 최적의 결과를 선택하는 이유입니다.

김개발 씨가 코드를 실행해보니 300개의 데이터가 깔끔하게 3개의 그룹으로 나뉘었습니다. "신기하네요.

정답을 알려주지 않았는데 알아서 분류가 되네요!" K-Means의 매력에 빠지기 시작한 김개발 씨였습니다.

실전 팁

💡 - n_init 값을 높이면 더 안정적인 결과를 얻을 수 있지만 시간이 오래 걸립니다

  • 데이터의 스케일이 다르면 StandardScaler로 정규화한 후 K-Means를 적용하세요

3. 최적의 K값 찾기(Elbow Method)

김개발 씨가 K-Means를 열심히 적용하던 중 근본적인 질문이 떠올랐습니다. "K를 3으로 했는데, 진짜 3이 맞는 건가?

4나 5가 더 좋은 거 아닐까?" 이 질문에 박시니어 씨가 웃으며 말했습니다. "좋은 질문이야.

엘보우 메서드를 알려줄게."

**엘보우 메서드(Elbow Method)**는 최적의 클러스터 개수 K를 찾는 대표적인 기법입니다. K값을 1부터 증가시키며 각 K에 대한 **관성(inertia)**을 측정하고, 그래프가 팔꿈치처럼 꺾이는 지점을 최적의 K로 선택합니다.

이름 그대로 팔꿈치를 찾는 방법입니다.

다음 코드를 살펴봅시다.

from sklearn.cluster import KMeans
from sklearn.datasets import make_blobs
import matplotlib.pyplot as plt

# 샘플 데이터 생성
X, _ = make_blobs(n_samples=300, centers=4, random_state=42)

# K값에 따른 관성(inertia) 계산
inertias = []
K_range = range(1, 11)

for k in K_range:
    kmeans = KMeans(n_clusters=k, random_state=42, n_init=10)
    kmeans.fit(X)
    inertias.append(kmeans.inertia_)
    print(f"K={k}, Inertia={kmeans.inertia_:.2f}")

# 엘보우 포인트: K=4 근처에서 꺾임 발생

김개발 씨는 K-Means의 결과가 K값에 따라 크게 달라진다는 것을 깨달았습니다. K를 2로 하면 너무 뭉뚱그려지고, K를 10으로 하면 너무 잘게 쪼개졌습니다.

도대체 정답은 무엇일까요? 박시니어 씨가 힌트를 주었습니다.

"정답은 데이터가 알려줘. 관성이라는 지표를 봐봐." 관성(inertia)이란 무엇일까요?

각 데이터 포인트에서 자신이 속한 클러스터 중심까지의 거리 제곱 합입니다. 쉽게 말해, 데이터들이 자기 그룹의 중심에 얼마나 가까이 모여있는지를 나타냅니다.

관성이 작을수록 클러스터가 촘촘하게 잘 뭉쳐있다는 의미입니다. 그런데 K를 늘리면 관성은 무조건 작아집니다.

극단적으로 K가 데이터 개수와 같으면 관성은 0이 됩니다. 각 데이터가 자기 자신만의 클러스터이니까요.

하지만 그건 의미 없는 분류입니다. 엘보우 메서드의 핵심은 감소율의 변화를 보는 것입니다.

K를 1에서 2로 늘리면 관성이 확 줄어듭니다. 2에서 3으로 늘려도 많이 줄어들 수 있습니다.

하지만 어느 순간부터 K를 늘려도 관성이 거의 줄지 않는 지점이 옵니다. 바로 그 지점이 팔꿈치입니다.

왜 팔꿈치일까요? 그래프를 그려보면 처음에는 가파르게 내려가다가 어느 순간 완만해집니다.

그 모양이 마치 팔을 구부렸을 때의 팔꿈치와 닮았습니다. 이 꺾이는 지점이 "더 이상 K를 늘려봤자 효과가 미미하다"는 신호입니다.

위 코드에서는 K를 1부터 10까지 변화시키며 각각의 관성을 측정합니다. 실제 데이터가 4개의 중심을 가지고 생성되었으므로, K=4 근처에서 엘보우 포인트가 나타날 것입니다.

실무에서 주의할 점이 있습니다. 엘보우가 명확하지 않은 경우도 많습니다.

데이터가 자연스러운 군집 구조를 가지지 않으면 그래프가 그냥 완만하게 내려갈 뿐입니다. 이럴 때는 실루엣 점수 같은 다른 지표를 함께 참고하거나, 비즈니스 관점에서 의미 있는 K를 선택해야 합니다.

김개발 씨가 엘보우 그래프를 그려보니 K=4에서 확실히 꺾이는 것이 보였습니다. "이제 K를 찍는 게 아니라 근거를 가지고 선택할 수 있겠네요!" 데이터 분석가로서 한 단계 성장한 순간이었습니다.

실전 팁

💡 - 엘보우가 명확하지 않으면 실루엣 점수(silhouette score)를 추가로 확인하세요

  • 비즈니스 요구사항에 따라 K를 조정할 수도 있습니다 (예: 마케팅팀이 5개 그룹을 원하는 경우)

4. 계층적 클러스터링

김개발 씨가 K-Means로 고객 분류를 마쳤는데, 마케팅팀에서 추가 요청이 들어왔습니다. "그룹 간의 관계도 알고 싶어요.

A그룹과 B그룹이 얼마나 비슷한지, 큰 그룹 안에 작은 그룹이 어떻게 나뉘는지요." 박시니어 씨가 새로운 기법을 꺼내들었습니다. "그럴 땐 계층적 클러스터링을 써봐."

**계층적 클러스터링(Hierarchical Clustering)**은 데이터를 계층 구조로 군집화하는 기법입니다. 마치 가계도나 생물 분류 체계처럼, 작은 그룹이 모여 더 큰 그룹을 이루는 트리 구조를 만듭니다.

K를 미리 정하지 않아도 되며, 덴드로그램이라는 시각화를 통해 데이터 간의 관계를 한눈에 파악할 수 있습니다.

다음 코드를 살펴봅시다.

from sklearn.cluster import AgglomerativeClustering
from scipy.cluster.hierarchy import dendrogram, linkage
from sklearn.datasets import make_blobs
import numpy as np

# 샘플 데이터 생성
X, _ = make_blobs(n_samples=50, centers=3, random_state=42)

# 병합 계층적 클러스터링
hc = AgglomerativeClustering(n_clusters=3, linkage='ward')
labels = hc.fit_predict(X)

# 덴드로그램을 위한 연결 행렬 계산
linked = linkage(X, method='ward')
print(f"클러스터 레이블: {labels}")
print(f"연결 행렬 형태: {linked.shape}")

마케팅팀의 요청을 받은 김개발 씨는 고민에 빠졌습니다. K-Means는 각 데이터가 어느 그룹에 속하는지는 알려주지만, 그룹 간의 관계는 알려주지 않습니다.

"A그룹과 B그룹이 비슷한 건지, C그룹과 더 비슷한 건지 어떻게 알지?" 박시니어 씨가 생물학 교과서를 꺼내 보여주었습니다. "생물 분류 체계 기억나?

종, 속, 과, 목, 강, 문, 계로 올라가잖아. 계층적 클러스터링도 이런 구조를 만들어내." 계층적 클러스터링에는 두 가지 방식이 있습니다.

**병합형(Agglomerative)**은 각 데이터를 개별 클러스터로 시작해서 점점 합쳐나갑니다. 반대로 **분할형(Divisive)**은 하나의 큰 클러스터에서 시작해서 점점 나눕니다.

대부분 병합형을 많이 사용합니다. 병합형의 작동 원리를 살펴봅시다.

처음에는 각 데이터 포인트가 하나의 클러스터입니다. 50개의 데이터가 있으면 50개의 클러스터로 시작합니다.

그다음, 가장 가까운 두 클러스터를 찾아 합칩니다. 이제 49개가 되었습니다.

이 과정을 모든 데이터가 하나의 클러스터가 될 때까지 반복합니다. 여기서 "가장 가까운"을 정의하는 방법이 linkage입니다.

ward는 합쳤을 때 분산 증가가 최소인 두 클러스터를 합칩니다. complete는 두 클러스터 사이의 최대 거리를 기준으로 합니다.

average는 평균 거리를 사용합니다. 일반적으로 ward가 균형 잡힌 클러스터를 만들어 많이 사용됩니다.

덴드로그램은 이 병합 과정을 트리 그림으로 보여줍니다. 아래에서 각 데이터가 시작하고, 위로 올라가며 합쳐지는 것을 볼 수 있습니다.

세로축의 높이는 합쳐질 때의 거리를 나타냅니다. 원하는 높이에서 수평선을 그으면 그 선과 만나는 가지의 개수가 클러스터 개수가 됩니다.

위 코드에서 AgglomerativeClustering은 병합형 계층적 클러스터링을 수행합니다. linkage 함수는 덴드로그램을 그리기 위한 연결 정보를 계산합니다.

scipy 라이브러리의 dendrogram 함수로 실제 시각화가 가능합니다. K-Means와 비교했을 때 계층적 클러스터링의 장점은 명확합니다.

K를 미리 정하지 않아도 됩니다. 덴드로그램을 보고 적절한 수준에서 자르면 됩니다.

또한 그룹 간의 유사도를 직관적으로 파악할 수 있습니다. 단점도 있습니다.

데이터가 많으면 계산이 매우 오래 걸립니다. K-Means는 O(n)인 반면, 계층적 클러스터링은 O(n^2) 이상입니다.

수만 개 이상의 데이터에는 적합하지 않을 수 있습니다. 김개발 씨가 덴드로그램을 마케팅팀에 보여주자 큰 호응을 얻었습니다.

"와, 이 그룹과 저 그룹이 가까웠구나! 합쳐서 마케팅해도 되겠네요." 데이터 시각화의 힘을 실감하는 순간이었습니다.

실전 팁

💡 - 대용량 데이터에는 먼저 K-Means로 축소한 후 계층적 클러스터링을 적용하는 방법도 있습니다

  • 덴드로그램에서 긴 세로선이 나타나는 높이에서 자르면 자연스러운 클러스터를 얻을 수 있습니다

5. PCA 차원 축소

클러스터링 분석을 마친 김개발 씨에게 새로운 과제가 주어졌습니다. 이번에는 100개의 특성(feature)을 가진 데이터였습니다.

시각화를 하려고 했는데 100차원을 어떻게 그래프로 그리지? 모델 학습도 너무 오래 걸렸습니다.

박시니어 씨가 조언했습니다. "차원의 저주에 빠졌구나.

PCA를 배워볼 때가 됐어."

**PCA(Principal Component Analysis, 주성분 분석)**는 고차원 데이터를 저차원으로 축소하는 대표적인 기법입니다. 마치 3D 물체의 그림자가 2D인 것처럼, 정보 손실을 최소화하면서 데이터의 차원을 줄입니다.

시각화, 노이즈 제거, 계산 효율 향상 등 다양한 목적으로 활용됩니다.

다음 코드를 살펴봅시다.

from sklearn.decomposition import PCA
from sklearn.datasets import load_iris
from sklearn.preprocessing import StandardScaler

# Iris 데이터셋 로드 (4차원)
iris = load_iris()
X = iris.data

# 스케일링 (PCA 전 필수)
scaler = StandardScaler()
X_scaled = scaler.fit_transform(X)

# PCA로 4차원 -> 2차원 축소
pca = PCA(n_components=2)
X_pca = pca.fit_transform(X_scaled)

print(f"원본 데이터 형태: {X.shape}")       # (150, 4)
print(f"축소된 데이터 형태: {X_pca.shape}") # (150, 2)
print(f"설명된 분산 비율: {pca.explained_variance_ratio_}")

김개발 씨는 100개의 특성을 가진 데이터 앞에서 막막해졌습니다. 사람의 눈으로는 3차원까지밖에 볼 수 없는데, 100차원 데이터를 어떻게 이해하고 시각화할 수 있을까요?

박시니어 씨가 재미있는 비유를 들었습니다. "3D 영화를 2D 스크린에서 보잖아.

정보는 조금 손실되지만 충분히 이야기를 이해할 수 있어. PCA도 마찬가지야." PCA의 핵심 아이디어는 데이터의 분산을 최대한 보존하는 새로운 축을 찾는 것입니다.

분산이 크다는 것은 데이터의 차이가 크다는 것이고, 이는 곧 정보가 많다는 의미입니다. PCA는 정보가 가장 많이 담긴 방향으로 데이터를 투영합니다.

쉬운 비유로 설명해봅시다. 긴 바게트 빵을 위에서 보면 길쭉한 타원으로 보입니다.

옆에서 보면 그냥 동그란 원처럼 보이고요. 어떤 각도에서 보느냐에 따라 정보량이 달라집니다.

PCA는 가장 많은 정보를 보여주는 각도, 즉 위에서 본 모습을 찾아내는 것입니다. 기술적으로 PCA는 공분산 행렬의 고유벡터를 계산합니다.

첫 번째 주성분(PC1)은 분산이 가장 큰 방향입니다. 두 번째 주성분(PC2)은 PC1과 직교하면서 남은 분산 중 가장 큰 방향입니다.

이런 식으로 주성분을 찾아 원하는 차원까지 축소합니다. 위 코드에서 Iris 데이터셋은 원래 4개의 특성을 가집니다.

PCA(n_components=2)로 2차원으로 축소했습니다. explained_variance_ratio_는 각 주성분이 원본 데이터 분산의 몇 퍼센트를 설명하는지 보여줍니다.

두 주성분을 합쳐서 95% 이상의 분산을 설명한다면, 2차원으로 줄여도 정보 손실이 적다는 의미입니다. PCA를 적용하기 전에 반드시 스케일링을 해야 합니다.

특성마다 단위가 다르면 (예: 나이는 0100, 연봉은 01억) 단위가 큰 특성이 PCA를 지배하게 됩니다. StandardScaler로 평균 0, 표준편차 1로 맞추고 PCA를 적용해야 합니다.

실무에서 PCA는 다양하게 활용됩니다. 고차원 데이터를 2~3차원으로 줄여 시각화할 수 있습니다.

머신러닝 모델의 입력 특성을 줄여 학습 속도를 높일 수 있습니다. 노이즈가 많은 데이터에서 주요 패턴만 추출할 수도 있습니다.

주의할 점도 있습니다. 축소된 주성분은 원래 특성의 선형 조합이므로 해석이 어렵습니다.

PC1이 뭘 의미하는지 직관적으로 설명하기 어려울 수 있습니다. 또한 선형 관계만 잡아내므로, 비선형 패턴이 중요한 데이터에는 t-SNE나 UMAP 같은 다른 기법을 고려해야 합니다.

김개발 씨가 100차원 데이터를 2차원으로 축소해서 그래프를 그려보니, 비슷한 데이터들이 모여있는 것이 눈에 보였습니다. "드디어 데이터가 보이기 시작했어요!" 차원 축소의 마법에 감탄하는 순간이었습니다.

실전 팁

💡 - explained_variance_ratio_의 누적합이 90~95% 이상 되도록 차원을 선택하세요

  • 반드시 스케일링 후에 PCA를 적용해야 올바른 결과를 얻을 수 있습니다

6. 클러스터링 결과 시각화

김개발 씨가 클러스터링과 PCA를 모두 마쳤습니다. 이제 마지막 단계가 남았습니다.

분석 결과를 팀원들과 경영진에게 보여줘야 합니다. 숫자와 표만으로는 직관적으로 이해시키기 어렵습니다.

박시니어 씨가 마지막 조언을 건넸습니다. "데이터 분석가의 진짜 실력은 시각화에서 드러나."

클러스터링 결과 시각화는 군집화 분석의 마무리 단계이자 가장 중요한 커뮤니케이션 도구입니다. PCA로 차원을 축소한 후 산점도로 클러스터를 표현하고, 각 클러스터의 중심과 경계를 시각적으로 보여줍니다.

좋은 시각화는 복잡한 분석 결과를 한눈에 이해시킬 수 있습니다.

다음 코드를 살펴봅시다.

from sklearn.cluster import KMeans
from sklearn.decomposition import PCA
from sklearn.datasets import make_blobs
from sklearn.preprocessing import StandardScaler
import matplotlib.pyplot as plt
import numpy as np

# 고차원 샘플 데이터 생성 (10차원)
X, _ = make_blobs(n_samples=300, n_features=10, centers=4, random_state=42)
X_scaled = StandardScaler().fit_transform(X)

# K-Means 클러스터링
kmeans = KMeans(n_clusters=4, random_state=42, n_init=10)
labels = kmeans.fit_predict(X_scaled)

# PCA로 2차원 축소 후 시각화
pca = PCA(n_components=2)
X_2d = pca.fit_transform(X_scaled)
centers_2d = pca.transform(kmeans.cluster_centers_)

# 시각화 (실제 실행시 plt.show() 추가)
print(f"클러스터별 데이터 수: {np.bincount(labels)}")

드디어 분석의 마지막 단계입니다. 김개발 씨는 며칠간의 분석 결과를 다음 주 경영진 회의에서 발표해야 합니다.

"고객이 4개 그룹으로 나뉩니다"라고 말만 해서는 설득력이 없습니다. 눈으로 보여줘야 합니다.

박시니어 씨가 중요한 원칙을 알려주었습니다. "시각화의 목표는 예쁜 그림이 아니야.

인사이트를 전달하는 거야. 보는 사람이 '아, 그렇구나!'라고 느껴야 해." 고차원 클러스터링 결과를 시각화하는 가장 일반적인 방법은 PCA로 2차원 축소 후 산점도를 그리는 것입니다.

10차원, 100차원 데이터도 2차원 평면에 점으로 찍을 수 있습니다. 같은 클러스터의 점들은 같은 색으로 칠합니다.

위 코드의 흐름을 따라가봅시다. 먼저 10차원의 샘플 데이터를 생성합니다.

StandardScaler로 스케일링 후 K-Means로 4개의 클러스터를 찾습니다. 그다음 PCA로 2차원으로 축소합니다.

클러스터 중심점도 같은 PCA 변환을 적용하여 2차원 좌표로 변환합니다. 시각화할 때 몇 가지 팁이 있습니다.

색상은 클러스터마다 명확히 구분되는 색을 사용합니다. matplotlib의 기본 색상 팔레트도 좋지만, seaborn의 color_palette를 쓰면 더 보기 좋습니다.

중심점은 별표나 큰 점으로 강조합니다. 범례로 각 클러스터가 무엇을 의미하는지 설명을 붙입니다.

실무에서 시각화의 품질이 분석의 가치를 좌우합니다. 같은 분석 결과라도 잘 정리된 시각화는 경영진의 의사결정을 이끌어내고, 엉성한 시각화는 "그래서 뭐?"라는 반응만 받습니다.

축 제목, 범례, 색상 선택 하나하나가 중요합니다. 덴드로그램도 계층적 클러스터링의 강력한 시각화 도구입니다.

scipy의 dendrogram 함수로 그릴 수 있습니다. 트리 구조를 보면 어떤 그룹들이 가까운지, 어느 수준에서 끊어야 적절한지 한눈에 파악됩니다.

인터랙티브 시각화도 고려해볼 만합니다. plotly 라이브러리를 사용하면 마우스를 올렸을 때 각 점의 상세 정보가 표시되는 그래프를 만들 수 있습니다.

대시보드에 넣어 실시간으로 탐색할 수 있게 하면 비즈니스 유저들의 만족도가 높습니다. 주의할 점도 있습니다.

PCA로 축소하면 정보 손실이 발생합니다. 2차원에서 잘 분리되어 보이지 않는다고 해서 클러스터링이 실패한 것은 아닙니다.

explained_variance_ratio_를 함께 보고해서 "2차원으로 줄였을 때 원본 정보의 70%가 보존됩니다"라고 설명하면 좋습니다. 김개발 씨가 완성된 시각화를 경영진에게 보여주자 반응이 좋았습니다.

"이 파란색 그룹이 VIP 고객이고, 빨간색이 이탈 위험 고객이란 말이죠? 바로 타겟 마케팅 들어갑시다!" 데이터가 비즈니스 액션으로 이어지는 순간이었습니다.

박시니어 씨가 김개발 씨의 어깨를 두드렸습니다. "축하해.

이제 비지도 학습의 기초를 완전히 마스터했어. 다음에는 더 심화된 기법들을 배워보자." 김개발 씨의 데이터 분석가로서의 여정은 이제 막 시작되었습니다.

실전 팁

💡 - 시각화에는 반드시 축 제목, 범례, 그래프 제목을 포함하세요

  • 발표용 그래프는 폰트 크기를 키우고 불필요한 요소를 제거하여 깔끔하게 만드세요

이상으로 학습을 마칩니다. 위 내용을 직접 코드로 작성해보면서 익혀보세요!

#Python#MachineLearning#Clustering#KMeans#PCA#Machine Learning,Python

댓글 (0)

댓글을 작성하려면 로그인이 필요합니다.