โ์ด๊ฑธ ๋ค ์ธ์ ์ฝ๋ฉํ์ง?โ์ ๋ํ ํด๋ต, PyCaret
์ด์ ์ค์ต์์ ์ผ์ผํ ๋จธ์ ๋ฌ๋ ์ฝ๋๋ฅผ ์จ๊ฐ๋ฉฐ ๋ถ๋ฅ ๋ชจ๋ธ์ ๋ง๋ค์๋ ๊ธฐ์ต, ์์ง๋ ์์ํ๋ค. ๊ทธ๋ฐ๋ฐ ์ด๋ฒ์๋ AutoML(์๋ํ ๋จธ์ ๋ฌ๋) ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ธ PyCaret
์ ์ฌ์ฉํด๋ดค๋ค. ๋จ ๋ช ์ค์ ์ฝ๋๋ก ์ ์ฒด ๋จธ์ ๋ฌ๋ ์ํฌํ๋ก์ฐ๋ฅผ ์๋ํํ๋ ๊ฒฝํ์ ์ ๋ง ์ถฉ๊ฒฉ ๊ทธ ์์ฒด์๋ค. ๐คฏ
๐ก ๋ก์ฐ์ฝ๋(Low-code) ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ ํ!
PyCaret์ Scikit-learn, XGBoost ๊ฐ์ ์ฌ๋ฌ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ์ฝ๊ฒ ์ธ ์ ์๊ฒ ๊ฐ์ธ์, ๋ฐ์ดํฐ ์ ์ฒ๋ฆฌ๋ถํฐ ๋ชจ๋ธ ํ์ต, ํ๋, ๋ฐฐํฌ๊น์ง ๋ชจ๋ ๊ณผ์ ์ ์๋ํํด์ค๋ค. ๋๋ถ์ ๋๋ ๋ชจ๋ธ๋ง ์์ฒด์ ๋ ์ง์คํ ์ ์์๋ค.
๐ PyCaret ํต์ฌ ์ํฌํ๋ก์ฐ: ๋ฑ 5๋จ๊ณ๋ง ๊ธฐ์ตํด!
PyCaret์ ์์ ์ ๋๋ผ์ธ ์ ๋๋ก ๊ฐ๋จํ 5๋จ๊ณ๋ก ์์ฝ๋๋ค.
Setup โก๏ธ Compare Models โก๏ธ Analyze Model โก๏ธ Prediction โก๏ธ Save Model
์ด ํ๋ฆ๋ง ๋ฐ๋ผ๊ฐ๋ฉด ๋๊ตฌ๋ ์ ๋ฌธ๊ฐ ์์ค์ ๋ชจ๋ธ์ ๋ง๋ค ์ ์๋ค๋ ๊ฒ ์ ๋ง ๋งค๋ ฅ์ ์ด์๋ค.
1๏ธโฃ ์คํ ์ค๋น: setup()
๋ชจ๋ ์์
์ ์์. setup
ํจ์ ํ๋๋ก ๋ชจ๋ ๊ฒ ์ค๋น๋๋ค. ๋ฐ์ดํฐ ๋ถ์, ๊ฒฐ์ธก์น ์ฒ๋ฆฌ, ์ธ์ฝ๋ฉ, ๋ฐ์ดํฐ ๋ถํ ๊น์ง ์์์ ๋ค ํด์ฃผ๋ ์๊ฐ์ ์์ฒญ๋๊ฒ ์๋ ์ ์์๋ค.
from pycaret.classification import *
s = setup(data, target = 'species', session_id = 123)
2๏ธโฃ ๋ชจ๋ธ ๋น๊ต: compare_models()
PyCaret์ ๊ฝ! ๐ธ ๋จ ํ ์ค์ ์ฝ๋๋ก ์์ญ ๊ฐ ๋ชจ๋ธ์ ํ ๋ฒ์ ํ์ตํ๊ณ , ๊ต์ฐจ ๊ฒ์ฆ ์ฑ๋ฅ์ ํ๋ก ์ซ ๋ณด์ฌ์ค๋ค. ์ด๋ค ๋ชจ๋ธ์ด ๋ด ๋ฐ์ดํฐ์ ๊ฐ์ฅ ์ ํฉํ์ง ์์๊ฐ์ ํ์ ํ ์ ์์๋ค.
best = compare_models()
3๏ธโฃ ๋ชจ๋ธ ์์ฑ ๋ฐ ํ๋: create_model()
& tune_model()
๊ฐ์ฅ ์ข์ ๋ชจ๋ธ์ด๋ ํน์ ๋ชจ๋ธ์ ๊ณจ๋ผ ๋ ๊น๊ฒ ํ๊ณ ๋ค ์ ์๋ค. tune_model()
์ RandomizedSearchCV๋ฅผ ๊ธฐ๋ฐ์ผ๋ก ์ต์ ์ ํ์ดํผํ๋ผ๋ฏธํฐ๋ฅผ ์ฐพ์ ๋ชจ๋ธ ์ฑ๋ฅ์ ๊ทน๋ํํด์ค๋ค.
dt = create_model('dt')
tuned_dt = tune_model(dt)
4๏ธโฃ ๋ชจ๋ธ ๋ถ์ ๋ฐ ์์ธก: plot_model()
& predict_model()
๋ชจ๋ธ์ ๋ง๋ค๊ณ ๋์ด ์๋๋ค. ํผ๋ ํ๋ ฌ, ํผ์ฒ ์ค์๋ ๋ฑ 15๊ฐ์ง๊ฐ ๋๋ ํ๋กฏ์ ๊ทธ๋ ค ๋ชจ๋ธ์ ๋ค๊ฐ๋๋ก ๋ถ์ํ ์ ์๋ค. SHAP์ ์ด์ฉํ ๋ชจ๋ธ ํด์๊น์ง ๊ฐ๋ฅํ๋ค๋, ์ ๋ง ๊ฐ๋ ฅํ๋ค.
plot_model(best, plot = 'confusion_matrix')
interpret_model(lightgbm, plot = 'summary')
5๏ธโฃ ๋ชจ๋ธ ์ ์ฅ ๋ฐ ๋ฐฐํฌ: save_model()
& create_api()
์ ๋ง๋ ๋ชจ๋ธ์ ์ ์ฒ๋ฆฌ ๊ณผ์ ๊น์ง ํฌํจ๋ ์ ์ฒด ํ์ดํ๋ผ์ธ์ผ๋ก ์ ์ฅํ๊ณ , FastAPI ์ฝ๋์ Dockerfile๊น์ง ์๋์ผ๋ก ์์ฑํด์ค๋ค. MLOps์ ์์์ ์ด๋ ๊ฒ ์ฝ๊ฒ ํ ์ ์๋ค๋..! ๐ณ
save_model(best, 'my_best_pipeline')
create_api(tuned_dt, api_name = 'my_iris_api')
create_docker('my_iris_api')
โจ ์ค๋์ ํ๊ณ
PyCaret์ ์ฌ์ฉํ ๊ฒฝํ์ โํ์ โ ๊ทธ ์์ฒด์๋ค. ์ด์ ์ค์ต์์ ์๋ฐฑ ์ค์ ๊ฑธ์ณ ํ๋ ๋ฐ์ดํฐ ์ ์ฒ๋ฆฌ, ๋ชจ๋ธ ๋น๊ต, ํ๊ฐ, ํ๋ ๊ณผ์ ์ ๋จ ๋ช ์ค์ ์ฝ๋๋ก ์์ถํ ์ ์์๋ค.
ํนํ compare_models()
๋ก ๋ชจ๋ ๋ชจ๋ธ์ ์ฑ๋ฅ์ ํ๋์ ๋น๊ตํ๊ณ ์์ํ๋ ์ ๊ทผ๋ฒ์ ์๊ฐ์ ๊ทน์ ์ผ๋ก ๋จ์ถ์์ผ ์ฃผ์๋ค. ๋ชจ๋ธ ์ฑ๋ฅ ๋ถ์๋ถํฐ API, Dockerfile ์์ฑ๊น์ง ์ง์ํ๋ ๊ฒ์ ๋ณด๋ฉฐ, PyCaret์ด ๋จ์ํ ๋น ๋ฅธ ์คํ๋ฟ๋ง ์๋๋ผ ํ๋ก๋์
ํ๊ฒฝ๊น์ง ๊ณ ๋ คํ ๋งค์ฐ ์ค์ฉ์ ์ธ ๋๊ตฌ๋ผ๋ ๊ฒ์ ๋๋ ์ ์์๋ค.
์์ผ๋ก ๋จธ์ ๋ฌ๋ ํ๋ก์ ํธ๋ฅผ ์์ํ ๋, PyCaret์ผ๋ก ๋น ๋ฅด๊ฒ ํ๋กํ ํ์ ์ ๋ง๋ค๊ณ ๊ฐ์ฅ ์ ๋งํ ๋ชจ๋ธ์ ํ์ํ๋ ๊ฒ์ด ๋์ ํ์ค ์ํฌํ๋ก์ฐ๊ฐ ๋ ๊ฒ ๊ฐ๋ค. ๐