์๋ํ๋ ๊ธฐ๊ณ ํ์ต AutoML - AutoGluon
- 2023๋ 5์ 13์ผ
- 3๋ถ ๋ถ๋
์ต์ข ์์ ์ผ: 2024๋ 2์ 19์ผ
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 ๋ฌธ์ ์์ฒด์ ํํ ๋ฆฌ์ผ ์ธ์ ์ด ์์ด์ ๋๋์ฑ ๊ฐ๋ณ๊ณ ์ดํดํ๊ธฐ ํธํ ๋ฐ๋ชจ๋ฅผ ์์ฐํ ์ ์์์ต๋๋ค.







