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)
모델 약어 목록
| 약어 | 모델명 |
|---|---|
| lr | Logistic Regression |
| knn | K Nearest Neighbor |
| nb | Naive Bayes |
| dt | Decision Tree |
| svm | SVM (Linear) |
| rbfsvm | SVM (RBF) |
| gpc | Gaussian Process |
| mlp | MLP Classifier |
| ridge | Ridge Classifier |
| rf | Random Forest |
| qda | Quadratic DA |
| ada | AdaBoost |
| gbc | Gradient Boosting |
| lda | Linear DA |
| et | Extra Trees |
| xgboost | XGBoost |
| lightgbm | LightGBM |
| catboost | CatBoost |
실전 활용 예제
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): 학습 시간
팁과 주의사항
- 큰 데이터에서는 exclude 활용: SVM, KNN은 대용량 데이터에서 느림
- 불균형 데이터는 AUC/F1 기준: Accuracy만 보면 편향된 모델 선택
- n_select로 앙상블 후보 확보: 상위 3-5개로 blend/stack 가능
- cross_validation=False는 신중히: 과적합 위험
정리
compare_models()로 15개+ 알고리즘을 자동 비교n_select로 상위 N개 모델 반환sort로 정렬 기준 지표 변경include/exclude로 비교 대상 조정- 불균형 데이터에서는 AUC나 F1 기준 권장
다음 글 예고
다음 글에서는 create_model() 상세 활용을 다룹니다.
PyCaret 머신러닝 마스터 시리즈 #018