🤖

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

⚠️

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

이미지 로딩 중...

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

AI Generated

2025. 12. 17. · 5 Views

비지도학습 완벽 가이드

정답 없이 스스로 패턴을 찾는 비지도학습의 개념과 클러스터링, 차원 축소 등 핵심 알고리즘을 실무 사례와 함께 배웁니다. 초급자도 쉽게 이해할 수 있도록 비유와 스토리로 풀어낸 입문 가이드입니다.


목차

  1. 비지도학습이란
  2. 지도학습_vs_비지도학습_비교
  3. 클러스터링_개념
  4. 클러스터링_활용_사례
  5. 차원_축소_소개
  6. 비지도학습의_장단점
  7. 클러스터링_알고리즘_종류

1. 비지도학습이란

김개발 씨는 회사에서 고객 데이터 분석 업무를 맡게 되었습니다. 팀장님이 말했습니다.

"고객들을 비슷한 그룹으로 나눠보세요. 어떤 그룹이 있는지는...

데이터가 알려줄 거예요." 정답도 없는데 어떻게 그룹을 나눈다는 걸까요?

비지도학습은 정답 라벨 없이 데이터 자체의 패턴을 찾아내는 머신러닝 방법입니다. 마치 아무도 가르쳐주지 않았는데 스스로 규칙을 발견하는 것과 같습니다.

데이터의 숨겨진 구조를 자동으로 찾아내어 그룹화하거나 중요한 특징을 추출할 수 있습니다.

다음 코드를 살펴봅시다.

from sklearn.cluster import KMeans
import numpy as np

# 고객 데이터: [구매금액, 방문횟수]
customer_data = np.array([
    [100, 5], [120, 6], [95, 4],    # 그룹 1: 저가 고객
    [500, 20], [480, 22], [520, 19]  # 그룹 2: 고가 고객
])

# 비지도학습: 정답 없이 2개 그룹으로 자동 분류
model = KMeans(n_clusters=2, random_state=42)
groups = model.fit_predict(customer_data)

print(f"자동으로 분류된 그룹: {groups}")
# 출력: [0 0 0 1 1 1] - 데이터가 스스로 2개 그룹을 찾아냄

김개발 씨는 막막했습니다. 지금까지 배운 머신러닝은 모두 정답이 있었습니다.

"이 이메일은 스팸", "이 사진은 고양이"처럼 명확한 라벨이 있었죠. 그런데 지금은 고객 데이터만 덩그러니 있을 뿐, 어떤 그룹으로 나눠야 하는지 아무도 알려주지 않았습니다.

선배 개발자 박시니어 씨가 다가와 말했습니다. "이럴 때 쓰는 게 비지도학습이에요.

정답이 없어도 데이터가 스스로 패턴을 찾아내죠." 그렇다면 비지도학습이란 정확히 무엇일까요? 쉽게 비유하자면, 비지도학습은 마치 선생님 없이 혼자 공부하는 것과 같습니다.

아무도 "이건 A그룹, 저건 B그룹"이라고 가르쳐주지 않습니다. 대신 학생이 스스로 책을 읽고 비슷한 내용끼리 묶어봅니다.

"아, 이 개념들은 서로 관련이 있구나!" 하고 깨닫는 것이죠. 이처럼 비지도학습도 데이터를 분석해 숨겨진 패턴을 자동으로 발견합니다.

비지도학습이 필요한 이유는 무엇일까요? 실제 현업에서는 정답 라벨이 없는 데이터가 훨씬 많습니다.

예를 들어 쇼핑몰의 고객 수십만 명을 일일이 "VIP고객", "일반고객"으로 분류하는 건 불가능합니다. 시간도 오래 걸리고, 사람마다 기준이 달라서 일관성도 없습니다.

더 큰 문제는 우리가 미처 생각하지 못한 새로운 그룹이 있을 수도 있다는 점입니다. 바로 이런 문제를 해결하기 위해 비지도학습이 등장했습니다.

비지도학습을 사용하면 데이터가 스스로 자연스러운 그룹을 찾아냅니다. 또한 사람의 편견 없이 객관적인 패턴을 발견할 수 있습니다.

무엇보다 새로운 인사이트를 얻을 수 있다는 큰 이점이 있습니다. "아, 우리 고객 중에 이런 특성을 가진 그룹이 있었구나!" 하고 발견하는 것이죠.

위의 코드를 한 줄씩 살펴보겠습니다. 먼저 고객 데이터를 준비합니다.

구매금액과 방문횟수라는 두 가지 특징만 있을 뿐, 어떤 그룹인지 정답 라벨은 없습니다. 이 부분이 핵심입니다.

다음으로 KMeans 알고리즘을 사용해 2개 그룹으로 나누라고 지시합니다. fit_predict 메서드가 실행되면 알고리즘이 데이터를 분석해 자동으로 그룹을 찾아냅니다.

결과를 보면 [0 0 0 1 1 1]처럼 자연스럽게 두 그룹으로 분류된 것을 알 수 있습니다. 실제 현업에서는 어떻게 활용할까요?

예를 들어 넷플릭스 같은 스트리밍 서비스를 운영한다고 가정해봅시다. 수백만 명의 사용자를 비슷한 취향끼리 묶어서 맞춤형 추천을 하고 싶습니다.

하지만 "로맨스 좋아하는 그룹", "액션 좋아하는 그룹"처럼 미리 정의하면 너무 단순합니다. 비지도학습을 사용하면 "로맨스+코미디를 주말 저녁에 보는 20대 여성 그룹"처럼 우리가 미처 생각하지 못한 세밀한 그룹을 자동으로 발견할 수 있습니다.

주의할 점도 있습니다. 초보 개발자들이 흔히 하는 실수 중 하나는 비지도학습 결과를 무조건 신뢰하는 것입니다.

알고리즘이 찾아낸 그룹이 항상 의미 있는 것은 아닙니다. 때로는 우연히 만들어진 패턴일 수도 있습니다.

따라서 도메인 지식을 활용해 결과를 검증하고 해석해야 합니다. 또 다른 주의사항은 그룹 개수를 정하는 문제입니다.

위 코드에서는 n_clusters=2로 2개 그룹을 지정했습니다. 하지만 실제로는 몇 개 그룹이 적절한지 모를 때가 많습니다.

너무 많이 나누면 과도하게 세분화되고, 너무 적게 나누면 의미 있는 차이를 놓칠 수 있습니다. 다시 김개발 씨의 이야기로 돌아가 봅시다.

