AWS Hans-on Lab #3 : 자동화된 기계학습 AutoML - AutoGluon
Written by Minhyeok Cha
현대 사회에서 기계 학습은 금융 서비스, 의료, 마케팅 및 광고, 제조에 이리까지 널리 사용되고 있습니다.
거의 모든 산업, 어느 한 형태의 기계 학습을 사용하여 상당한 생산성을 확보하는 것 같습니다.
자동화 기술도 기계 학습과 함께 발전하고 있는데 이 두 가지를 결합하여 AutoML이 가능하게 되었습니다.
이번 블로그는 AutoML에 대한 필요성과 AutoML의 프레임워크 중 하나인 AutoGluon에 대한 소개입니다.
AutoML의 필요성
기존 ML의 학습 하기 위해선 다음과 같은 공정을 거쳐야 합니다.
데이터 수집
알고리즘 선택
모델 학습 및 평가
파라미터 튜닝
모델 예측 및 해석
이는 기계 학습 모델 구현과 관련된 복잡성과 데이터 세트에 비례하는 학습량의 이슈가 있습니다. 또 최상의 모델을 선택하기 전에 여러 모델을 생성, 비교하기 위한 알고리즘, 파라미터를 고려해야 합니다.
예를 들어, 고객의 구매 행동을 예측하거나, 이미지에 있는 사물을 인식하거나, 텍스트의 감정을 분석하는 등의 문제를 머신 러닝으로 풀 수 있습니다. 하지만 머신 러닝에는 다양한 종류의 알고리즘과 파라미터가 있으며, 데이터의 형태와 크기, 목표 변수의 유형, 모델의 성능과 복잡도, 계산 시간과 비용 등이 있습니다.
AutoML은 이러한 문제를 단순화시킬 수 있습니다.
AutoGluon 프레임워크 소개
AWS에서 개발한 이 인기 있는 AutoML 오픈 소스 도구 키트는 텍스트, 이미지 및 테이블 형식 데이터에 대한 다양한 기계 학습 및 딥 러닝 모델에서 강력한 예측 성능을 얻는 데 도움이 됩니다. 설치는 Linux 및 Mac 운영 체제에서 지원되며 Windows는 이 툴킷에 대해 공식적으로 지원되는 OS가 아닙니다.
AutoGluon은 다음과 같은 이점이 있습니다.
단순성 : 분류 및 회귀 모델과 배포에 대한 학습은 몇 줄의 코드로 수행 가능
견고성 : 기능 엔지니어링이나 데이터 조작을 수행하지 않고도 원시 데이터 사용 가능
예측 가능한 타이밍 : 지정된 시간 제약 조건 하에서 최상의 모델 확보
내결함성 : 중단된 경우에도 학습을 재개할 수 있으며 모든 중간 단계 검사 가능
AutoGluon은 Python 3.6 버전 이상이 필요합니다. 그리고 해당 프레임워크는 테이블 형식 예측, 이미지 예측, 객체 감지, 텍스트 예측, 멀티 모델 예측이 가능하며 이번 블로그에서는 테이블 형식 예측 (TabularPrediction)을 해보겠습니다.
실습
외부에서 가져온 데이터 셋을 가지고 AutoGluon 모델링을 사용하여 정보를 추출하고 저장합니다. 이후 Athena와 QuickSight를 통해 결과값을 가시성 높게 표현 가능합니다.
💡데이터를 내려받는 리소스는 최소화하고 많은 양의 데이터 기반 의사결정이 가능토록 구성
1. 실습 준비물
① AWS SageMaker - 노트북 인스턴스 생성
② AWS Gluon 설치
③ 데이터 셋 가져오기
2. AutoGluon TabularPrediction demo
💡 데모 목적
데모 데이터 세트는 뇌졸중에 대한 변수를 예측하기 위한 ML입니다.
다운받은 데이터 세트 중 뇌졸중 환자 레이블을 삭제한 뒤, AutoGluon이 나머지 레이블을 갖고 해당 환자가 뇌졸중 환자인지 판단하도록 교육합니다.
① 데이터 셋 확인
※ 파이썬 중 pandas를 import 후 위에서 가져온 데이터 셋 파일을 접목해 확인합니다.
② 라이브러리 추가
from sklearn.model_selection import train_test_split
from autogluon.tabular import TabularDataset, TabularPredictor
※ sklearn = 파이썬 소프트웨어, 기계 학습 라이브러리
train_test_split = sklearn 기능 중 데이터 분할을 위한 함수
③ 데이터 셋 확인 후 stroke 열 삭제
※ 이번 데모는 stroke가 걸린 사람을 다른 정보로 예측하는 테스트이기 때문에 해당 열을 삭제
test_data=df_test.drop(['stroke'],axis=1)
④ 머신러닝 모델 생성
predictor= TabularPredictor(label ='stroke').fit(train_data = test_data, verbosity = 2,presets='best_quality')
💡TabularPredictor = 사용해 테이블 형식 데이터 세트(분류 또는 회귀)의 열에서 값을 예측
label = 예측할 대상 변수가 포함된 열의 이름
fit = 훈련 데이터 삽입 후 ML 모델 훈련 후 가장 좋은 모델을 선택
verbosity=2 = 예측 변수가 최상의 모델에 도달 과정 수행 단계 표시
0: 예외만 기록
1: 경고 + 예외만 기록
2: 표준 로깅
3: 상세 로깅(예: 50회 반복마다 로그 유효성 검사 점수)
4: 최대 상세 로깅(예: 반복마다 유효성 검사 점수 로그)
presets=best quality = 학습된 모델 중 최상의 모델 선택
추가로 AutoGluon은 여섯 종류의 프리셋을 지원합니다.
- best_quality
- best_quality_with_high_quality_refit
- high_quality_fast_inference_only_refit
- good_quality_faster_inference_only_refit
- medium_quality_faster_train
- optimize_for_deployment
⑤ 코드실행(학습)
※ AutoGluon은 'stroke' 열이 삭제되었음에도 불구하고 해당 레이블이 binary 문제라는 것을 예측 성공을 확인, 혹은 도출된 값이 사용자가 원하지 않더라도 아래 글을 확인하여 변경 가능
※ 추가로 분류 작업에 대한 accuracy 메트릭을 자동으로 선택 되었음을 확인
해당 코드 결과는 TabularPredictor 문서 확인
⑥ 사용된 학습 모델 확인
# 각 모델 유형에 대한 예상 성능을 나열
predictor.fit_summary()
# 위에서 나열된 모델 중 테스트 점수를 측정해 순서대로 나열
predictor.leaderboard(test_data, silent=True)
⑦ 결과 및 근거
결과값
0 은 음성, 1은 양성을 바라봅니다.
옆의 사진으로 확인해 볼 때 3232 테이블의 0 값은 0.97, 1은 0.02이므로 뇌졸중이 아닐 확률이 97%라는 수치를 도출해 냄을 확인합니다.
근거
# 결과 도출에 사용된 아이템 확인
predictor.feature_importance(data=test_data)
결과 도출에 뇌졸중이 양성일수록 나이, bmi, 당뇨가 높다는 것을 확인합니다.
정확도 확인
이번 머신 러닝에서의 예측 정확도, 재현율, 정밀도 등을 확인합니다.
마무리
머신 러닝이 어려워서 지금까지 손을 안 대고 있다가 기회가 되어, 한번 사용해 보았습니다.
아쉽게도 블로그 작성 기간 중 테스트 계정 QuickSight 서비스가 구독 해체라 구현은 하지 못했습니다.
AutoGluon의 테이블 데이터만 사용해 보았지만, 이 부분 만으로 정말 간단하고 편리하게 머신 러닝 모델을 학습할 수 있다는 점이 좋았으며 학습 시간이나 예측 시간 등의 리소스도 확인이 가능하여 좋았습니다.
뿐만 아니라 가볍게 테스트할 수 있도록 AutoGluon 문서 자체에 튜토리얼 세션이 있어서 더더욱 가볍고 이해하기 편한 데모를 시연할 수 있었습니다.
Comments