반응형

쉽고 빠르게 ML 모델 만들기! Pycaret

Pycaret!

파이썬을 활용해 모델을 만드는 다양한 라이브러리와 방법론이 존재합니다. 하지만 올바른 모델을 선정하는 작업, 하이퍼파라미터 튜닝 등 실제로 모델을 만드는 일은 굉장히 어렵고 오랜 시간이 필요한 일입니다. Pycaret은 오픈소스 라이브러리로 초기 모델을 굉장히 쉽고 빠르게 결정하도록 제작할 수 있도록 하며 앙상블, 파라미터 튜닝 등 다양한 기능을 지원하는 라이브러리 입니다. 무엇보다 Pycaret의 공식문서는 정말 정리가 잘 되어 있고 다양한 데이터셋을 제공하기 때문에 쉽게 사용해 볼수가 있습니다!

Pycaret 설치

Pycaret의 공식문서는 os 별로 local 에 설치하는 과정부터 도커 빌드까지 다양한 방법을 세세하게 설명하고 있습니다. 아래 링크를 첨부하니 사용자 환경에 맞춰 확인 후 사용하시면 되겠습니다. 개인적으로 colab이나 docker를 이용하는 방식을 추천합니다!

공식문서 링크 : https://pycaret.org/install/

데이터 준비

본문에서는 Pycaret에서 제공하는 bank 데이터셋을 활용해보겠습니다.

스크린샷 2020-09-26 오후 5 04 33

setup()

Pycaret의 setup 메소드는 실험군 분류, 샘플링, 결측치 보정, 인코딩/디코딩 등 데이터셋에 대한 모든 전처리를 지원합니다. (자그마치 62개의 파라미터가...존재합니다)

setup 함수 파리미터 확인하기 : "https://github.com/pycaret/pycaret/blob/master/pycaret/classification.py

setup 메소드를 실행시키면 다음과 같이 대화형 요청과 함께 자동으로 인식한 데이터셋의 description을 제공합니다.

스크린샷 2020-09-26 오후 5 24 17

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 모델이 가장 높은 정확도를 나타내고 있습니다.

스크린샷 2020-09-26 오후 5 57 00

비교평가된 모델은 아래 처럼 확인할 수 있습니다.

스크린샷 2020-09-26 오후 6 02 02

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() 에서도 가능합니다.

스크린샷 2020-09-26 오후 6 21 44

모델 튜닝

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를 최대화할 목적으로 튜닝을 돌렸는데, 오히려 평균점수는 더 낮아진 것을 볼 수 있습니다. 다른 파라미터들을 조정해봐야 할듯 합니다.

스크린샷 2020-09-26 오후 6 37 06

모델 분석

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 모델은 사용이 불가능하기 때문에 로지스틱스 모델을 만들었습니다.

스크린샷 2020-09-26 오후 7 03 17

interpret_model()

  • shap 패키지가 설치되어 있어야 합니다.
interpret_model(estimator, # 모델 이름
                plot = 'summary', # summary , reaseon, correlation
                feature = None, #correlation을 보고자할 때, 상관관계를 보고자하는 대상 feature. None일 경우 첫번째 컬럼
                observation = None, #reaseon 을 보고자할 때, 관측치의 인덱스값이 됨. None일 경우 전체
                **kwargs)

시각화가 정말 깔끔하게 잘 되어 제공됩니다.

스크린샷 2020-09-26 오후 6 54 24

evaluate_model()

상기 기능들을 개별적으로 실행할 필요 없이 대화형으로 실행할 수 있게해줍니다.

마치며

Pycaret을 공부하고, 실제로 사용해보고 싶어서 Pycaret이 제공하는 기능의 진짜 극히 작고, 기본적인 기능을 사용해봤습니다. 최근에 뜯어보거나 사용해 본 라이브러리 중 공식문서가 잘 작성되어 있는 라이브러리로는 다섯 손가락 안에 꼽을 수 있을것 같습니다. 며칠동안 문서도 더 읽어보고, 제공되는 기능들을 사용해보고 모델을 뽑아서 실제로 만들어 사용했던 분류기와 비교해볼까 합니다. 잘나오면 앞으로 캐글할땐..일단 Pycaret을 써볼까 싶네요.

반응형
복사했습니다!