박시니어 씨의 설명을 들은 김개발 씨는 고개를 끄덕였습니다. "아, 정답이 없어도 데이터 자체가 답을 알려주는 거군요!" 비지도학습을 제대로 이해하면 정답 라벨 없이도 데이터에서 가치 있는 인사이트를 발견할 수 있습니다.

여러분도 오늘 배운 내용을 실제 프로젝트에 적용해 보세요.

실전 팁

💡 - 비지도학습은 탐색적 데이터 분석 단계에서 숨겨진 패턴을 찾는 데 유용합니다

  • 결과는 항상 도메인 전문가와 함께 해석하여 실제 의미가 있는지 검증하세요
  • 데이터 전처리(정규화, 스케일링)가 결과에 큰 영향을 미치므로 신경 써야 합니다

2. 지도학습 vs 비지도학습 비교

김개발 씨가 팀장님께 물었습니다. "그런데 언제는 정답이 있는 지도학습을 쓰고, 언제는 정답 없는 비지도학습을 써야 하나요?" 팀장님이 웃으며 대답했습니다.

"좋은 질문이네요. 둘의 차이를 정확히 알아야 상황에 맞게 선택할 수 있죠."

지도학습은 정답 라벨이 있는 데이터로 학습해 예측 모델을 만듭니다. 반면 비지도학습은 정답 없이 데이터의 구조나 패턴을 발견합니다.

지도학습은 "이것은 무엇인가?"를 답하고, 비지도학습은 "어떤 그룹들이 있는가?"를 찾아냅니다.

다음 코드를 살펴봅시다.

import numpy as np
from sklearn.tree import DecisionTreeClassifier  # 지도학습
from sklearn.cluster import KMeans  # 비지도학습

# 같은 데이터를 두 가지 방식으로 분석
data = np.array([[1, 2], [1.5, 1.8], [5, 8], [8, 8], [1, 0.6], [9, 11]])

# 지도학습: 정답 라벨이 필요함
labels = np.array([0, 0, 1, 1, 0, 1])  # 정답을 직접 제공
supervised_model = DecisionTreeClassifier()
supervised_model.fit(data, labels)  # 정답으로 학습

# 비지도학습: 정답 라벨 없이 패턴 찾기
unsupervised_model = KMeans(n_clusters=2, random_state=42)
discovered_groups = unsupervised_model.fit_predict(data)  # 스스로 그룹 발견

print(f"지도학습 예측: {supervised_model.predict([[2, 2]])}")
print(f"비지도학습 발견: {discovered_groups}")

김개발 씨는 두 가지 학습 방법의 차이가 궁금했습니다. 둘 다 머신러닝인데 뭐가 다를까요?

언제 어떤 걸 써야 할까요? 박시니어 씨가 화이트보드에 그림을 그리며 설명하기 시작했습니다.

"지도학습과 비지도학습의 차이는 선생님 유무예요." 지도학습은 마치 선생님이 있는 학교 수업과 같습니다. 선생님이 문제를 내고 정답을 알려줍니다.

"이 이미지는 고양이입니다", "이 메일은 스팸입니다"처럼 명확한 답을 제시하죠. 학생은 이런 예제를 반복해서 보면서 패턴을 익힙니다.

그러다 보면 새로운 문제가 나와도 "아, 이건 고양이 같은데?" 하고 예측할 수 있게 됩니다. 반면 비지도학습은 선생님 없이 혼자 도서관에서 공부하는 것과 같습니다.

아무도 정답을 알려주지 않습니다. 대신 책들을 쭉 펼쳐놓고 관찰합니다.

"이 책들은 표지 색깔이 비슷하네", "저 책들은 두께가 비슷하네" 하고 스스로 공통점을 찾아냅니다. 누가 가르쳐주지 않았지만 나름대로 책을 분류할 수 있게 되는 것이죠.

그렇다면 언제 어떤 방법을 써야 할까요? 지도학습은 명확한 예측이 필요할 때 사용합니다.

예를 들어 신용카드 거래가 정상인지 사기인지 판별해야 한다면 지도학습이 적합합니다. 과거 데이터에 "정상", "사기" 라벨을 붙여서 학습시킨 뒤, 새로운 거래를 정확히 분류하는 것이죠.

목표가 분명하고 정답 데이터가 충분히 있다면 지도학습이 강력합니다. 비지도학습은 탐색과 발견이 목적일 때 사용합니다.

예를 들어 "우리 고객들에게 어떤 그룹이 있을까?"처럼 아직 답을 모를 때 유용합니다. 정답 라벨을 만들기 어렵거나 비용이 많이 들 때도 비지도학습을 씁니다.

수백만 개 데이터에 일일이 라벨을 붙이는 건 현실적으로 불가능하니까요. 위의 코드를 살펴보면 차이가 명확합니다.

지도학습 부분에서는 labels라는 정답 배열을 직접 준비했습니다. "이 데이터는 0번 그룹, 저 데이터는 1번 그룹"이라고 사람이 미리 정의한 것이죠.

fit 메서드로 학습할 때 데이터와 정답을 함께 넘겨줍니다. 모델은 이 정답을 기준으로 패턴을 익힙니다.

반면 비지도학습 부분에서는 정답 라벨이 전혀 없습니다. fit_predict에 데이터만 넘겨주면 알고리즘이 스스로 "이 데이터들은 서로 가깝네, 같은 그룹으로 묶자" 하고 판단합니다.

사람이 개입하지 않고 데이터 자체의 특성만으로 그룹을 나눕니다. 실제 프로젝트에서는 어떻게 선택할까요?

이커머스 회사에서 고객 이탈 예측 시스템을 만든다고 가정해봅시다. 과거 데이터를 보면 어떤 고객은 이탈했고 어떤 고객은 계속 이용 중입니다.

이런 정답 라벨이 있으므로 지도학습으로 "이 고객은 이탈할 확률이 80%입니다"라고 예측할 수 있습니다. 하지만 같은 회사에서 신규 시장 진출을 위해 고객 세그먼트를 파악하고 싶다면 어떨까요?

아직 어떤 그룹이 있는지 모릅니다. 이럴 때는 비지도학습으로 "10대 학생 그룹", "3040 직장인 그룹", "시니어 그룹" 같은 자연스러운 세그먼트를 자동으로 발견할 수 있습니다.

주의할 점이 있습니다. 초보자들은 "비지도학습이 정답이 필요 없으니까 더 쉽다"고 생각하기 쉽습니다.

하지만 실제로는 결과 해석이 더 어렵습니다. 지도학습은 정확도나 에러율처럼 명확한 평가 지표가 있습니다.

