쉽고 빠르게 ML 모델 만들기! Pycaret
Pycaret!
파이썬을 활용해 모델을 만드는 다양한 라이브러리와 방법론이 존재합니다. 하지만 올바른 모델을 선정하는 작업, 하이퍼파라미터 튜닝 등 실제로 모델을 만드는 일은 굉장히 어렵고 오랜 시간이 필요한 일입니다. Pycaret은 오픈소스 라이브러리로 초기 모델을 굉장히 쉽고 빠르게 결정하도록 제작할 수 있도록 하며 앙상블, 파라미터 튜닝 등 다양한 기능을 지원하는 라이브러리 입니다. 무엇보다 Pycaret의 공식문서는 정말 정리가 잘 되어 있고 다양한 데이터셋을 제공하기 때문에 쉽게 사용해 볼수가 있습니다!
Pycaret 설치
Pycaret의 공식문서는 os 별로 local 에 설치하는 과정부터 도커 빌드까지 다양한 방법을 세세하게 설명하고 있습니다. 아래 링크를 첨부하니 사용자 환경에 맞춰 확인 후 사용하시면 되겠습니다. 개인적으로 colab이나 docker를 이용하는 방식을 추천합니다!
공식문서 링크 : https://pycaret.org/install/
데이터 준비
본문에서는 Pycaret에서 제공하는 bank 데이터셋을 활용해보겠습니다.
setup()
Pycaret의 setup 메소드는 실험군 분류, 샘플링, 결측치 보정, 인코딩/디코딩 등 데이터셋에 대한 모든 전처리를 지원합니다. (자그마치 62개의 파라미터가...존재합니다)
setup 함수 파리미터 확인하기 : "https://github.com/pycaret/pycaret/blob/master/pycaret/classification.py
setup 메소드를 실행시키면 다음과 같이 대화형 요청과 함께 자동으로 인식한 데이터셋의 description을 제공합니다.
description 을 확인하고, 이상이 없다면 엔터를 치고 바로 넘어갑니다. setup이 실행되고, 회귀값을 제공하여 샘플사이즈를 요구합니다.
모델 만들기
compare_model()
compare_models(exclude = None, # 2.1버전부터 blacklist
include = None, # 2.1버전부터 whitelist
fold = 10, # 표시할 모델수
round = 4, # 표기할 소수점 자리수
sort = 'Accuracy', # 순위 정렬 기준
n_select = 1, # 최종 선택될 모델수(음수가능, -2라면 두번째로 점수가 낮은 모델까지 선택)
budget_time = 0,# 0이 아닌 값을 넣은 경우 실행시간이 입력값을 넘기면 실행이 종료됨(분 단위)
turbo = True, # False 로 설정하면 runtime이 긴 모델도 평가대상에 포함
verbose = True # Flase 로 설정하면 순위표가 출력되지 않음
)
compare_model() 메소드는 setup설정에 맞춰 각 모델의 평균점수를 비교하여 가장 우수한 모델부터 순차적으로 보여줍니다. 기본적으로 분류모델은 정확도를, 회귀모델은 r_squared를 기준으로 합니다.
50% 샘플링한 bank 데이터의 모델 비교결과 catboost 모델이 가장 높은 정확도를 나타내고 있습니다.
비교평가된 모델은 아래 처럼 확인할 수 있습니다.
create_model()
create_model(estimator = None, # 생성할 모델 약어
ensemble = False,
method = None, # ensemble = true 일 경우 Boosting, Bagging 둘 중 하나 선택
fold = 10, # 최소 2 이상
round = 4,
cross_validation = True, # False일 경우 다른 파라미터와 상관없이 모델이 데이터 전체를 학습
verbose = True,
system = True, # True로 고정
**kwargs
)
모델을 직접 제작하는것도 가능합니다. Pycaret은 앙상블을 위한 관련된 별도의 메소드를 제공하고 있지만, create_model() 에서도 가능합니다.
모델 튜닝
tune_model()
tune_model(estimator = None,
fold = 10,
round = 4,
n_iter = 10,
custom_grid = None, # 커스텀 파라미터 dict
optimize = 'Accuracy', # 튜닝을 통해 최적화하고자 하는 대상 기본값은 정확도
custom_scorer = None, # sklearn.make_scorer 로 제작된 메소드만 가능
choose_better = False,
verbose = True)
저는 F1 score를 최대화할 목적으로 튜닝을 돌렸는데, 오히려 평균점수는 더 낮아진 것을 볼 수 있습니다. 다른 파라미터들을 조정해봐야 할듯 합니다.
모델 분석
Pycaret은 모델 분석을 위한 다양한 시각화 자료를 제공합니다.
plot_model()
plot_model(estimator,
plot = 'auc',
scale = 1, # figure scale
save = False, #True 일 경우 working dir 에 저장됨
verbose = True,
system = True)
제공되는 plot 종류는 아래와 같습니다.
parameter | Name |
---|---|
'auc' | Area Under the Curve |
'threshold' | Discrimination Threshold |
'pr' | Precision Recall Curve |
'confusion_matrix' | Confusion Matrix |
'error' | Class Prediction Error |
'class_report' | Classification Report |
'boundary' | Decision Boundary |
'rfe' | Recursive Feature Selection |
'learning' | Learning Curve |
'manifold' | Manifold Learning |
'calibration' | Calibration Curve |
'vc' | Validation Curve |
'dimension' | Dimension Learning |
'feature' | Feature Importance |
'parameter' | Model Hyperparameter |
'lift' | Lift Curve |
'gain' | Gain Chart |
출력하면 결과입니다. catboost 모델은 사용이 불가능하기 때문에 로지스틱스 모델을 만들었습니다.
interpret_model()
- shap 패키지가 설치되어 있어야 합니다.
interpret_model(estimator, # 모델 이름
plot = 'summary', # summary , reaseon, correlation
feature = None, #correlation을 보고자할 때, 상관관계를 보고자하는 대상 feature. None일 경우 첫번째 컬럼
observation = None, #reaseon 을 보고자할 때, 관측치의 인덱스값이 됨. None일 경우 전체
**kwargs)
시각화가 정말 깔끔하게 잘 되어 제공됩니다.
evaluate_model()
상기 기능들을 개별적으로 실행할 필요 없이 대화형으로 실행할 수 있게해줍니다.
마치며
Pycaret을 공부하고, 실제로 사용해보고 싶어서 Pycaret이 제공하는 기능의 진짜 극히 작고, 기본적인 기능을 사용해봤습니다. 최근에 뜯어보거나 사용해 본 라이브러리 중 공식문서가 잘 작성되어 있는 라이브러리로는 다섯 손가락 안에 꼽을 수 있을것 같습니다. 며칠동안 문서도 더 읽어보고, 제공되는 기능들을 사용해보고 모델을 뽑아서 실제로 만들어 사용했던 분류기와 비교해볼까 합니다. 잘나오면 앞으로 캐글할땐..일단 Pycaret을 써볼까 싶네요.