Snoopy [ML] 26. (AutoML) pycaret 개요, pycaret 주요 function
머신러닝과 딥러닝/ML 개념정리

[ML] 26. (AutoML) pycaret 개요, pycaret 주요 function

Sooyoon Jeong 2022. 11. 17.

1. Pycaret이란?

Auto ML을 해주는 파이썬 라이브러리

 

Auto ML이 생소할 수 있는데, 이전에 포스팅한 글이 있으니 참고하면 좋을 것 같다.

https://42-snoopy.tistory.com/entry/ML-25-AutoML-%EA%B0%9C%EC%9A%94

 

[ML] 25. AutoML 개요

1. AutoML이란? 데이터의 성격에 맞게 자동으로 데이터 분석 모델을 추천해주는 Auto Machine Laerning 기법 (머신러닝 모델을 만드는 인공지능이라고 할 수 있다.) 기계학습 파이프라인에서에서 반복적

42-snoopy.tistory.com

한마디로 AutoML은 데이터의 성격에 맞게 자동으로 분석 모델을 추천해주는 기법이라고 할 수 있고 pycaret은 AutoML의 한 종류이다.

 

Pycaret에서 제공하는 기능들

  1. Classification
  2. Regression
  3. Clustering
  4. Anomaly Detection
  5. Natural Language Processing

pycaret 사용 순서는 크게보면, 아래와 같이 정리할 수 있다.

 

0️⃣ 라이브러리 로드

1️⃣ setup

2️⃣ compare_models(모델성능 비교)

3️⃣ create_model (모델 생성)

4️⃣ tune_model(모델튜닝)

5️⃣ plot_model(결과 시각화)

6️⃣ predict_model(홀드아웃 예측)

7️⃣ finalize_model(홀드아웃을 포함한 전체 데이터에 대한 예측)

8️⃣ unseen predict(predict_model)

9️⃣ save_model(모델 저장)

🔟 load_model(저장된 모델 불러오기)

 

2. pycaret 설치 및 라이브러리 로드

주피터에서 실습을 진행해보고 싶었지만,

여건이 되지 않아 colab에서 실습을 진행하였다.

 

설치하기

!pip install pycaret

pycaret은 sklearn의 0.23.2 버전과 호환된다고 하여 sklearn 삭제 후 0.23.2 버전으로 재설치를 해주었다.

!pip uninstall sklearn -y
!pip install --upgrade sklearn
!pip install scikit-learn==0.23.2 --user
import sklearn
sklearn.__version__

0.23.2 버전임을 확인한다.

 

3. Initialize

(1) Setup

전달된 모든 매개변수를 기반으로 transfrom pipeline을 구축하는 함수

 

필수 파라미터

1️⃣ data: pandas.DataFrame

적용할 데이터

 

2️⃣ target: str

정답 값

 

# load dataset
from pycaret.datasets import get_data
diabetes = get_data('diabetes')

# init setup - 분류
from pycaret.classification import *
clf1 = setup(data = diabetes, target = 'Class variable')

# init setup - 회귀
rg = setup(data = train, target = 'box_off_num')

모든 변수의 데이터 유형을 자동으로 출력하고

올바르게 출력된 경우 빈 셀에 Enter키를 눌러 계속할 수 있다.

 

그럼 아래와 같이 출력된다.

 

✔️ Default Transformation (setup의 옵션)

setup 단계에서 진행되는 대부분의 전처리는 True or False 형태로 입력하면 된다.

다음 3가지는 default로 수행되는 전처리이다.

 

1️⃣ 결측값 대치

2️⃣ 원 핫 인코딩

3️⃣ train - test 분할

 

✔️ Experiment Logging (setup의 옵션)

setup의 선택적 파라미터를 이용하여 기계 학습 모델에 대한 모든 metric, hyper parameter 및 중요한 정보들을 자동으로 추적할 수 있다.

 