반면 비지도학습은 "이 그룹이 실제로 의미 있나?" 하는 질문에 답하기가 쉽지 않습니다. 또 다른 함정은 두 방법을 혼동하는 것입니다.

"데이터가 별로 없으니까 비지도학습을 쓰자"는 잘못된 생각입니다. 데이터가 적으면 어떤 방법을 쓰든 좋은 결과를 얻기 어렵습니다.

방법 선택의 기준은 데이터 양이 아니라 목적정답 라벨 유무입니다. 다시 김개발 씨의 이야기로 돌아갑니다.

박시니어 씨의 설명을 들은 김개발 씨는 명확히 이해했습니다. "예측이 목적이면 지도학습, 탐색이 목적이면 비지도학습이군요!" 두 방법의 차이를 제대로 이해하면 프로젝트 상황에 맞는 올바른 선택을 할 수 있습니다.

여러분도 다음 프로젝트에서 "내 목적이 뭐지?"를 먼저 생각해보세요.

실전 팁

💡 - 목적이 명확한 예측이면 지도학습, 데이터 탐색과 패턴 발견이면 비지도학습을 선택하세요

  • 정답 라벨 만들기가 너무 비싸거나 어려우면 비지도학습으로 시작해보는 것도 좋습니다
  • 두 방법을 조합해서 쓸 수도 있습니다. 비지도학습으로 그룹을 찾은 뒤 지도학습으로 분류하는 식이죠

3. 클러스터링 개념

김개발 씨가 비지도학습 자료를 찾아보다가 "클러스터링"이라는 단어를 계속 만났습니다. "비지도학습 = 클러스터링인가?" 궁금해진 김개발 씨가 박시니어 씨에게 물었습니다.

"클러스터링이 정확히 뭔가요?"

클러스터링은 비슷한 데이터끼리 그룹(클러스터)으로 묶는 비지도학습 기법입니다. 마치 비슷한 색깔의 구슬을 같은 바구니에 모으는 것과 같습니다.

같은 그룹 내 데이터는 서로 유사하고, 다른 그룹 데이터와는 차이가 큽니다.

다음 코드를 살펴봅시다.

from sklearn.cluster import KMeans
import numpy as np

# 학생들의 [공부시간, 성적] 데이터
students = np.array([
    [2, 60], [2.5, 65], [3, 70],        # 클러스터 1: 보통 학생
    [8, 95], [8.5, 98], [9, 100],       # 클러스터 2: 우수 학생
    [0.5, 30], [1, 35], [1.5, 40]       # 클러스터 3: 저조 학생
])

# 3개 그룹으로 클러스터링
kmeans = KMeans(n_clusters=3, random_state=42)
clusters = kmeans.fit_predict(students)

# 각 클러스터의 중심점 확인
print(f"클러스터 배정: {clusters}")
print(f"클러스터 중심: {kmeans.cluster_centers_}")

박시니어 씨가 웃으며 대답했습니다. "클러스터링은 비지도학습의 가장 대표적인 방법이에요.

비지도학습이 큰 범주라면, 클러스터링은 그 안의 주요 기법이죠." 클러스터링이란 정확히 무엇일까요? 쉽게 비유하자면, 클러스터링은 마치 장난감 정리와 같습니다.

방바닥에 레고, 인형, 자동차 장난감이 뒤섞여 있다고 상상해보세요. 아무도 "이건 레고 바구니, 저건 인형 바구니"라고 알려주지 않았습니다.

하지만 어린아이도 비슷한 것끼리 모을 수 있습니다. 블록은 블록끼리, 인형은 인형끼리 자연스럽게 모이죠.

이처럼 클러스터링도 비슷한 특성을 가진 데이터를 자동으로 묶어줍니다. 클러스터링이 필요한 이유는 무엇일까요?

실제 데이터는 엄청나게 많고 복잡합니다. 쇼핑몰 고객이 백만 명이라면 사람이 일일이 "이 고객은 A타입, 저 고객은 B타입" 하고 분류할 수 없습니다.

시간도 오래 걸리고, 사람마다 기준이 달라서 일관성이 없습니다. 더 큰 문제는 우리가 예상하지 못한 새로운 타입의 고객이 있을 수 있다는 점입니다.

바로 이런 문제를 해결하기 위해 클러스터링이 등장했습니다. 클러스터링을 사용하면 대량의 데이터를 빠르게 그룹화할 수 있습니다.

또한 사람의 편견 없이 객관적인 기준으로 묶어줍니다. 무엇보다 숨겨진 패턴을 발견할 수 있다는 큰 이점이 있습니다.

"아, 주말 저녁에만 쇼핑하는 특이한 고객 그룹이 있었구나!" 같은 인사이트를 얻는 것이죠. 위의 코드를 한 줄씩 살펴보겠습니다.

먼저 학생 데이터를 준비했습니다. 공부시간과 성적이라는 두 가지 특징이 있습니다.

눈으로 보면 대충 세 그룹으로 나뉘는 것 같지만, 컴퓨터는 자동으로 찾아내야 합니다. KMeans 알고리즘에 n_clusters=3으로 3개 그룹을 만들라고 지시합니다.

fit_predict가 실행되면 각 학생이 어느 클러스터에 속하는지 자동으로 배정됩니다. 결과를 보면 cluster_centers_에 각 그룹의 중심점이 저장됩니다.

예를 들어 "우수 학생 그룹의 중심은 공부시간 8.5시간, 성적 97점 정도"처럼 각 그룹의 대표 특성을 알 수 있습니다. 실제 현업에서는 어떻게 활용할까요?

예를 들어 음악 스트리밍 서비스를 운영한다고 가정해봅시다. 수백만 곡을 사용자 취향에 맞게 추천하고 싶습니다.

클러스터링을 사용하면 "발라드를 주로 듣는 그룹", "힙합을 선호하는 그룹", "클래식 애호가 그룹"처럼 자동으로 사용자를 분류할 수 있습니다. 그러면 각 그룹에 맞는 추천을 효율적으로 할 수 있죠.

마케팅 분야에서도 많이 씁니다. 고객을 RFM(최근성, 빈도, 금액) 기준으로 클러스터링하면 "충성 고객", "이탈 위험 고객", "잠재 고객" 같은 세그먼트가 자동으로 만들어집니다.

각 세그먼트에 맞는 마케팅 전략을 세울 수 있습니다. 주의할 점도 있습니다.

