오늘 할 일: 끝내주게 숨쉬기
article thumbnail

지난 포스트 pycaret 패키지를 이용한 분류모델 학습 (1) 에서는 머신러닝 학습을 위해 환경을 세팅하고, 평가지표를 추가하고, 다양한 모델을 학습하여 비교하는 실습을 했습니다. 이어서 본 포스트에서는 개별 모델 생성, 모델 튜닝, 모델을 이용해 예측하기, 모델 완성하고(finalize) 저장하기를 진행하겠습니다. 

 

 

1) create_model

 

머신러닝 모델을 학습하고 Cross Validation을 이용해 검증을 진행하는 함수입니다. 분석가가 학습하고자 하는 알고리즘을 직접 지정하는데, 알고리즘에 적용하고 싶은 하이퍼파라미터도 직접 설정할 수 있습니다. 

머신러닝 분석에 대한 방향성이 없을 때는 일단 적용할 수 있는 알고리즘들을 모두 적용해보는 compare_models 함수를 사용할 수 있겠습니다만, 분석가가 어느 정도 데이터를 이해하고 적용하고 싶은 특정 알고리즘이 있다면 create_model 함수를 이용해 개별 모델을 학습하는 것도 방법이 될 수 있을 것 같아요.

사용 가능한 알고리즘 목록들은 models() 를 이용하여 확인할 수 있습니다.

 

예를 들어 트리가 50개이며 최대 깊이가 5인 랜덤포레스트 모델을 학습한다면 아래와 같이 코드를 작성합니다.

 

rf = create_model('rf',
                  n_estimators=50,
                  max_depth=5)

 

 

2) tune_model

 

앞서 진행한 create_model로 모델을 학습할 때, 특별히 하이퍼파라미터를 지정하지 않으면 default 값으로 학습을 진행합니다. 학습한 모델의 하이퍼파라미터를 튜닝하여 성능을 높이고 싶다면 tune_model 함수를 모델에 적용합시다.

 

위에서 학습한 랜덤포레스트 모델을 optuna 라는 하이퍼파라미터 최적화 모듈을 이용하여 튜닝해보겠습니다. 튜닝을 할 때 최적화할 평가지표는 optimize 옵션을 변경하여 쉽게 지정할 수 있습니다. 하이퍼파라미터를 튜닝할 때 사용 가능한 라이브러리와 라이브러리별로 사용 가능한 알고리즘 종류는 공식문서에서 확인하세요!

 

tuned_rf = tune_model(rf, 
                      search_library='optuna', 
                      optimize='profit')

 

profit을 최적화하는 방향으로 튜닝을 하고나니 이전보다 해당 성능지표값이 상승했습니다(-43899 -> 5883). 그리고 튜닝을 진행하기 전과 후의 하이퍼파라미터를 비교해보았는데요, 튜닝 후 모델이 좀 더 깊어지고 트리 수가 많아진 것을 확인할 수 있었습니다.

params_rf = pd.DataFrame([rf.get_params()]).T.reset_index()
params_rf.columns = ['parms', 'before']
params_tuned_rf = pd.DataFrame([tuned_rf.get_params()]).T.reset_index()
params_tuned_rf.columns = ['parms', 'after']
display(params_rf.merge(params_tuned_rf, on='parms'))

 

 

3) predict_model

 

모델을 확정하기 전, 테스트 데이터셋에 대해 예측하고 성능을 확인하는 작업이 필요하죠. setup 단계에서 미리 분리했었던 테스트 데이터셋을 모델에 넣어 예측결과를 확인해보고, 성능도 확인하기 위해 predict_model 함수를 사용합니다.

 

이 실험은 24000개의 전체 데이터 중, 16799개를 학습 및 검증 데이터로, 7201개를 테스트 데이터로 분리했었는데요, predict_model을 통해 성능을 확인하고 각각의 레코드마다 실제값과 예측값을 확인할 수 있습니다.

 

predict_model(rf) # 튜닝 전

 

predict_model(tuned_rf) # 튜닝 후

 

 

4) finalize_model / save_model

 

finalize_model은 모델을 완성하는 단계로, 전체 데이터셋(학습+검증+테스트)을 이용해 앞 단계에서 사용한 알고리즘과 하이퍼파라미터로 학습을 진행합니다. 

save_model은 완성한 모델을 pickle 파일로 저장하는 함수로, 이후에 모델을 운영을 할 때 저장한 모델을 불러와 사용할 수 있겠습니다.

final_rf = finalize_model(estimator=tuned_rf)
save_model(model=final_rf, 
           model_name='final_rf',
           verbose=False)

 

 

지금까지 pycaret을 이용하여 분류모델을 학습하는 방법에 대해 알아보았습니다. pycaret을 사용해보니 굉장히 직관적이고 쉬우면서도 강력한 AutoML 패키지라는 것을 확실하게 알 수 있었어요. 어떤 머신러닝 방법론을 적용해야 좋을지 막막할 때, 빠르게 다양한 알고리즘을 학습해보고 싶을 때 이 패키지를 이용하면 굉장히 많은 도움을 받을 수 있을 것 같습니다. 🥕