Data scientist/Machine Learning

[Dacon] 심리 성향 예측 AI 경진대회 - Auto ML 하는 방법

반응형

 

심리 성향 예측 AI 경진대회

 

 

이 대회는 Dacon에서 진행한 대회로서 심리학 테스트 분석 알고리즘 개발 하는 대회였다. (https://dacon.io/competitions/official/235647/overview/description)

이 대회에서 어떤 착한분이 간단하게 AutoML를 하는 소스에 대해서 공유를 해줬는데 AutoML를 경험해보는데 있어서 좋은 경험이 될 것 같아서 가져왔다. 

 

데이터

 

 

평가

  • 심사 기준: AUC



소스

 

경로 설정 (Define your path)

path = 'data/'

import os
os.listdir(path)

 

데이터 불러오기 (Read Data)

import pandas as pd
train = pd.read_csv(path + 'train.csv')
test = pd.read_csv(path + 'test_x.csv')
submission = pd.read_csv(path + 'sample_submission.csv')

머신을 돌릴 때 앞부분의 소스는 이런식으로 고정해 놓고 path를 바꾸는 형식으로 하면 소스 템플릿 처럼 사용하기 편 할 것 같다.

 

데이터 구조 확인 (Checking the shapes of data)

print(train.shape)
print(test.shape)
print(submission.shape)

 

 

PyCaret 패키지 설치 (Install PyCaret)

!pip install pycaret

 우리가 autoMl를 하는데 있어 사용하는 패키지는 pycaret이다.

 

분류 작업에 필용한 함수 불러오기 (Import methods for classification task)

from pycaret.classification import *

 

실험 환경 구축 (Setup the environment)

  • PyCaret에서는 모델 학습 전 실험 환경을 구축 해주어야 합니다. setup 함수를 통해 환경을 구축할 수 있습니다.
  • setup 단계에서는 PyCaret이 자동으로 컬럼 형태를 인식합니다. 그 후 사용자에게 제대로 인식되었는지 확인을 받게 됩니다. 그 때 enter를 눌러주시면 됩니다.
  • 또한 주어진 데이터의 얼마를 사용하여 train / validation을 구축할지 묻게 되는데, 전체 데이터를 사용하고 싶다면 enter 눌러주시면 됩니다.
# 'voted' 컬럼이 예측 대상이므로 target 인자에 명시
# 'voted' column is the target variable
clf = setup(data = train, target = 'voted')

이런식으로 각 컬럼이 어떤 형태인지 확인을 한다. setup을 통해 어떤 데이터를 가지고 할지를 정한다. 거기서 data를 train으로 정하고 그 타겟 대상(맞춰야하는 대상)을 voted라고 명시한다.

 

 

모델 학습 및 비교 (Train models and compare)

  • 환경 구축을 했으니 PyCaret에서 제공하는 기본 모델에 대해 학습하고 비교해보겠습니다.
  • compared_models 함수를 통해 15개의 기본 모델을 학습하고 성능을 비교할 수 있습니다.
  • AUC 기준으로 성능이 가장 좋은 3개의 모델을 추려내어 저장해보겠습니다. 본 대회 평가지표가 AUC이기 때문에 AUC 기준으로 모델을 선정합니다.
best_3 = compare_models(sort = 'AUC', n_select = 3)

 

여기서는 모델을 비교한다. 여러가지의 모델을 넣고 그 중 3개를 선택하는 것이라고 생각하면 될 것 같다. 그중 3가지를 추려내 best_3 라는 변수명에 저장한다.

 

모델 앙상블 (Model Ensemble)

  • 학습된 3개의 모델을 앙상블 시키도록 하겠습니다. 본 대회는 score 최적화를 위해 확률 값을 예측해야 하므로 soft vote ensemble을 진행하겠습니다.
blended = blend_models(estimator_list = best_3, fold = 5, method = 'soft')

이전에 뽑았던 3가지를 가지고 vote를 하는데 있어서 soft 한 방식을 사용한다. ensemble중 대표적인 voting을 사용한 것 같다. voting에는 soft / hard한 방식으로 나눠진다.

hard는 각각의 모델들이 결과를 예측하면 단순하게 가장 많은 표를 얻은 결과를 선택하는 것이다.

soft는  class별로 모델들이 예측한 probability를 합산해서 가장 높은 class를 선택하는 것이다.

 

모델 예측 (Prediction)

  • 구축된 앙상블 모델을 통해 예측을 해보겠습니다.
  • setup 환경에 이미 hold-out set이 존재하므로 해당 데이터에 대해 예측을 하여 모델 성능을 확인하겠습니다.
pred_holdout = predict_model(blended)

이제 만들어진 모델을 통해 예측을 한다.

 

전체 데이터에 대한 재학습 (Re-training the model on whole data)

  • 현재까지 실험은 주어진 train 데이터를 다시 한 번 train / validation으로 나눠서 실험을 한 것이므로, 전체 train 데이터에 학습되어 있지 않습니다.
  • 최적의 성능을 위해 전체 데이터에 학습을 시켜주도록 하겠습니다.
final_model = finalize_model(blended)

 

대회용 test set에 대한 예측 (Predicting on test set for the competition)

  • predict_model 함수를 통해 재학습된 모델을 대회용 test set에 대해 예측해보겠습니다.
  • We will now use the re-trained model on the test set for the competition
predictions = predict_model(final_model, data = test)
predictions

 

정리

  1. pycaret
  2. 모델 앙상블

 

후기

처음 autoML를 보고 사용 했을때 되게 신세계였다. 여러가지 사람이 하는 작업들을 기계가 알아서 한다니 몬가 이해는 되긴하지만 사람의 공수가 점점 더 적어지는 것 같다. 나중에는 사람은 알고리즘에 대한 기본적인 이해 없이도 이런것들을 사용하는 방법만 익혀도 AI를 하는데 지장이 없을 것 같다. 몬가 이해보다는 사용법을 아는게 더 중요해질 것 같다.

다른 사람들도 이것을 한 번 해봤으면 좋겠다.

반응형