초보 개발자들이 흔히 하는 실수 중 하나는 클러스터 개수를 임의로 정하는 것입니다. "음...

3개 정도면 되겠지?" 하고 감으로 정하면 안 됩니다. 실제로 데이터에 5개 자연스러운 그룹이 있는데 3개로 강제로 나누면 의미가 왜곡됩니다.

Elbow Method나 Silhouette Score 같은 방법으로 적절한 클러스터 개수를 찾아야 합니다. 또 다른 함정은 모든 특성을 동일하게 취급하는 것입니다.

예를 들어 [나이, 연봉] 데이터에서 나이는 2060 범위지만 연봉은 2000만1억 범위입니다. 이대로 클러스터링하면 연봉의 영향이 압도적으로 커집니다.

따라서 스케일링을 통해 모든 특성을 비슷한 범위로 맞춰야 합니다. 클러스터링 결과는 항상 검증이 필요합니다.

알고리즘이 자동으로 만든 그룹이 실제로 의미 있는지, 비즈니스 관점에서 활용 가능한지 확인해야 합니다. "컴퓨터가 만든 그룹이니까 맞겠지" 하고 무조건 신뢰하면 위험합니다.

다시 김개발 씨의 이야기로 돌아가 봅시다. 박시니어 씨의 설명을 들은 김개발 씨는 고개를 끄덕였습니다.

"아, 클러스터링은 비슷한 것끼리 자동으로 묶어주는 거군요! 그런데 어떻게 비슷함을 판단하나요?" 박시니어 씨가 웃었습니다.

"좋은 질문이네요. 보통은 거리로 측정해요.

가까이 있는 데이터일수록 비슷하다고 보는 거죠. 다음에 그 얘기도 해줄게요." 클러스터링을 제대로 이해하면 대량의 데이터에서 자연스러운 그룹을 자동으로 찾아낼 수 있습니다.

여러분도 오늘 배운 내용을 실제 프로젝트에 적용해 보세요.

실전 팁

💡 - Elbow Method나 Silhouette Score로 적절한 클러스터 개수를 먼저 찾으세요

  • 클러스터링 전에 반드시 데이터 스케일링(StandardScaler 등)을 적용하세요
  • 결과는 시각화(산점도 등)로 확인하고 도메인 전문가와 함께 해석하세요

4. 클러스터링 활용 사례

김개발 씨가 클러스터링을 공부하다가 문득 궁금해졌습니다. "이론은 알겠는데, 실제로 어디에 쓰이는 거지?" 마침 옆 팀에서 클러스터링으로 큰 성과를 냈다는 소식을 들었습니다.

실제 사례가 궁금해진 김개발 씨는 박시니어 씨를 찾아갔습니다.

클러스터링은 고객 세그먼트 분석, 이상 탐지, 추천 시스템, 이미지 압축 등 다양한 분야에서 활용됩니다. 비슷한 특성을 가진 데이터를 자동으로 묶어주는 특성 덕분에 실무에서 매우 유용합니다.

정답 라벨 없이도 데이터의 구조를 파악할 수 있어 탐색적 분석에도 자주 쓰입니다.

다음 코드를 살펴봅시다.

from sklearn.cluster import KMeans
import numpy as np

# 실무 사례 1: 고객 세그먼트 분석
# [구매금액, 구매빈도, 최근성(일)] 데이터
customers = np.array([
    [10000, 1, 90],    # 저가 비활성 고객
    [500000, 20, 5],   # 고가 VIP 고객
    [150000, 8, 15],   # 중가 활성 고객
    [8000, 2, 120],    # 저가 비활성 고객
    [480000, 18, 7],   # 고가 VIP 고객
])

# 3개 세그먼트로 자동 분류
kmeans = KMeans(n_clusters=3, random_state=42)
segments = kmeans.fit_predict(customers)

print(f"고객 세그먼트: {segments}")
# 각 세그먼트별 맞춤 마케팅 전략 수립 가능

박시니어 씨가 자리에 앉으며 말했습니다. "클러스터링은 정말 다양하게 쓰여요.

옆 팀이 한 프로젝트를 예로 들어볼게요." 가장 대표적인 활용 사례는 고객 세그먼트 분석입니다. 이커머스 회사에서 고객 수십만 명을 관리한다고 상상해보세요.

모든 고객에게 똑같은 마케팅을 하면 효율이 떨어집니다. VIP 고객에게 10% 할인 쿠폰을 보내봤자 큰 효과가 없고, 신규 고객에게 복잡한 멤버십 안내를 보내면 오히려 혼란스러워합니다.

클러스터링을 사용하면 자동으로 "고가 구매 VIP", "가성비 추구 고객", "이탈 위험 고객" 같은 세그먼트가 만들어집니다. 각 세그먼트에 맞는 맞춤형 전략을 쓸 수 있죠.

VIP에게는 프리미엄 신제품 안내를, 이탈 위험 고객에게는 재구매 유도 쿠폰을 보내는 식입니다. 두 번째 활용 사례는 이상 탐지입니다.

금융회사에서 신용카드 사기 거래를 찾아내야 한다고 가정해봅시다. 대부분의 거래는 정상이고, 사기는 극소수입니다.

클러스터링으로 정상 거래 패턴을 학습하면, 어떤 거래가 정상 클러스터에서 멀리 떨어져 있을 때 "이상하다"고 판단할 수 있습니다. 제조업에서도 씁니다.

센서 데이터를 클러스터링하면 정상 작동 패턴이 클러스터로 형성됩니다. 갑자기 어떤 데이터가 기존 클러스터에서 벗어나면 "기계에 문제가 생겼다"고 조기 경보를 보낼 수 있습니다.

세 번째는 추천 시스템에서의 활용입니다. 넷플릭스나 유튜브 같은 서비스를 생각해보세요.

사용자 수백만 명의 시청 패턴을 클러스터링하면 "로맨스 좋아하는 그룹", "다큐멘터리 애호가 그룹" 같은 취향 그룹이 자동으로 만들어집니다. 같은 클러스터에 속한 사용자들은 비슷한 취향을 가지므로, 한 사람이 좋아한 콘텐츠를 같은 그룹의 다른 사람에게 추천할 수 있습니다.

네 번째는 이미지 압축입니다. 사진을 저장할 때 용량을 줄이고 싶다면 어떻게 할까요?

사진의 픽셀들을 색상 기준으로 클러스터링합니다. 예를 들어 수천 가지 색상을 16가지 대표 색상으로 줄이는 겁니다.

