AutoML, Autogluon vs mljar-supervised

    목차
반응형

AutoML?

Auto+ML로 머신러닝에 필요한 데이터 전처리, 모델 튜닝, 학습 등 여러 수행사항들을 쉽고 간단하게 코드 몇 줄을 통해 자동으로 알아서 해주는 도구이다. 간단하기만 할 뿐만 아니라 성능도 잘 나온다.

 

AutoML의 필요성

- 기존 방식: 데이터를 가공(결측치 처리 등)하여 어떤 알고리즘을 사용할지 선택하고 필요 시 하이퍼파라미터를 튜닝하며 학습 및 평가를 진행한다. 만약 결과가 좋지 않으면 다른 알고리즘으로 새롭게 테스트하는 과정을 무한 반복 …
이걸 코드로 옮겨 적으면 수십~수백 줄에 달하는 노동 집약적인 과정이며 시간 소요도 크다.
- 하지만 automl 패키지를 사용하면 `model.fit()` 몇 줄로 가공부터 학습까지 모든 과정이 끝난다.

- 따라서 데이터 분석가/사이언티스트가 다른 과정에 시간을 더 쏟을 여유가 생긴다.

- 자주 언급되고 사용되는 automl 툴에는 크게 AWS에서 만든 `autogluon`과 MLJAR에서 만든 `mljar-supervised`가 있다.

 

실제 코드(Autogluon)

from autogluon.tabular import TabularPredictor

label = 'target'  # 예측할 Y 컬럼명

predictor = TabularPredictor(path='autogluon', label=label).fit(train_data=train_data)

 

실제 코드(mljar)

from supervised import AutoML

X = train_data[features]
y = train_data[label]

automl = AutoML(results_path="mljar", eval_metric='accuracy')
automl.fit(X, y)

 

 

Autogluon

- AWS에서 개발한 automl 툴 (autogluon)

- 테이블 형식 데이터 분류/회귀 모델을 비롯하여 텍스트 분류, 이미지 분류/객체 탐색, 시계열 예측 모델 생성 등을 지원
- AWS에서 개발, 지원하는 패키지이기 때문에 Sagemaker를 통해 배포하기 용이하다. (전용 컨테이너를 제공한다.)

 

 

Autogluon의 학습 방식

데이터 전처리

- 회귀/분류 모델 결정

- 범주형 변수를 원-핫 인코딩 또는 임베딩 처리, 결측치는 모델에 따라 다르긴 하지만 중앙값으로 채우고, 동일한 값만 있는 컬럼 제거, 모두 다른 값만 있는 컬럼 제거 등 표준화 작업을 거친다.

 

학습 및 튜닝

- 알고리즘 종류: 랜덤포레스트, XGBoost, Light GBM, KNN, ExtraTrees, CatBoost, DNN 및 앙상블, 스태킹 모델
- 홀드아웃 비율에 따라 train / validation 세트로 나눠 학습 및 평가를 진행
- `presets` 파라미터를 통해 성능 위주/적당한 성능과 추론 시간/빠른 추론 시간을 선택할 수 있다.

Presets Model Quality Use Cases Fit Time (Ideal) Inference Time (Relative to medium_quality) Disk Usage
best_quality State-of-the-art (SOTA), much better than high_quality When accuracy is what matters 16x+ 32x+ 16x+
high_quality Better than good_quality When a very powerful, portable solution with fast inference is required: Large-scale batch inference 16x 4x 2x
good_quality Significantly better than medium_quality When a powerful, highly portable solution with very fast inference is required: Billion-scale batch inference, sub-100ms online-inference, edge-devices 16x 2x 0.1x
medium_quality Competitive with other top AutoML Frameworks Initial prototyping, establishing a performance baseline 1x 1x 1x

- `best_quality`는 성능은 좋지만 학습 및 추론 시간이 오래 걸려 실시간 예측이 필요한 서비스에는 맞지 않는다.
- `medium_quality`는 추론 속도는 빠르지만 성능 면에서 뒤처지는 단점이 있다.
- 필요 시 하이퍼파라미터 튜닝 옵션을 줄 수 있다.

 

모델 평가

- `predictor.leaderboard()`를 통해 모델별 평가, 추론 시간 등을 확인할 수 있다.

- `predictor.evaluate(test_data)`를 통해 테스트 데이터에 대한 평가 지표들을 확인할 수 있다.

원래 dict로 나오는 결과를 Dataframe으로 처리해주었다.

- `predictor.feature_importance(data=test_data)`를 통해 Permutation Importance를 확인할 수 있다.

참고) Permuation Importance 관련하여 정리한 github

 

 

mljar-supervised

- MLJAR 팀에서 만든 automl 툴 (mljar-supervised)

- Feature Engineering을 해주며 결과에 대한 분석 및 시각화까지 해준다는 장점이 있다.

 

 

mljar의 학습 방식

