PyCaret - AutoML 라이브러리

PyCaret


PyCaret은 적은 코드로 머신러닝 워크 플로우를 자동화하는 오픈 소스 라이브러리입니다. 머신러닝 모델 개발시 많은 시간을 소요했던 코딩, 전처리, 모델 선택, 파라미터 튜닝 작업을 자동화해주어 쉽고, 높은 생산성의 작업을 가능하게 합니다.

공식 사이트에서 더 자세한 설명을 확인 할 수 있습니다

https://pycaret.org/guide/

이 포스팅에서는 PyCaret을 사용해 분류 모델을 다뤄보겠습니다.

데이터 불러오기

실습에 앞서 데이터를 불러옵니다. 이 포스팅에서는 사이킷런에서 제공하는 유방암 데이터를 사용하겠습니다.

import pandas as pd
from sklearn.datasets import load_breast_cancer

cancer = load_breast_cancer()
df = pd.DataFrame(cancer.data, columns=cancer.feature_names)
df['target'] = cancer.target
df.head()

image-20210124002837746

설치하기

pip install pycaret

터미널에 위 명령어를 입력하여 설치할 수 있습니다.

성공적으로 설치되었을 경우 아래와 같이 버전을 확인할 수 있습니다.

image-20210124002604433

초기 세팅

머신러닝 모델을 다루기 전에 초기 환경을 세팅해 주어야 합니다.

우선 다루고자 하는 모델의 특성에 맞는 모듈을 import 해줍시다. 여기서는 분류 모델을 사용하겠습니다.

from pycaret.classification import *

이 외에도 regression, clustering 등의 모듈을 사용할 수 있습니다. 알맞은 모듈을 import하시면 됩니다.

다음으로 모델을 돌릴 환경을 설정해줍니다.

clf = setup(data=df, target='target', train_size=0.8, session_id=10)
  • data : 모델링에 사용할 데이터를 지정합니다.
  • target : data 내에서 타겟 값으로 사용할 피처를 지정합니다.
  • train_size : 데이터에서 학습에 사용할 데이터의 비율을 지정합니다.
  • session_id : 사이킷런의 random_state와 같은 역할을 합니다.

image-20210124004129815

image-20210124004148307

주어진 데이터의 타입을 확인한 후 엔터키를 누르면 세팅이 완료됩니다.

모델 비교

compare_models() 함수로 다양한 모델의 성능을 비교할 수 있습니다.

정확도를 기준으로 상위 3개의 모델을 best3models에 저장하겠습니다.

best3models = compare_models(sort='Accuracy', n_select=3, fold=2)
  • sort : 모델을 정렬할 평가 지표를 지정합니다.
  • n_select : 상위 몇개의 모델을 선택할지 지정합니다.
  • fold : 교차 검증할 폴드 수를 지정합니다.

image-20210124004605925

image-20210124004736955

모델 만들기

create_model() 함수로 모델을 생성할 수 있습니다.

로지스틱 회귀 모델과 랜덤포레스트 모델을 생성해보겠습니다.

# 로지스틱 회귀 모델 생성
lr = create_model('lr', fold=2)

타겟 값이 0 일때와 1일때의 평가 지표, 그리고 두 평가 지표의 평균과 표준 편차를 출력합니다.

image-20210124005145569

# 랜덤포레스트 모델 생성
rf = create_model('rf', fold=2)

image-20210124005159695

하이퍼 파라미터 튜닝

tune_model() 함수로 하이퍼 파라미터를 튜닝할 수 있습니다.

앞서 생성한 로지스틱 회귀 모델과 랜덤포레스트 모델의 하이퍼 파라미터를 튜닝해 보겠습니다.

tuned_lr = tune_model(lr, fold=2, optimize='Accuracy')

image-20210124005413123

tuned_rf = tune_model(rf, fold=2, optimize='Accuracy')

image-20210124005424107

파라미터를 튜닝하기 전에 비해 대부분의 지표가 상승한 것을 확인 할 수 있습니다.

모델 시각화

plot_model() 함수로 원하는 형태로 모델을 시각화 할 수 있습니다.

# ROC 커브
plot_model(tuned_lr, 'auc')

image-20210124005825070

# 오차 행렬
plot_model(tuned_lr, 'confusion_matrix')

image-20210124005845985

# 피처 중요도 
plot_model(tuned_rf, 'feature')

image-20210124005905440

모델 결합

blend_model() 함수로 여러 모델을 결합하여 앙상블 모델로 사용할 수 있습니다.

앞서 만든 best3models 의 세 모델을 앙상블하겠습니다.

blended = blend_models(estimator_list=best3models, fold=2, method='soft')
  • estimator_list : 결합할 모델의 리스트를 지정합니다.
  • fold : 교차 검증할 폴드 수를 지정합니다.
  • method : 보팅 방식을 지정합니다. (‘soft’ / ‘hard’)

image-20210124010121018

모델 예측

predict_model() 함수로 모델의 예측을 수행할 수 있습니다.

pred = predict_model(blended)

image-20210124010310379