본문으로 건너뛰기

016 분류 문제의 이해

키워드: 분류, 개념

개요

분류(Classification)는 입력 데이터를 미리 정의된 카테고리 중 하나로 할당하는 지도 학습 문제입니다. 이 글에서는 분류 문제의 유형과 핵심 개념을 알아봅니다.

실습 환경

  • Python 버전: 3.11 권장
  • 필요 패키지: pycaret[full]>=3.0

분류 vs 회귀

구분분류회귀
타겟 유형범주형 (카테고리)수치형 (연속값)
출력 예시"스팸/정상", "고양이/개"25.5, 1000000
평가 지표Accuracy, F1, AUCMAE, RMSE, R²

분류 문제 유형

1. 이진 분류 (Binary Classification)

두 개의 클래스 중 하나를 예측

from pycaret.classification import *
from pycaret.datasets import get_data

# 016 타이타닉: 생존(1) vs 사망(0)
data = get_data('titanic')
print(data['Survived'].unique()) # [0, 1]

예시:

  • 스팸 메일 분류 (스팸/정상)
  • 질병 진단 (양성/음성)
  • 고객 이탈 예측 (이탈/유지)

2. 다중 분류 (Multiclass Classification)

세 개 이상의 클래스 중 하나를 예측

# 016 붓꽃: setosa, versicolor, virginica
data = get_data('iris')
print(data['species'].unique()) # 3개 클래스

예시:

  • 손글씨 숫자 인식 (0~9)
  • 뉴스 카테고리 분류 (정치/경제/스포츠/...)
  • 제품 등급 분류 (A/B/C)

3. 다중 레이블 분류 (Multilabel Classification)

하나의 샘플이 여러 클래스에 동시에 속할 수 있음

예시:

  • 영화 장르 분류 (액션+SF+스릴러)
  • 이미지 태깅 (하늘+구름+건물)

분류의 핵심 개념

클래스 (Class)

예측할 카테고리. 레이블(Label)이라고도 함.

특성 (Feature)

예측에 사용되는 입력 변수.

결정 경계 (Decision Boundary)

클래스를 구분하는 경계선. 알고리즘마다 다른 형태.

# 016 PyCaret 시각화
clf = setup(data, target='species', session_id=42, verbose=False)
model = create_model('lr', verbose=False)
plot_model(model, plot='boundary')

확률적 예측

대부분의 분류 모델은 확률을 출력:

predictions = predict_model(model)
print(predictions[['prediction_label', 'prediction_score']])
# 016 prediction_label: 예측 클래스
# 016 prediction_score: 해당 클래스 확률

불균형 데이터

클래스 비율이 불균형한 경우 주의 필요:

# 016 예: 사기 거래 탐지 (사기 0.1%, 정상 99.9%)
data = get_data('credit')
print(data['default'].value_counts(normalize=True))

해결 방법:

  • fix_imbalance=True 옵션
  • 적절한 평가 지표 선택 (F1, AUC)

분류 알고리즘 선택

데이터 특성권장 알고리즘
선형 분리 가능Logistic Regression, SVM
비선형 관계Random Forest, XGBoost
고차원 데이터Naive Bayes, SVM
해석력 중요Decision Tree, Logistic

정리

  • 분류는 카테고리 예측 문제
  • 이진/다중/다중레이블 분류로 구분
  • 불균형 데이터에 주의
  • PyCaret의 compare_models()로 최적 알고리즘 탐색

다음 글 예고

다음 글에서는 이진 분류 - 타이타닉 생존 예측 프로젝트를 다룹니다.


PyCaret 머신러닝 마스터 시리즈 #016