# Colab
pip install --use-deprecated=legacy-resolver pycaret[full]
# local
pip install pycaret
pip install pycaret[full] # install the full version of pycaret
| Module | Code |
|---|---|
| Classification | from pycaret.classification import * |
| Regression | from pycaret.regression import * |
| Clustering | from pycaret.clustering import * |
| Anomaly Detection | from pycaret.anomaly import * |
| NLP | from pucaret.nlp import * |
| ARM | from pucaret.arules import * |
즉, setup은 파이프라인으로 전처리한 데이터 및 변수 정보를 포함한 다양한 정보를 포함 가능
파라미터를 통해 옵션 설정을 진행할 수 있으며, 설명은 다음과 같음
# 예시
setup_genie = setup(data=data,
target='target_col',
train_size=0.7,
sessioon_id=2023,
use_gpu=False)
# 1. data : input data 입력
# 2-1. train/test를 별도 분리하지 않으면 train_size에 입력한 비율대로 train/test를 분리
# 2-2. 별도로 분리하여 입력을 한다면 data에 train 데이터를 입력 & test_data 부분에 test 데이터를 입력
# 3. target : 최종적으로 분류/예측해야 하는 column (train data에 존재하는 column)
# 4. session_id : random seed 설정
# 5. normalize : 데이터에 정규화(Normalization) 적용 여부 (True/False)
# 6. normalize_method : normalize가 True라면 어떤 방식으로 정규화를 진행할 것인지 설정 (zscore, minmax, maxabs, robust ...)
# 7. transformation : 데이터 샘플들의 분포가 가우시안 분포(정규 분포)에 더 가까워지도록 처리해주는 과정
# 8-1. fold_strategy : 기본적으로 10-fold Cross-Validation(kfold)을 수행, Stratified K-fold(stratifiedkfold)도 가능
# 8-2. regression인 경우, label이 int형이라면 Stratified K-fold가 제대로 실행 가능하지만 float형이라면 학습이 제대로 수행 X
# 8-3. 따라서, float형태로 되어있는 label 값을 int형으로 변환하여 소수점 아래를 버리고 수행하는 방법도 존재
# 9. fold : CV를 진행할 횟수 설정
# 10. use_gpu : GPU 사용 여부 (True/False)
>>> 위 파라미터를 설정한 후 코드를 돌리게 된다면 feature들이 numeric인지 categorical인지 column에 대한 자료형을 확인을 할 수 있음
>>> 데이터에 대한 간단한 설명과 전처리한 내용 그리고 설정한 옵션들도 표시
+) numeric_features, categorical_features : 자료형에 따라 numeric feature와 categorical feature를 분리하여 설정 가능
models()
# 예시
top_4_models = compare_models(n_select=4, sort='MAE', include=['rf', 'xgboost', 'lightgbm', 'dt', 'gbr'])
# 1. n_select : 가장 좋은 성능 순으로 n_select에서 설정한 수만큼의 모델을 저장
# 2. sort : 최종적으로 반환해주는 모델들을 Sorting할 때, 어떤 Metric을 기준으로 Sorting할지 결정해주는 파라미터
# 3. include : 어떤 모델들을 비교할지 설정해주는 함수로 여러 모델들을 리스트의 형식으로 입력 (models()에서 보았던 id나 별도로 이전에 선언한 모델을 리스트 안에 넣어주면 됨)
# 4. exclude : include의 반대 (빼고 싶은 모델 선택)
# 01 : Classification
from sklearn.metrics import log_loss
add_metric('logloss', 'Log Loss', log_loss, greater_is_better=False)
# 02 : Regression
from sklearn.metrics import explained_variance_score
add_metric('evs', 'EVS', explained_variance_score)
top_4_models = compare_models(n_select=4, sort='MAE', include=['rf', 'xgboost', 'lightgbm', 'dt', 'gbr'])
>>> 위와 같이 평가 지표를 추가하고 compare_models를 수행하게 되면 해당 지표가 추가되어 모델의 성능을 나타냄
# 예시
lgbm = create_model('lightgbm', fold = 10)
rf = create_model('rf', fold = 10)
xgb = create_model('xgboost', fold = 10)
+) range 0.1 ~ 0.5 : learning_rate
lgbms = [create_model('lightgbm', learning_rate=i) for i in np.arrange(0.1, 0.5)]
>>> 위 코드에서 입력한 fold에 따라서 성능을 확인할 수 있음
# 예시 01
tuned_xgb = tune_model(xgb,
n_iter=100,
optimize='MAPE')
# 예시 02
top5 = compare_models(sort='Accuracy', n_select=5)
tuned_top5 = [tune_model(i) for i in top5]
# 예시 03 : Custom Grid 매개변수를 사용하여 사용자 정의 그리드를 전달 가능
params = {
'learning_rate': [0.01, 0.1],
'max_depth': [5, 6, 7, 8],
'subsample': [0.6, 0.7, 0.8],
'n_estimators' : [100, 300, 400, 500]
}
tuned_model = tune_model(
model,
optimize='RMSE',
fold=10,
custom_grid=params,
n_iter=20
)
# 예시 04 : 탐색 알고리즘 변경
# tune model optuna
tune_model(__model__, search_library = 'optuna')
# tune model scikit-optimize
tune_model(__model__, search_library = 'scikit-optimize')
# tune model tune-sklearn
tune_model(__model__, search_library = 'tune-sklearn', search_algorithm = 'hyperopt')
# 1-1. n_iter : Tuning을 통해 성능을 비교할 후보군의 수를 의미
# 1-2. 값이 클수록 성능이 더 좋아진 가능성이 있지만 시간이 더 걸리므로 각 task에 맞게 적절한 값을 설정해주어야 함
# 2. optimize : Tuning시, 어떤 Metric을 기준으로하여 Tuning된 모델을 선별할 것인지 설정하는 하이퍼파라미터
+) Pycaret 이전 버전에서는 Default Model과 Tuning된 모델을 비교하지 않아 오히려 Tuning된 모델이 Default Model보다 성능이 낮은 경우가 있었음
+) 이에 따라 하이퍼파라미터를 별도로 설정해주어야 함
+) 버전 업데이트 이후, 해당 이슈 제거됨 > Pycaret 버전 확인 필요
# 01
bagged = ensemble_model(model, method='Bagging')
# 02
boosted = ensemble_model(model, method='Boosting')
# 01 - 1
rf = create_model('rf')
xgb = create_model('xgboost')
lgbm = create_model('lightgbm')
blender_base_model = blend_models(estimator_list = [lgbm,rf,xgb], optimize = 'MAPE')
# 01 - 2 : 모델별 가중치 설정
blender_base_model2 = blend_models(estimator_list = [lgbm,rf,xgb], optimize = 'MAPE', weights = [0.45,0.35,0.2])
# 02 : compare_models를 통해 선택된 모델들
blender_base_model3 = blend_models(estimator_list = compare_models(n_select = 5), method = 'soft')
# 1. optimize : Tuning시, 어떤 Metric을 기준으로하여 Tuning된 모델을 선별할 것인지 설정하는 하이퍼파라미터 (평가지표)
# 2. method : soft voting인지 hard voting인지 선택
# 3. fold : 구간으로 나누어 검증할 횟수
# 01
stacker = stack_models(estimator_list = [xgb, lgbm], meta_model = rf)
# 02 : compare_models를 통해 선택된 모델들
top5 = compare_models(n_select = 5)
stacker = stack_models(estimator_list = top5[1:], meta_model.= top5[0])
# 01 : residuals
plot_model(__model__, plot='residuals')
# 02 : error
plot_model(__model__, plot='error')
# 03 : feature > 변수중요도
plot_model(__model__, plot='feature')
# 04 : learning
plot_model(__model__, plot='learning')
# 05 : cooks > OutLiers
plot_model(__model__, plot='cooks')
# 06 : confusion_matrix
plot_model(estimator = __model__, plot = 'confusion_matrix')
# 최종 모델 선택
final_model = finalize_model(model)
# test 데이터 예측
prediction = predict_model(final_model, data=test)
# score : label이 맞을 확률 / Label : 예측값
predictions[['Score','Label']]
>>> prediction은 test 데이터의 데이터 프레임 형태를 그대로 가져가며, 마지막에 Label이라는 Column이 생성되면서 해당 값이 모델이 예측한 결과
from pycaret.utils import check_metric
check_metric(prediction['_target_'], prediction['Label'], metric = 'Accuracy')
# SHAP (SHapley Additive exPlanations)
pip install shap
interpret_model(__model__, plot='reason', observation=32)
# 예시
save_model(model, './xgb')
# 예시
load_xgb = load_model('./xgb')
# Hyper-parameter Setting 확인
load_xgb['trained_model']
+) Model을 Load할 때, Model을 Save했던 환경과 다른 곳에서 수행을 하게 된다면, Pandas의 버전이 같거나 더 최신 버전이어야 함