각 픽셀은 가장 가까운 대표 색상으로 치환됩니다. 화질은 약간 떨어지지만 파일 크기가 크게 줄어듭니다.

다섯 번째는 문서 분류입니다. 뉴스 기사 수천 건을 자동으로 분류하고 싶다고 가정해봅시다.

기사 내용을 수치화(벡터화)한 뒤 클러스터링하면 "정치 기사", "스포츠 기사", "경제 기사" 같은 주제별 그룹이 자동으로 형성됩니다. 사람이 일일이 라벨을 붙이지 않아도 되니까 효율적이죠.

위의 코드는 실제 고객 세그먼트 분석을 단순화한 예제입니다. RFM 분석(Recency, Frequency, Monetary)이라는 유명한 마케팅 기법을 클러스터링으로 자동화한 것입니다.

최근성(얼마나 최근에 구매했나), 빈도(얼마나 자주 구매하나), 금액(얼마나 많이 지출하나)을 기준으로 고객을 자동 분류합니다. 실무에서 이런 분석을 하면 정말 유용합니다.

"지난달에는 VIP 고객이 100명이었는데 이번 달은 80명으로 줄었네. 무슨 문제가 있나?" 같은 인사이트를 빠르게 얻을 수 있습니다.

주의할 점이 있습니다. 클러스터링 결과를 맹신하면 안 됩니다.

알고리즘이 만든 그룹이 비즈니스적으로 의미 없을 수도 있습니다. 예를 들어 "화요일 오후 2시에만 쇼핑하는 고객 그룹"이 발견됐다고 해서 그게 마케팅에 유용한 정보는 아닐 수 있습니다.

항상 도메인 지식으로 검증해야 합니다. 또 다른 함정은 클러스터 개수를 잘못 정하는 것입니다.

너무 많이 나누면 "1명짜리 그룹"이 수십 개 생기고, 너무 적게 나누면 "모든 고객을 2개 그룹으로 나눔"처럼 너무 단순해집니다. 비즈니스 목적과 데이터 특성을 고려해 적절한 개수를 찾아야 합니다.

다시 김개발 씨의 이야기로 돌아갑니다. 박시니어 씨의 설명을 들은 김개발 씨는 눈이 반짝였습니다.

"와, 클러스터링이 이렇게 많은 곳에 쓰이는군요! 우리 프로젝트에도 적용해볼 수 있을 것 같아요." 클러스터링의 다양한 활용 사례를 알면 여러분의 프로젝트에도 창의적으로 적용할 수 있습니다.

여러분도 오늘 배운 내용을 실제 업무에 활용해 보세요.

실전 팁

💡 - 고객 분석 시 RFM 외에도 행동 패턴(방문 시간대, 선호 카테고리 등)을 추가하면 더 세밀한 세그먼트를 만들 수 있습니다

  • 이상 탐지에는 DBSCAN 같은 밀도 기반 알고리즘이 KMeans보다 효과적일 수 있습니다
  • 클러스터링 결과는 반드시 시각화하고 비즈니스 팀과 함께 검토하세요

5. 차원 축소 소개

김개발 씨가 데이터를 다루다가 막막한 순간을 맞았습니다. 고객 정보가 100가지 항목이나 되는데 시각화도 어렵고 분석도 느렸습니다.

"이걸 어떻게 다루지?" 고민하던 중 박시니어 씨가 "차원 축소를 써보세요"라고 조언했습니다.

차원 축소는 많은 특성(변수)을 가진 데이터를 적은 특성으로 압축하는 비지도학습 기법입니다. 마치 두꺼운 책을 핵심만 추린 요약본으로 만드는 것과 같습니다.

중요한 정보는 최대한 유지하면서 불필요한 부분을 제거해 데이터를 단순화합니다.

다음 코드를 살펴봅시다.

from sklearn.decomposition import PCA
import numpy as np

# 학생 데이터: 5개 과목 점수 (5차원)
students = np.array([
    [90, 85, 88, 92, 87],  # 전체적으로 우수
    [60, 55, 62, 58, 61],  # 전체적으로 보통
    [95, 92, 94, 96, 93],  # 전체적으로 최우수
    [45, 50, 48, 52, 49],  # 전체적으로 저조
])

# PCA로 5차원을 2차원으로 축소
pca = PCA(n_components=2)
students_2d = pca.fit_transform(students)

print(f"원본 데이터 크기: {students.shape}")  # (4, 5)
print(f"축소된 데이터: {students_2d.shape}")  # (4, 2)
print(f"보존된 정보량: {pca.explained_variance_ratio_.sum():.2%}")

박시니어 씨가 화이트보드에 그림을 그리며 설명하기 시작했습니다. "차원 축소는 복잡한 데이터를 간단하게 만드는 기술이에요." 차원 축소란 정확히 무엇일까요?

쉽게 비유하자면, 차원 축소는 마치 두꺼운 백과사전을 얇은 요약본으로 만드는 것과 같습니다. 원래 책에는 수천 페이지가 있지만, 핵심만 추리면 100페이지로도 충분히 전달할 수 있습니다.

물론 디테일은 좀 사라지지만, 중요한 내용은 거의 다 담겨 있죠. 이처럼 차원 축소도 데이터의 핵심 패턴은 유지하면서 복잡도를 줄여줍니다.

차원이란 무엇일까요? 데이터 과학에서 차원은 변수나 특성의 개수를 의미합니다.

예를 들어 사람을 [키, 몸무게]로 표현하면 2차원, [키, 몸무게, 나이, 소득, 학력]으로 표현하면 5차원입니다. 차원이 많을수록 정보는 풍부하지만, 분석하기 어렵고 시각화도 불가능해집니다.

사람은 3차원까지만 볼 수 있으니까요. 차원 축소가 필요한 이유는 무엇일까요?

실무에서는 수백, 수천 개의 특성을 가진 데이터를 자주 만납니다. 예를 들어 유전자 데이터는 2만 개 이상의 유전자를 특성으로 가집니다.

이렇게 많은 차원은 여러 문제를 일으킵니다. 첫째, 시각화가 불가능합니다.

그래프로 그릴 수 없으니 패턴을 파악하기 어렵습니다. 둘째, 계산이 느려집니다.

차원이 많을수록 머신러닝 알고리즘이 처리해야 할 계산량이 기하급수적으로 증가합니다. 셋째, 과적합이 발생하기 쉽습니다.

불필요한 특성이 많으면 모델이 노이즈까지 학습해버려 성능이 떨어집니다. 바로 이런 문제를 해결하기 위해 차원 축소가 등장했습니다.