- `Baseline`을 두고 ml로 예측이 가능한 데이터인 지를 확인
    - (무지성으로) 예측을 했을 때 결과를 baseline으로 둠
    - 예) 비가 오는지를 예측할 때 비 오는 날의 데이터가 20%인 경우, 예측 정확도 80%가 baseline

 

아래 랜덤 데이터로 학습하여 모델을 생성한 예제를 보자. logloss는 작을수록 좋은 모델인데, `Baseline`의 성능이 가장 뛰어나다. 이 말은 ML로 예측이 되지 않는 데이터로 가정 수립과 데이터 수집부터 다시 수행해야 한다는 의미이다.

- `autogluon`의 `presets` 파라미터와 비슷하게 `mode` 파라미터가 있다. Explain(데이터 이해), Perform(배포를 위한 학습), Compete(성능 위주)를 선택할 수 있다.
- 알고리즘 종류: 랜덤 포레스트, ExtraTrees, XGBoost, LightGBM, CatBoost, KNN, DNN 및 앙상블 모델

 

 

Explain 모드

- 각 알고리즘들로 학습 및 앙상블 모델 생성
- 학습 당시 지정한 경로에 학습 결과 문서(`README.md`)를 저장

- 각 알고리즘을 선택해서 들어가면 어떤 하이퍼 파라미터로 학습 되었는지, 평가 결과는 어떠한지, 중요 feature가 무엇인지, 검증 당시 틀리게 예측한 데이터가 어떤 feature 때문에 그랬는지를 설명해주는 그래프를 볼 수 있다. → autogluon에서는 직접 해야하는 작업을 대신 해주는 장점이 있다.

학습 결과
학습에 사용된 하이퍼파라미터
피처 중요도(permutation importance)
피처 중요도(SHAP)

 

 

Perform 모드

1차 학습

- 기본 알고리즘들로 학습을 진행
- 하이퍼 파라미터 튜닝 (랜덤 서치)

 

Feature Engineering - 1 (Golden Features)

- 모든 feature 중 한 쌍 골라 가능한 모든 연산에 대한 새로운 feature를 만든다. (덧셈/뺄셈/곱셈/나눗셈)
- 각 feature만으로 예측 모델을 만들고 모델을 평가하여, 성능이 가장 좋은 N개의 feature를 선정하여 새로운 변수로 가져간다.


Feature Engineering - 2 (Features Selection)

- 학습 데이터에 랜덤 feature를 추가, 1차 학습 때의 best model로 재학습
- Feature importance를 확인했을 때, 랜덤 feature보다 중요도가 낮은 feature를 제거


2차 학습

- Feature Engineering이 끝난 feature로 하이퍼 파라미터 튜닝
- 앙상블, 스태킹 모델 생성

 

성능

Feature Engineering 이전 LGBM와 CBoost의 정확도는 각각 86.45%와 86.3%

 

Feature Engineering 이후 각각의 정확도는 87.25%, 86.85%으로 이전보다 약간 개선이 된 것을 확인할 수 있다.

 

 

Autogluon VS mljar

성능 비교

- 데이터: class 예측 데이터의 테스트 데이터 중 4000개를 훈련, 1000개를 평가

test_data = pd.read_csv('https://autogluon.s3.amazonaws.com/datasets/Inc/test.csv')
train_data = test_data.sample(4000, random_state=42)
test_data = test_data.drop(train_data.index).sample(1000, random_state=42)

autogluon mljar

medium_quality

Explain

good_quality 

Perform

high_quality

Compete

best_quality
 

- 데이터의 종류마다 결과는 다를 수 있지만 이 데이터에서는 정확도로 보나 f1으로 보나 mljar의 판정승

- (참고1) 일반적인 RandomForest, XGBoost, LGBM의 예측 정확도는 각각 86.4%, 87.1%와 88.3%로 automl이 약간 더 좋은 성능을 보인다.

- (참고2) 2년 전에 회귀 모델로 실험했을 때는 autogluon이 약간 더 좋았다.

 

 

편의성 비교

- feature importance나 shap 등 여러 방면에서 mljar가 더 많은 정보를 제공한다.
- autogluon은 AWS에서 개발한 툴이기 때문에 SageMaker에 빠르게 적용할 수 있다는 장점이 있다.

 

 

AutoML 툴의 장단점

장점

- 코드 단 몇 줄로 데이터 전처리(혹은 피처 엔지니어링), 모델 학습, 하이퍼 파라미터 튜닝, 모델 저장, 모델 평가, 피처 중요도 등 거의 모든 예측 모델 수행에 필요한 과정을 할 수 있다.

- 일반적인 모델보다 성능이 뛰어나다.

 

단점

- 오래 걸린다. (클라우드 서비스 이용 시 과도한 요금 문제가 발생할 수 있다.)

- 관리를 해주지 않으면 용량을 많이 차지한다.

- 당연한 말이겠지만 커스텀이 어렵다.

 

 

 

728x90
반응형