본문으로 건너뛰기

018 compare_models()로 최적 모델 찾기

키워드: compare_models, 모델 비교

개요

compare_models()는 PyCaret의 가장 강력한 기능입니다. 한 줄의 코드로 15개 이상의 알고리즘을 자동으로 학습하고 비교합니다. 이 글에서는 compare_models()의 모든 옵션을 마스터합니다.

실습 환경

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

compare_models() 기본 사용법

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

# 018 데이터 로드 및 설정
data = get_data('diabetes')
clf = setup(data, target='Class variable', session_id=42, verbose=False)

# 018 모든 모델 비교
best = compare_models()

주요 파라미터

n_select - 상위 N개 모델 반환

# 018 상위 3개 모델 반환
top3 = compare_models(n_select=3)

print(f"1위: {type(top3[0]).__name__}")
print(f"2위: {type(top3[1]).__name__}")
print(f"3위: {type(top3[2]).__name__}")

sort - 정렬 기준 지표

# 018 기본: Accuracy
best = compare_models()

# 018 F1 Score 기준
best_f1 = compare_models(sort='F1')

# 018 AUC 기준
best_auc = compare_models(sort='AUC')

# 018 Recall 기준 (재현율 중시)
best_recall = compare_models(sort='Recall')

분류에서 사용 가능한 지표:

  • Accuracy, AUC, Recall, Precision, F1, Kappa, MCC

include - 특정 모델만 비교

# 018 트리 기반 모델만 비교
tree_models = compare_models(include=['dt', 'rf', 'et', 'gbc', 'xgboost', 'lightgbm'])

# 018 선형 모델만 비교
linear_models = compare_models(include=['lr', 'ridge', 'lda'])

exclude - 특정 모델 제외

# 018 SVM과 KNN 제외 (느린 알고리즘)
best = compare_models(exclude=['svm', 'knn'])

# 018 앙상블 모델 제외
best = compare_models(exclude=['rf', 'et', 'gbc', 'ada'])

fold - 교차 검증 폴드 수

# 5-fold 교차 검증
best = compare_models(fold=5)

# 10-fold 교차 검증 (기본값)
best = compare_models(fold=10)

cross_validation - 교차 검증 비활성화

# 018 교차 검증 없이 단일 분할
best = compare_models(cross_validation=False)

모델 약어 목록

약어모델명
lrLogistic Regression
knnK Nearest Neighbor
nbNaive Bayes
dtDecision Tree
svmSVM (Linear)
rbfsvmSVM (RBF)
gpcGaussian Process
mlpMLP Classifier
ridgeRidge Classifier
rfRandom Forest
qdaQuadratic DA
adaAdaBoost
gbcGradient Boosting
ldaLinear DA
etExtra Trees
xgboostXGBoost
lightgbmLightGBM
catboostCatBoost

실전 활용 예제

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

# 1. 데이터 준비
data = get_data('credit')
clf = setup(data, target='default', session_id=42, verbose=False)

# 2. 빠른 스크리닝 (상위 5개)
print("=== 빠른 스크리닝 ===")
top5 = compare_models(n_select=5, exclude=['svm', 'gpc'])

# 3. 최종 후보 정밀 비교
print("\n=== 정밀 비교 (상위 5개만) ===")
candidates = [type(m).__name__.lower()[:2] for m in top5]
final = compare_models(
include=['rf', 'gbc', 'xgboost', 'lightgbm', 'catboost'],
sort='AUC',
fold=10
)

# 4. 결과 출력
print(f"\n최고 모델: {type(final).__name__}")

compare_models() 결과 해석

비교 결과 테이블의 열:

  • Model: 알고리즘명
  • Accuracy: 정확도
  • AUC: ROC 곡선 아래 면적
  • Recall: 재현율 (민감도)
  • Prec.: 정밀도
  • F1: F1 Score
  • Kappa: Cohen's Kappa
  • MCC: Matthews 상관 계수
  • TT (Sec): 학습 시간

팁과 주의사항

  1. 큰 데이터에서는 exclude 활용: SVM, KNN은 대용량 데이터에서 느림
  2. 불균형 데이터는 AUC/F1 기준: Accuracy만 보면 편향된 모델 선택
  3. n_select로 앙상블 후보 확보: 상위 3-5개로 blend/stack 가능
  4. cross_validation=False는 신중히: 과적합 위험

정리

  • compare_models()로 15개+ 알고리즘을 자동 비교
  • n_select로 상위 N개 모델 반환
  • sort로 정렬 기준 지표 변경
  • include/exclude로 비교 대상 조정
  • 불균형 데이터에서는 AUC나 F1 기준 권장

다음 글 예고

다음 글에서는 create_model() 상세 활용을 다룹니다.


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