아래 코드에서는 log_experiment, experiment_name 등의 파라미터를 추가해주었다.

# load dataset
from pycaret.datasets import get_data
data = get_data('diabetes')

# init setup
from pycaret.classification import *
clf1 = setup(data, target = 'Class variable', log_experiment = True, experiment_name = 'diabetes1')

 

4. Train

(1) Compare_models

교차검증을 사용하여 사용할 수 있는 모든 모델의 성능을 훈련하고 평가하는 함수

CV 중에 평가된 metrics는 get_metrics 함수를 사용하여 접근할 수 있다.

사용자 지정 metrics은 add_metrics와 remove_metrics 함수를 이용하여 추가 및 삭제 가능

 

1️⃣ 모델 비교하기

# load dataset
from pycaret.datasets import get_data
diabetes = get_data('diabetes')

# init setup
from pycaret.classification import *
clf1 = setup(data = diabetes, target = 'Class variable')

# compare models
best = compare_models()

 

참고로 catboost의 경우 사전에 설치하지 않으면 보이지 않는다.

 

2️⃣ 한 개의 모델 대신 상위 N개의 모델 반환하기

compare_models()를 실행하면, 최고 성능의 모델만 반환하며, n_select를 이용하면 둘 이상의 모델을 반환할 수도 있다.

best = compare_models(n_select = 3)

결과에는 변경사항이 없지만, 하나의 모델 대신 상위 3개의 모델 목록이 포함되어 출력된다.

 

3️⃣ 정렬 기준으로 사용할 점수 지정하기

모델의 성능을 표시할 때, 어떤 점수를 기준으로 모델을 정렬할지 지정할 수 있다.

# compare models - F1 점수를 기준으로 정렬하기
best = compare_models(sort = 'F1')

 

4️⃣ 일부 모델만 비교하기

또한 비교할 모델을 include와 exclude를 통해 일부만 지정하여 확인할 수도 있다.

best = compare_models(include = ['rf', 'et', 'lightgbm','catboost'], sort='F1')
best = compare_models(exclude = ['catboost'], sort='F1')

# 회귀 모델에서 추가 옵션
best = compare_models(fold = 5, round = 3, sort = 'AUC', n_select = 15)

 

5️⃣ 최고 성능의 모델과 하이퍼파리미터 출력하기

print(best)를 사용하면 성능이 제일 뛰어난 모델을 하이퍼파라미터 값과 함께 출력해준다.

 

(2) Create_model

교차검증을 사용하여 사용할 수 있는 모든 모델의 성능을 훈련하고 평가하는 함수

CV 중에 평가된 metrics는 get_metrics 함수를 사용하여 접근할 수 있다.

사용자 지정 metrics은 add_metrics와 remove_metrics 함수를 이용하여 추가 및 삭제 가능

 

1️⃣ ridge classifier로 모델 생성하기

# load dataset 
from pycaret.datasets import get_data 
diabetes = get_data('diabetes') 

# init setup
from pycaret.classification import * 
clf1 = setup(data = diabetes, target = 'Class variable')

# train ridge classifier
ridge = create_model('ridge')

학습된 모델에 대한 metrics을 fold별로 표시하고 각 metrics에 대한 평균과 표준편차를 출력한다.

fold의 default = 10이며 fold의 개수는 당연히 변경할 수 있다.

 

2️⃣ fold 개수 변경하기

# train ridge classifier
ridge = create_model('ridge', fold = 5)

 

(3) Model library

사용가능한 모델의 리스트를 불러올 수 있다.

models()

 

5. Optimize

(1) tune_model

모델의 하이퍼파라미터를 튜닝하는 기능이다.

# train ridge classifier
ridge = create_model('ridge')

# 튜닝
tuned_ridge = tune_model(ridge)

 

하이퍼파라미터 비교

# 기본모델
print(ridge)

# 튜닝모델
print(tuned_ridge)

1️⃣ n_iter로 반복횟수 지정하기

