016 분류 문제의 이해
키워드: 분류, 개념
개요
분류(Classification)는 입력 데이터를 미리 정의된 카테고리 중 하나로 할당하는 지도 학습 문제입니다. 이 글에서는 분류 문제의 유형과 핵심 개념을 알아봅니다.
실습 환경
- Python 버전: 3.11 권장
- 필요 패키지:
pycaret[full]>=3.0
분류 vs 회귀
| 구분 | 분류 | 회귀 |
|---|---|---|
| 타겟 유형 | 범주형 (카테고리) | 수치형 (연속값) |
| 출력 예시 | "스팸/정상", "고양이/개" | 25.5, 1000000 |
| 평가 지표 | Accuracy, F1, AUC | MAE, 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