차원 축소를 사용하면 시각화가 가능해집니다. 100차원 데이터를 2차원으로 줄이면 산점도로 그릴 수 있습니다.

또한 속도가 빨라집니다. 특성이 적을수록 계산이 빠르니까요.

무엇보다 노이즈 제거 효과가 있습니다. 중요하지 않은 특성을 제거하면 모델 성능이 오히려 좋아지는 경우가 많습니다.

위의 코드를 한 줄씩 살펴보겠습니다. 학생 데이터가 5개 과목 점수로 표현되어 있습니다.

즉 5차원입니다. 눈으로 보면 "전체적으로 잘하는 학생", "전체적으로 못하는 학생"처럼 하나의 경향으로 요약할 수 있을 것 같습니다.

PCA(주성분 분석)는 가장 유명한 차원 축소 알고리즘입니다. n_components=2로 2차원으로 축소하라고 지시합니다.

결과를 보면 (4, 5) 크기가 (4, 2)로 줄어들었습니다. 5개 과목 점수가 2개 숫자로 요약된 것이죠.

explained_variance_ratio_를 보면 "원본 정보의 몇 퍼센트를 보존했는가"를 알 수 있습니다. 보통 90% 이상이면 충분히 좋은 압축입니다.

실제 현업에서는 어떻게 활용할까요? 예를 들어 고객 설문조사에서 100개 질문을 했다고 가정해봅시다.

모든 질문을 다 분석하기는 어렵습니다. 차원 축소를 사용하면 "가격 민감도", "품질 중시도", "브랜드 선호도" 같은 몇 가지 핵심 요인으로 요약할 수 있습니다.

이렇게 압축된 정보로 고객을 이해하고 전략을 세울 수 있습니다. 이미지 처리에서도 씁니다.

고해상도 사진은 수백만 픽셀로 이루어져 있습니다. 이걸 그대로 처리하면 너무 느립니다.

차원 축소로 핵심 특징만 추출하면 훨씬 빠르게 처리할 수 있습니다. 주의할 점도 있습니다.

초보자들이 흔히 하는 실수 중 하나는 무조건 많이 줄이는 것입니다. "100차원을 1차원으로 줄이면 더 좋겠지?" 이렇게 생각하면 안 됩니다.

너무 많이 줄이면 중요한 정보까지 손실됩니다. explained_variance_ratio_를 확인해서 적어도 80~90% 정보는 보존하는 게 좋습니다.

또 다른 함정은 차원 축소 후의 특성이 해석 불가능하다는 점입니다. 원래는 "나이", "소득" 같은 의미 있는 변수였지만, 축소 후에는 "주성분 1", "주성분 2"처럼 추상적인 이름이 붙습니다.

이게 정확히 뭘 의미하는지 알기 어렵습니다. 그래서 설명 가능성이 중요한 분야에서는 차원 축소를 조심스럽게 써야 합니다.

다시 김개발 씨의 이야기로 돌아가 봅시다. 박시니어 씨의 설명을 들은 김개발 씨는 고개를 끄덕였습니다.

"아, 복잡한 데이터를 간단하게 만들어서 다루기 쉽게 하는 거군요!" 차원 축소를 제대로 이해하면 복잡한 고차원 데이터도 효율적으로 다룰 수 있습니다. 여러분도 오늘 배운 내용을 실제 프로젝트에 적용해 보세요.

실전 팁

💡 - PCA 적용 전에 반드시 StandardScaler로 스케일링하세요. 특성 범위가 다르면 결과가 왜곡됩니다

  • explained_variance_ratio_를 확인해 최소 80% 이상 정보를 보존하는 차원을 선택하세요
  • 시각화 목적이면 2~3차원, 성능 개선 목적이면 더 많은 차원을 남겨도 됩니다

6. 비지도학습의 장단점

김개발 씨가 프로젝트 회의에서 "비지도학습으로 해볼까요?"라고 제안했습니다. 팀장님이 물었습니다.

"장점이 뭔데요? 단점은 없나요?" 김개발 씨는 박시니어 씨에게 배운 내용을 떠올리며 정리해서 설명했습니다.

비지도학습의 장점은 정답 라벨 없이 사용 가능하고, 숨겨진 패턴을 발견할 수 있으며, 라벨링 비용이 들지 않는다는 점입니다. 반면 단점은 결과 해석이 어렵고, 평가 지표가 명확하지 않으며, 최적 파라미터 선택이 어렵다는 점입니다.

다음 코드를 살펴봅시다.

from sklearn.cluster import KMeans
from sklearn.metrics import silhouette_score
import numpy as np

# 데이터 준비
data = np.array([[1, 2], [1.5, 1.8], [5, 8], [8, 8], [1, 0.6], [9, 11]])

# 장점: 정답 라벨 없이도 그룹 발견 가능
kmeans = KMeans(n_clusters=2, random_state=42)
labels = kmeans.fit_predict(data)

# 단점: 평가가 어려움. Silhouette Score로 간접 평가
score = silhouette_score(data, labels)
print(f"발견된 그룹: {labels}")
print(f"품질 점수: {score:.3f}")  # -1~1, 높을수록 좋음

# 하지만 이 그룹이 "의미 있는가?"는 사람이 판단해야 함

박시니어 씨가 먼저 장점부터 설명했습니다. "비지도학습의 가장 큰 장점은 정답 라벨이 필요 없다는 거예요." 첫 번째 장점은 라벨링 비용 절감입니다.

실무에서 정답 라벨을 만드는 건 정말 비싸고 힘든 작업입니다. 예를 들어 의료 영상 데이터에 "암", "정상" 라벨을 붙이려면 전문의가 일일이 판독해야 합니다.

시간도 오래 걸리고 비용도 많이 듭니다. 수만 장을 라벨링하려면 몇 달이 걸릴 수도 있죠.

비지도학습을 쓰면 이런 과정이 필요 없습니다. 두 번째 장점은 새로운 패턴 발견입니다.

사람은 편견과 선입견이 있습니다. 고객을 "남성/여성", "2030/4050"처럼 익숙한 기준으로만 나눕니다.

하지만 비지도학습은 사람이 생각하지 못한 새로운 기준을 찾아냅니다. "주말 밤에만 쇼핑하는 2030 남성 그룹"처럼 의외의 세그먼트를 발견해서 새로운 비즈니스 기회를 제공할 수 있습니다.

세 번째 장점은 대량 데이터 처리입니다. 인터넷에는 라벨 없는 데이터가 무궁무진합니다.

