본문으로 건너뛰기

015 첫 번째 분류 모델 만들기

키워드: 분류, 첫 번째 모델

개요

이 글에서는 실제로 분류 모델을 처음부터 끝까지 만들어봅니다. 붓꽃 품종 분류 문제를 통해 PyCaret의 분류 워크플로우를 직접 경험합니다.

실습 환경

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

프로젝트: 붓꽃 품종 분류

목표

꽃받침(sepal)과 꽃잎(petal)의 길이/너비로 붓꽃 품종 예측

데이터 설명

  • 150개 샘플
  • 4개 특성: sepal_length, sepal_width, petal_length, petal_width
  • 3개 클래스: setosa, versicolor, virginica

전체 코드

# 1. 라이브러리 임포트
from pycaret.classification import *
from pycaret.datasets import get_data
import pandas as pd

# 2. 데이터 로드
print("=" * 50)
print("1. 데이터 로드")
print("=" * 50)
data = get_data('iris')
print(f"데이터 크기: {data.shape}")
print(f"클래스 분포:\n{data['species'].value_counts()}")

# 3. 환경 설정
print("\n" + "=" * 50)
print("2. 환경 설정")
print("=" * 50)
clf = setup(
data=data,
target='species',
session_id=42,
verbose=False
)
print("Setup 완료!")

# 4. 모델 비교
print("\n" + "=" * 50)
print("3. 모델 비교")
print("=" * 50)
best_models = compare_models(n_select=3)
print(f"\n상위 3개 모델: {[type(m).__name__ for m in best_models]}")

# 5. 최고 모델 튜닝
print("\n" + "=" * 50)
print("4. 하이퍼파라미터 튜닝")
print("=" * 50)
tuned_model = tune_model(best_models[0], verbose=False)
print("튜닝 완료!")

# 6. 시각화
print("\n" + "=" * 50)
print("5. 시각화")
print("=" * 50)
# 015 혼동 행렬
plot_model(tuned_model, plot='confusion_matrix', save=True)
print("confusion_matrix.png 저장됨")

# 7. 테스트 데이터 예측
print("\n" + "=" * 50)
print("6. 예측")
print("=" * 50)
predictions = predict_model(tuned_model)
print(predictions[['species', 'prediction_label', 'prediction_score']].head(10))

# 8. 최종화 및 저장
print("\n" + "=" * 50)
print("7. 모델 저장")
print("=" * 50)
final_model = finalize_model(tuned_model)
save_model(final_model, 'iris_classifier')
print("모델 저장 완료: iris_classifier.pkl")

# 9. 새 데이터 예측 테스트
print("\n" + "=" * 50)
print("8. 새 데이터 예측")
print("=" * 50)
new_flower = pd.DataFrame({
'sepal_length': [5.1],
'sepal_width': [3.5],
'petal_length': [1.4],
'petal_width': [0.2]
})
prediction = predict_model(final_model, data=new_flower)
print(f"예측 결과: {prediction['prediction_label'].values[0]}")
print(f"확률: {prediction['prediction_score'].values[0]:.2%}")

실행 결과

==================================================
1. 데이터 로드
==================================================
데이터 크기: (150, 5)
클래스 분포:
setosa 50
versicolor 50
virginica 50

==================================================
3. 모델 비교
==================================================
상위 3개 모델: ['LogisticRegression', 'LinearDiscriminantAnalysis', 'RandomForestClassifier']

==================================================
8. 새 데이터 예측
==================================================
예측 결과: setosa
확률: 100.00%

핵심 포인트

  1. 간결함: 10줄 이내로 모델 완성
  2. 자동화: 전처리, 교차검증 자동 처리
  3. 비교: compare_models()로 최적 알고리즘 탐색
  4. 저장: save_model()로 즉시 배포 가능

정리

  • PyCaret으로 분류 모델을 빠르게 구축할 수 있습니다
  • compare_models()tune_model()finalize_model() 패턴
  • 저장된 모델은 load_model()로 언제든 재사용

다음 글 예고

다음 글에서는 분류 문제의 이해를 다룹니다.


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