티스토리 뷰



Pycaret 패키지를 실습하는 과정을 이어서 적어본다.

1탄에서는 패키지에 대한 기본적인 개념부터해서
 Setup (머신러닝 예측) -> Compare (성능 결과 확인 및 각 모델 별 비교) -> Create (가장 우수한 모델 선택) -> Tune (하이퍼파라미터 미세 조정을 통한 성능 향상) 까지 알아보았다.

그 이후 단계에 대해서 마저 적어본다.

[2.6] Ensemble

 - 한글로는 앙상블. 한 마디로 여러 개를 섞어서 성능 예측성을 높이고, 모델의 강건성을 높이고, 과적합을 막기 위해 적용한다.

 - 일반적으로 decision tree에서 여러 가지를 결합하여 weak classifier를 strong classifier로 만들기 위함이다.

 - 여기에 두 가지 기법이 소개되었다.

 [2.6.1] Bagging

 - Bootstratp Aggregation의 약자이다. 샘플링을 여러번 진행 (bootstrapping) + 그 결과를 종합한다 (aggregation)하는 의미를 가진다.

 - Bootstrapping에 대한 위키 참조 (https://en.wikipedia.org/wiki/Bootstrapping_(statistics))

 - Definition만 인용하자면,  Bootstrapping is any test or metric that uses random sampling with replacement (e.g. mimicking the sampling process), and falls under the broader class of resampling methods. Bootstrapping assigns measures of accuracy (bias, variance, confidence intervals, prediction error, etc.) to sample estimates. This technique allows estimation of the sampling distribution of almost any statistic using random sampling methods.

 - 장/단점을 잘 소개해둔 블로그가 있어서 인용해 보았다 (https://towardsdatascience.com/bootstrapping-statistics-what-it-is-and-why-its-used-e2fa29577307)

 장점: 비틀린 분포의 데이터도 처리 가능하며, 복잡한 데이터 분석이 가능

 단점: 연산량이 많다. 표본 집단이 어느 정도 이상 되어야 한다.

 

Bootstrapping의 graphical abstract

 [2.6.2] Boosting

 - 가중치를 활용하는 방법이다. sequential한 방식으로 가중치를 두어 다음 모델을 tuning해 가는 방식이다.

 - 아래 그림이 너무 설명을 잘해놔서 출처를 남기고 인용해보았다 (https://bkshin.tistory.com/entry/%EB%A8%B8%EC%8B%A0%EB%9F%AC%EB%8B%9D-11-%EC%95%99%EC%83%81%EB%B8%94-%ED%95%99%EC%8A%B5-Ensemble-Learning-%EB%B0%B0%EA%B9%85Bagging%EA%B3%BC-%EB%B6%80%EC%8A%A4%ED%8C%85Boosting).

 

Bagging vs. Boosting

 

pycaret 홈페이지에서는 emsembling method로써 blend / stack model에 대한 기법도 추가적으로 제안하였으나, 여기까지하고 넘어가기로 한다..

 

 

 [2.7] Model analysis

  분석에 크게 다섯 가지 카테고리가 있었다. Plot / Interpret / Assign / Calibrate / Optimize

  [2.7.1] Plot Model

  Plot 안에도 종류가 많았다. 원하는 것들 위주로 내가 보여줄 수 있을 것 같다.

 

https://pycaret.org/plot-model/ (예시: error plot)

 내 연구에서 결과는 아래와 같이 나왔다.

 

 

Tunig하기 전 error plot; R^2 = 0.98
Tuning 이후 R^2가 상당히 증가했음을 확인

 

  [2.7.2] Interpret Model

 - SHAP value를 보여준다. SHAP value를 실제로 계산하려면 꽤나 귀찮은데, 패키지로 구현이 되어있어 매우 편하다.

 - SHAP value는 interpretable learning이 화두가 되면서 나온 키워드이다.

 - 읽어볼만한 링크: https://www.kaggle.com/dansbecker/shap-values

 

내 연구 결과에서 결과를 뽑아본 결과 아래와 같이 나왔다. label은 paper와 관련된 내용이어서 생략했고, 도메인 지식과 잘 합치하는 결과였다.

 

  [2.7.3] Assign Model

 - 비지도 학습에 활용된다. Clustering / anomaly dection 등

 - 필요한 경우 이후 나중에 다시 와서 찾아볼 것.

 

  [2.7.4] Calibrate Model

 - Classification에 특별히 적용되는 패키지이다.

 - 2.7.3와 동일

 

  [2.7.5] Optimize Threshold

 - Classification에 특별히 적용되는 패키지이다.

 - 2.7.3와 동일

 

 

 

 

 [2.8] Model Devployment

가장 마지막 장이다. 크게 네 가지 카테고리가 있었다. 예측 / 최종화 / 모댈 개발 / 패키지 연동을 위한 저장 및 불러오기기능을 소개해준다. 모델 개발 및 배포 관점에서 상당히 실용적이다.

 

모델 소개홈페이지의 말을 그대로 가져와 보았다. (https://pycaret.org/predict-model/)

Once a model is successfully deployed either on cloud using deploy_model or locally using save_model, it can be used to predict on unseen data using predict_model function. This functions takes a trained model object and the dataset to predict. It will automatically apply the entire transformation pipeline created during the experiment. For classification, predicted labels are created based on 50% probability, but if you choose to use a different threshold that you may have obtained using optimize_threshold, you can pass the probability_threshold parameter within predict_model. This function can also be used to generate predictions on hold-out / test set.

 

 

  [2.8.1] Predict Model

 - Prediction을 통해서 학습에 활용되지 않은 데이터의 예측성을 확인해볼 수 있다.

 

  [2.8.2] Finalized Model

 - 학습한 모델의 결과를 최종적으로 확정하여, 사용할 수 있는 모델로 변환하는 과정이다.

 

  [2.8.3] Deploy Model

 - 프로그래밍에서 배포를 의미한다.

 

여러 가지 영어가 있어서 참고 사항으로 가져와보았다. (출처: https://ukcasso.tistory.com/73)

 - 참고) Release: 같은 제품을 새롭게 만드는 것(예: 새로운 버전을 배포, 새로운 아이피 번로 부여)

 - 참고) Deploy: 프로그램 등을 서버와 같은 기기에 설치하여 서비스 등을 제공하는 의미
 - 참고) Distribute: 제품을 사용자들이 사용할 수 있도록 서비스 등을 제공하는 의미

 

  [2.9.4] Save / Load Model

 - 모델을 저장하고, 모듈로써 불러올 수 있다.

 - 이를 바탕으로 코드 최적화 등 다른 모듈과 결합하여 활용할 수 있게 된다.

 

끝.

 

참고) 2022-05-29 업데이트

SHAP Value를 customizing해서 paper에 실어야 할 경우가 생겼다.

 

원본 코드의 GIT-HUB source가 있어서 링크를 올려둔다. https://github.com/slundberg/shap/blob/5367bc4991970a0ad03054aedb7a128210f0252b/shap/plots/_beeswarm.py