소셜미디어 글, 웹페이지, 센서 데이터 등 대부분 정답 라벨이 없습니다. 지도학습으로는 활용할 수 없지만, 비지도학습으로는 이런 데이터에서도 인사이트를 뽑아낼 수 있습니다.

네 번째 장점은 전처리와 시각화에 유용하다는 점입니다. 본격적인 머신러닝 전에 데이터를 이해하는 단계에서 비지도학습이 큰 도움이 됩니다.

차원 축소로 시각화하면 데이터 분포를 한눈에 파악할 수 있습니다. 클러스터링으로 이상치를 찾을 수도 있습니다.

데이터를 깊이 이해하고 나면 더 좋은 모델을 만들 수 있죠. 하지만 단점도 명확합니다.

박시니어 씨가 표정을 진지하게 바꾸며 말했습니다. "단점도 알아야 제대로 쓸 수 있어요." 첫 번째 단점은 결과 해석의 어려움입니다.

클러스터링이 3개 그룹을 만들었다고 합시다. 그런데 이 그룹이 정확히 뭘 의미하는지 알 수 없습니다.

알고리즘은 "이 데이터들이 서로 가깝다"는 것만 알려줄 뿐, "왜 가까운지", "이게 비즈니스적으로 무슨 의미인지"는 사람이 분석해야 합니다. 지도학습처럼 "정확도 95%"처럼 명확하지 않습니다.

두 번째 단점은 평가 지표의 부재입니다. 지도학습은 정확도, 정밀도, 재현율 같은 명확한 평가 지표가 있습니다.

하지만 비지도학습은 "이 클러스터링이 좋은가?"를 판단하기 어렵습니다. Silhouette Score 같은 내부 지표가 있긴 하지만, 이것도 "수학적으로 잘 나뉘었나"만 측정할 뿐 "의미 있게 나뉘었나"는 알 수 없습니다.

세 번째 단점은 파라미터 선택의 어려움입니다. KMeans를 쓸 때 "클러스터 개수를 몇 개로 할까?"를 정해야 합니다.

하지만 정답이 없으니 어떤 게 최적인지 알 수 없습니다. 여러 개를 시도해보고 비즈니스 관점에서 가장 의미 있는 걸 선택해야 하는데, 이게 쉽지 않습니다.

초보자는 특히 헤매기 쉽습니다. 네 번째 단점은 재현성과 안정성 문제입니다.

같은 데이터로 같은 알고리즘을 돌려도 초기값에 따라 결과가 달라질 수 있습니다. KMeans는 랜덤하게 초기 중심점을 선택하므로 실행할 때마다 미묘하게 다른 결과가 나옵니다.

random_state를 고정하면 되긴 하지만, 이것도 "어떤 값이 좋은가?"는 알 수 없습니다. 위의 코드를 보면 이런 문제가 드러납니다.

Silhouette Score로 클러스터링 품질을 측정할 수 있지만, 점수가 0.7이면 좋은 건지 나쁜 건지 절대적 기준이 없습니다. 더 중요한 건, 점수가 높아도 그 그룹이 비즈니스적으로 의미 있는지는 사람이 판단해야 한다는 점입니다.

이게 비지도학습의 본질적인 어려움입니다. 실무에서 어떻게 대응할까요?

비지도학습 결과는 항상 도메인 전문가와 함께 검토해야 합니다. 데이터 과학자가 만든 세그먼트를 마케팅 팀이 보고 "이건 의미 있는 그룹이네", "저건 우연히 만들어진 것 같은데" 하고 판단합니다.

또한 여러 알고리즘과 파라미터를 시도해보고 가장 해석 가능한 결과를 선택합니다. 다시 김개발 씨의 이야기로 돌아갑니다.

팀장님이 고개를 끄덕였습니다. "장단점을 잘 알고 있네요.

그럼 우리 프로젝트에 적용해보되, 결과는 함께 검토하기로 하죠." 비지도학습의 장단점을 제대로 이해하면 언제 쓰고 언제 피해야 할지 판단할 수 있습니다. 여러분도 오늘 배운 내용을 기억하며 현명하게 사용하세요.

실전 팁

💡 - 비지도학습 결과는 항상 시각화하고 도메인 전문가와 함께 해석하세요

  • 여러 클러스터 개수를 시도해보고 Elbow Method로 적절한 개수를 찾으세요
  • 지도학습 전 탐색적 분석 단계로 비지도학습을 활용하면 데이터 이해도가 높아집니다

7. 클러스터링 알고리즘 종류

김개발 씨가 KMeans만 배우다가 문득 궁금해졌습니다. "클러스터링 알고리즘이 KMeans 하나뿐인가?" 검색해보니 DBSCAN, 계층적 클러스터링 등 여러 종류가 있었습니다.

박시니어 씨에게 물었습니다. "이 알고리즘들은 뭐가 다른가요?"

클러스터링 알고리즘은 KMeans, DBSCAN, 계층적 클러스터링 등 여러 종류가 있습니다. 각 알고리즘은 그룹을 나누는 방식과 강점이 다릅니다.

데이터 특성과 목적에 따라 적절한 알고리즘을 선택해야 좋은 결과를 얻을 수 있습니다.

다음 코드를 살펴봅시다.

from sklearn.cluster import KMeans, DBSCAN, AgglomerativeClustering
import numpy as np

# 같은 데이터를 세 가지 알고리즘으로 분석
data = np.array([[1, 2], [1.5, 1.8], [5, 8], [8, 8], [1, 0.6], [9, 11]])

# 1. KMeans: 중심 기반, 클러스터 개수 지정 필요
kmeans = KMeans(n_clusters=2, random_state=42)
labels_kmeans = kmeans.fit_predict(data)

# 2. DBSCAN: 밀도 기반, 클러스터 개수 자동 결정, 이상치 탐지 가능
dbscan = DBSCAN(eps=3, min_samples=2)
labels_dbscan = dbscan.fit_predict(data)

# 3. Agglomerative: 계층적, 트리 구조로 그룹 형성
hierarchical = AgglomerativeClustering(n_clusters=2)
labels_hier = hierarchical.fit_predict(data)

print(f"KMeans: {labels_kmeans}")
print(f"DBSCAN: {labels_dbscan}")  # -1은 이상치
print(f"계층적: {labels_hier}")

박시니어 씨가 화이트보드에 세 가지 다이어그램을 그리며 설명하기 시작했습니다. "클러스터링 알고리즘은 크게 세 가지 계열이 있어요." 첫 번째는 KMeans 계열입니다.

