본문으로 건너뛰기

016 분류 문제의 이해

키워드: 분류, 개념

개요

분류(Classification)는 머신러닝에서 가장 흔한 문제 유형 중 하나입니다. 주어진 데이터를 미리 정의된 클래스(범주) 중 하나로 분류하는 것이 목표입니다.

이 글에서는 분류 문제의 개념, 종류, 그리고 FLAML에서 분류 문제를 다루는 방법을 알아봅니다.

실습 환경

  • Python 버전: 3.11 권장
  • 필요 패키지: flaml[automl], pandas, scikit-learn
pip install flaml[automl] pandas scikit-learn matplotlib

분류란?

정의

분류는 입력 데이터(특성)를 기반으로 미리 정의된 클래스 중 하나를 예측하는 문제입니다.

입력(특성) → 분류 모델 → 출력(클래스)

분류 vs 회귀

구분분류회귀
출력범주형 (클래스)연속형 (숫자)
예시스팸/정상주택 가격
평가정확도, F1MSE, R²

분류의 종류

1. 이진 분류 (Binary Classification)

두 개의 클래스 중 하나를 예측합니다.

예시:

  • 스팸 메일 탐지: 스팸 / 정상
  • 질병 진단: 양성 / 음성
  • 고객 이탈: 이탈 / 유지
  • 사기 탐지: 사기 / 정상
# 016 이진 분류 예시
y = [0, 1, 0, 1, 1, 0] # 0: 클래스 A, 1: 클래스 B

2. 다중 분류 (Multiclass Classification)

세 개 이상의 클래스 중 하나를 예측합니다.

예시:

  • 붓꽃 품종: setosa / versicolor / virginica
  • 숫자 인식: 0~9 (10개 클래스)
  • 감정 분석: 긍정 / 부정 / 중립
  • 제품 카테고리: 의류 / 전자제품 / 식품 / ...
# 016 다중 분류 예시
y = [0, 1, 2, 0, 2, 1] # 0, 1, 2: 세 개의 클래스

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

하나의 샘플이 여러 클래스에 동시에 속할 수 있습니다.

예시:

  • 영화 장르: [액션, SF], [로맨스, 코미디, 드라마]
  • 기사 태그: [정치, 경제], [스포츠, 건강]
# 016 다중 레이블 예시
y = [[1, 0, 1], [0, 1, 1], [1, 1, 0]] # 각 샘플이 여러 레이블 가질 수 있음

FLAML에서 분류 설정

기본 분류 설정

from flaml import AutoML

automl = AutoML()
automl.fit(
X_train, y_train,
task="classification", # 분류 태스크
time_budget=60,
metric="accuracy"
)

이진 분류 vs 다중 분류

FLAML은 타겟의 고유값 개수를 자동으로 감지합니다:

  • 고유값 2개 → 이진 분류
  • 고유값 3개 이상 → 다중 분류
import numpy as np

# 016 타겟 확인
print(f"클래스 개수: {len(np.unique(y_train))}")
print(f"클래스 목록: {np.unique(y_train)}")

분류 예제: 이진 분류

from flaml import AutoML
from sklearn.datasets import load_breast_cancer
from sklearn.model_selection import train_test_split
from sklearn.metrics import accuracy_score

# 016 데이터 로드 (이진 분류: 악성/양성)
X, y = load_breast_cancer(return_X_y=True)
print(f"클래스: {np.unique(y)}") # [0, 1]

# 016 분할
X_train, X_test, y_train, y_test = train_test_split(
X, y, test_size=0.2, random_state=42
)

# 016 FLAML 학습
automl = AutoML()
automl.fit(
X_train, y_train,
task="classification",
time_budget=30,
metric="accuracy",
verbose=0
)

# 016 평가
y_pred = automl.predict(X_test)
print(f"정확도: {accuracy_score(y_test, y_pred):.4f}")

분류 예제: 다중 분류

from sklearn.datasets import load_iris

# 016 데이터 로드 (다중 분류: 3개 품종)
X, y = load_iris(return_X_y=True)
print(f"클래스: {np.unique(y)}") # [0, 1, 2]

# 016 분할
X_train, X_test, y_train, y_test = train_test_split(
X, y, test_size=0.2, random_state=42
)

# 016 FLAML 학습
automl = AutoML()
automl.fit(
X_train, y_train,
task="classification",
time_budget=30,
metric="accuracy",
verbose=0
)

# 016 평가
y_pred = automl.predict(X_test)
print(f"정확도: {accuracy_score(y_test, y_pred):.4f}")

분류의 출력

predict()

클래스 레이블을 반환합니다.

y_pred = automl.predict(X_test)
print(f"예측 클래스: {y_pred[:5]}")
# 016 예: [1, 0, 1, 1, 0]

predict_proba()

각 클래스에 속할 확률을 반환합니다.

y_prob = automl.predict_proba(X_test)
print(f"확률 shape: {y_prob.shape}")
print(f"첫 샘플 확률: {y_prob[0]}")
# 016 이진 분류: [[0.1, 0.9], ...] (클래스 0 확률, 클래스 1 확률)
# 016 다중 분류: [[0.1, 0.3, 0.6], ...] (각 클래스 확률)

분류 문제의 특성

클래스 불균형

현실의 많은 분류 문제는 클래스 간 샘플 수가 불균형합니다.

# 016 클래스 불균형 확인
from collections import Counter

class_counts = Counter(y_train)
print("클래스 분포:")
for cls, count in class_counts.items():
print(f" 클래스 {cls}: {count}개 ({count/len(y_train)*100:.1f}%)")

불균형 예시:

  • 사기 탐지: 사기 1%, 정상 99%
  • 질병 진단: 양성 5%, 음성 95%

클래스 불균형 처리

# 016 불균형 데이터에서는 정확도 대신 다른 지표 사용
automl.fit(
X_train, y_train,
task="classification",
time_budget=60,
metric="roc_auc", # 또는 "f1"
)

분류 평가 지표 미리보기

지표설명사용 상황
Accuracy전체 정확도균형 데이터
Precision양성 예측 중 실제 양성거짓 양성이 비용이 큰 경우
Recall실제 양성 중 양성 예측거짓 음성이 비용이 큰 경우
F1 ScorePrecision과 Recall의 조화 평균불균형 데이터
ROC AUCROC 곡선 아래 면적불균형 데이터

분류 문제 예시

비즈니스 분야

문제클래스유형
고객 이탈 예측이탈/유지이진
구매 예측구매/미구매이진
고객 세그먼트A/B/C 등급다중
리뷰 감성긍정/부정/중립다중

의료 분야

문제클래스유형
질병 진단양성/음성이진
암 유형 분류여러 암 유형다중
위험도 분류저/중/고다중

금융 분야

문제클래스유형
사기 탐지사기/정상이진
신용 등급A/B/C/D다중
대출 승인승인/거절이진

정리

  • 분류는 데이터를 미리 정의된 클래스로 분류하는 문제입니다.
  • 이진 분류: 두 개의 클래스 (예: 스팸/정상)
  • 다중 분류: 세 개 이상의 클래스 (예: 품종 분류)
  • FLAML에서는 task="classification"으로 설정합니다.
  • predict()로 클래스를, predict_proba()로 확률을 얻습니다.
  • 클래스 불균형에 주의하고 적절한 평가 지표를 선택하세요.

다음 글 예고

다음 글에서는 이진 분류 - 타이타닉 생존 예측에 대해 알아보겠습니다. 유명한 타이타닉 데이터세트로 실전 이진 분류 프로젝트를 진행합니다.


FLAML AutoML 마스터 시리즈 #016