가능한 시간에 따라 지정하면 된다.

# train ridge classifier
ridge = create_model('ridge')

# 튜닝
tuned_ridge = tune_model(ridge, n_iter = 50)

2️⃣ metrics 선택(optimize)

# train ridge classifier
ridge = create_model('ridge')

# 튜닝
tuned_ridge = tune_model(ridge, n_iter = 50, optimize = 'Accuracy')

 

(2) blend_models

# blender
ridge = create_model('ridge')
lda = create_model('lda')
catboost = create_model('catboost')

# blend_models
blend_models([ridge, lda, catboost])

type(blender), print(blender)

type(blender)
>>> sklearn.ensemble._voting.VotingClassifier

print(blender)

1️⃣ fold param 변경

# blender
ridge = create_model('ridge')
lda = create_model('lda')
catboost = create_model('catboost')

# blend_models
blend_models([ridge, lda, catboost], fold = 5)

2️⃣ n_select

# load dataset
from pycaret.datasets import get_data
diabetes = get_data('diabetes')

# init setup
from pycaret.classification import *
clf1 = setup(data = diabetes, target = 'Class variable')

# blend models
blender = blend_models(compare_models(n_select = 3))

3️⃣ voting 방식 변경

# blender
ridge = create_model('ridge')
lda = create_model('lda')
catboost = create_model('catboost')

# blend_models
blend_models([ridge, lda, catboost],method = 'soft')

4️⃣ 가중치 부여

blender = blend_models([ridge, lda, catboost], weights = [0.7, 0.2, 0.1])

물론 여기에 튜닝도 할 수 있다.

# tune blender
tuned_blender = tune_model(blender_weighted)

 

5️⃣ Automatically choose better

tuned_blender = tune_model(blender, choose_better = True, optimize = "Accuracy")

 

6. Analyze

[공식] https://pycaret.gitbook.io/docs/get-started/functions/analyze

 

(1) plot_model

# creating a model
lr = create_model('lr')

# plot model
plot_model(lr, plot = 'auc')

시각화한 그림을 save 옵션을 통해 저장할 수도 있다.

# creating a model
lr = create_model('lr')

# plot model
plot_model(lr, plot = 'auc', save = True)

 

plot_kwargs로 plot customize하기

딕셔너리 형태로 입력해주면 된다.

# creating a model
lr = create_model('lr')

# plot model
plot_model(lr, plot = 'confusion_matrix', plot_kwargs = {'percent' : True})

 

percent : true를 입력하면,

퍼센트 비율이 함께 출력된다.

 

 

 

 

 

 

 

 

 

use train data = True로 train data 사용하기

# creating a model
lr = create_model('lr')

# plot model
plot_model(lr, plot = 'auc', use_train_data = True)

 

(2) plot 종류

 

1️⃣ 분류(classification)

Plot Name
Plot
Area Under the Curve
‘auc’
Discrimination Threshold
‘threshold’
Precision Recall Curve
‘pr’
Confusion Matrix
‘confusion_matrix’
Class Prediction Error
‘error’
Classification Report
‘class_report’
Decision Boundary
‘boundary’
Recursive Feature Selection
‘rfe’
Learning Curve
‘learning’
Manifold Learning
‘manifold’
Calibration Curve
‘calibration’
Validation Curve
‘vc’
Dimension Learning
‘dimension’
Feature Importance (Top 10)
‘feature’
Feature IImportance (all)
'feature_all'
Model Hyperparameter
‘parameter’
Lift Curve
'lift'
Gain Curve
'gain'
KS Statistic Plot
'ks'

2️⃣ 회귀(regression)

Name
Plot
Residuals Plot
‘residuals’
Prediction Error Plot
‘error’
Cooks Distance Plot
‘cooks’
Recursive Feature Selection
‘rfe’
Learning Curve
‘learning’
Validation Curve
‘vc’
Manifold Learning
‘manifold’
Feature Importance (top 10)
‘feature’
Feature Importance (all)
'feature_all'
Model Hyperparameter
‘parameter’