KMeans는 가장 유명하고 널리 쓰이는 알고리즘입니다. 작동 원리는 간단합니다.

먼저 K개의 중심점을 랜덤하게 선택합니다. 각 데이터는 가장 가까운 중심점의 그룹에 배정됩니다.

그다음 각 그룹의 중심을 다시 계산합니다. 이 과정을 반복하면 점점 안정적인 그룹이 형성됩니다.

KMeans의 장점은 빠르고 간단하다는 것입니다. 대량의 데이터도 빠르게 처리합니다.

또한 결과가 직관적입니다. 각 그룹의 중심점이 명확히 나오므로 "이 그룹의 대표 특성은 이거다" 하고 해석하기 쉽습니다.

하지만 단점도 있습니다. 클러스터 개수 K를 미리 정해야 합니다.

또한 구형 클러스터를 가정하므로 복잡한 모양의 그룹은 잘 찾아내지 못합니다. 예를 들어 초승달 모양이나 도넛 모양 그룹은 KMeans로 제대로 분리할 수 없습니다.

두 번째는 DBSCAN 계열입니다. DBSCAN은 "밀도 기반" 알고리즘입니다.

데이터가 빽빽하게 모여 있는 영역을 하나의 클러스터로 봅니다. 작동 원리는 이렇습니다.

각 점 주변에 일정 반경(eps) 안에 최소 개수(min_samples) 이상의 이웃이 있으면 "밀도가 높다"고 판단합니다. 이런 점들을 연결해서 클러스터를 만듭니다.

DBSCAN의 가장 큰 장점은 클러스터 개수를 미리 정하지 않아도 된다는 것입니다. 데이터가 알아서 몇 개 그룹이 있는지 찾아냅니다.

또한 임의 모양의 클러스터를 잘 찾아냅니다. 초승달 모양도, 복잡한 모양도 문제없습니다.

무엇보다 이상치 탐지가 가능합니다. 어떤 클러스터에도 속하지 않는 점은 -1로 표시되어 "이상치"로 분류됩니다.

단점도 있습니다. eps와 min_samples라는 파라미터 튜닝이 까다롭습니다.

데이터마다 적절한 값이 다르므로 여러 번 시도해봐야 합니다. 또한 밀도가 다양한 데이터에서는 성능이 떨어집니다.

어떤 영역은 빽빽하고 어떤 영역은 성긴 데이터에서는 한쪽만 제대로 클러스터링됩니다. 세 번째는 계층적 클러스터링 계열입니다.

계층적 클러스터링은 트리 구조로 그룹을 만듭니다. "상향식"과 "하향식" 두 가지 방법이 있습니다.

상향식은 처음에 모든 점이 각자 클러스터입니다. 가장 가까운 두 클러스터를 합칩니다.

이 과정을 반복하면 점점 큰 클러스터가 만들어지고, 최종적으로 하나로 합쳐집니다. 그 과정을 트리(덴드로그램)로 그릴 수 있습니다.

계층적 클러스터링의 장점은 덴드로그램 시각화입니다. 트리를 보면 어떤 그룹들이 서로 가까운지, 언제 합쳐졌는지 한눈에 파악할 수 있습니다.

또한 클러스터 개수를 나중에 정할 수 있습니다. 트리를 원하는 높이에서 자르면 되니까요.

단점은 속도입니다. 계산 복잡도가 높아서 대량 데이터에는 느립니다.

또한 한 번 합쳐진 클러스터는 다시 분리할 수 없습니다. 초반에 잘못 합쳐지면 나중에 수정이 불가능합니다.

위의 코드를 보면 세 알고리즘의 차이가 드러납니다. KMeans는 n_clusters로 개수를 지정합니다.

DBSCAN은 개수 지정 없이 eps와 min_samples만 설정합니다. 결과에 -1(이상치)이 포함될 수 있습니다.

계층적 클러스터링도 n_clusters를 지정하지만, 나중에 덴드로그램을 보고 바꿀 수 있습니다. 실무에서 어떻게 선택할까요?

대량 데이터에 빠르게 적용하고 싶으면 KMeans를 쓰세요. 결과도 해석하기 쉽습니다.

복잡한 모양의 그룹이 있거나 이상치를 찾아야 한다면 DBSCAN이 좋습니다. 그룹 간 관계를 시각적으로 파악하고 싶으면 계층적 클러스터링을 추천합니다.

때로는 여러 알고리즘을 함께 써보고 비교하는 게 좋습니다. 같은 데이터를 KMeans와 DBSCAN으로 각각 분석해보면 어떤 게 더 의미 있는 결과를 주는지 알 수 있습니다.

주의할 점이 있습니다. "최고의 알고리즘"은 없습니다.

데이터 특성과 목적에 따라 적합한 알고리즘이 다릅니다. 고객 세그먼트 분석처럼 명확히 K개 그룹으로 나누고 싶으면 KMeans가 좋습니다.

제조 센서 데이터에서 비정상 패턴을 찾으려면 DBSCAN이 적합합니다. 생물학 연구에서 종의 계통을 분석하려면 계층적 클러스터링이 유용합니다.

또 다른 고급 알고리즘도 있습니다. Gaussian Mixture Model(GMM)은 확률 기반으로 소프트 클러스터링을 합니다.

Spectral Clustering은 그래프 이론을 활용해 복잡한 구조를 찾습니다. 하지만 초보자는 먼저 KMeans, DBSCAN, 계층적 클러스터링 세 가지를 확실히 익히는 게 좋습니다.

다시 김개발 씨의 이야기로 돌아갑니다. 박시니어 씨의 설명을 들은 김개발 씨는 눈이 밝아졌습니다.

"아, 상황에 맞게 알고리즘을 선택해야 하는 거군요! 우리 프로젝트 데이터에는 어떤 게 좋을까요?" 클러스터링 알고리즘의 종류와 특징을 알면 데이터에 맞는 최적의 방법을 선택할 수 있습니다.

여러분도 오늘 배운 내용을 기억하며 프로젝트에 적용해 보세요.

실전 팁

💡 - 먼저 KMeans로 빠르게 시도해보고, 결과가 만족스럽지 않으면 다른 알고리즘을 시도하세요

  • DBSCAN 사용 시 eps는 가까운 점들 사이 거리를 히스토그램으로 그려서 결정하면 좋습니다
  • 계층적 클러스터링의 덴드로그램은 matplotlib으로 시각화하여 최적 클러스터 개수를 결정하세요

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

#Python#비지도학습#클러스터링#차원축소#머신러닝

댓글 (0)

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