3️⃣ clustering

Name
Plot
Cluster PCA Plot (2d)
‘cluster’
Cluster TSnE (3d)
‘tsne’
Elbow Plot
‘elbow’
Silhouette Plot
‘silhouette’
Distance Plot
‘distance’
Distribution Plot
‘distribution’

4️⃣ Anomaly Detection

Name
Plot
t-SNE (3d) Dimension Plot
‘tsne’
UMAP Dimensionality Plot
‘umap’

 

5️⃣ Natural Language Processing

Name
Plot
Word Token Frequency
‘frequency’
Word Distribution Plot
‘distribution’
Bigram Frequency Plot
‘bigram’
Trigram Frequency Plot
‘trigram’
Sentiment Polarity Plot
‘sentiment’
Part of Speech Frequency
‘pos’
t-SNE (3d) Dimension Plot
‘tsne’
Topic Model (pyLDAvis)
‘topic_model’
Topic Infer Distribution
‘topic_distribution’
Word cloud
‘wordcloud’
UMAP Dimensionality Plot
‘umap’

 

evaluate_model 

학습된 모델의 성능을 분석하기 위한 모든 지표가 출력된다.

# create model
lr = create_model('lr')

# launch evaluate widget
evaluate_model(lr)

아래와 같이 plot type을 클릭하면 해당 타입의 plot이 출력되는 동적인 시각화 방법이다.

plot_model을 기반으로 작동된다.

 

7. Deploy

(1) predict_model

학습된 모델을 기반으로 정답값을 예측한다.

data가 None이면, hold-out 데이터에서 정답을 예측한다.

 

1️⃣ 홀드아웃 예측

# create a model
xgboost = create_model('xgboost')

# predict on hold-out
predict_model(xgboost)

(2) finalize_model

hold-out 집합을 포함한 전체 데이터 셋에 지정된 모델을 학습한다.

(만약 데이터를 가져오는 단계에서 frac을 사용하면, frac에서 설정한 비율의 데이터셋에 대해서만 학습을 진행함)

# create a model
rf = create_model('rf')

# finalize a model
finalize_model(rf)

(3) Predict_model(보이지 않는 데이터 예측)

위에서 언급한 바와 같이 데이터를 가져오는 단계에서 frac을 사용하여 데이터의 비율 설정할 수가 있다.

data = dataset.sample(frac=0.95, random_state=786)
data_unseen = dataset.drop(data.index)
data.reset_index(inplace=True, drop=True)
data_unseen.reset_index(inplace=True, drop=True)
print('Data for Modeling: ' + str(data.shape))
print('Unseen Data For Predictions: ' + str(data_unseen.shape))

 

unseen_predictions를 사용하면 초기에 불러오지 않은, 원본 데이터 세트의 5%를 포함하여 예측하게 된다.

unseen_predictions = predict_model(final_rf, data=data_unseen)
unseen_predictions.head()

 

 

(3) save_model

transform된 파이프라인과 학습된 모델 개체를 나중에 사용할 수 있도록 현재 작업 디렉토리에 pickle 파일로 저장하는 기능

# create a model
dt = create_model('dt')

# save pipeline
save_model(dt, 'dt_pipeline')

(4) load_model

저장된 파이프라인을 로드하는 기능

# save pipeline
save_model(dt, 'dt_pipeline')

# load pipeline
load_model('dt_pipeline')


[참고한 글]

Pycaret을 사용한 데이터 분석 (tistory.com)

[python] colab pycaret 설치 — 코딩하는 감자 (tistory.com)

반자동 Auto ML 라이브러리인 PyCaret 사용하기 (tistory.com)

Welcome to PyCaret - PyCaret Official (gitbook.io)

주피터 노트북 뷰어 (nbviewer.org)

댓글