<aside>
</aside>
์ถํํฉ๋๋ค! ์ฐ๋ฆฌ๋ ์ง๋ ์๊ฐ๊น์ง ์ฑ๋ฅ์ด ๋ฐ์ด๋ ๋ชจ๋ธ๋ค์ ๋ง๋ค์์ต๋๋ค. ๊ทธ๋ฐ๋ฐ ๋ง์ฝ ์ฑ๋ฅ์ด ๊ฐ์ฅ ์ข์ ๋ชจ๋ธ์ด ๊ทธ ํ๋จ ๊ทผ๊ฑฐ๋ฅผ ์ ํ ์ค๋ช
ํ ์ ์๋ '๋ธ๋๋ฐ์ค'๋ผ๋ฉด ์ด๋จ๊น์? ๋น์ฆ๋์ค ํ์ฅ์์๋ '์?'๋ผ๋ ์ง๋ฌธ์ ๋ตํ ์ ์๋ ๋ชจ๋ธ์ ์ ๋ขฐ๋ฐ๊ธฐ ์ด๋ ต์ต๋๋ค. ์ด๋ฒ ์๊ฐ์๋ ์ฑ๋ฅ๊ณผ ํด์ ๊ฐ๋ฅ์ฑ์ ๊ท ํ์ ๋ง์ถ๋ ์ ๋ฌธ๊ฐ์ ์ธ ์ ๊ทผ๋ฒ์ ๋ฐฐ์ฐ๊ณ , interpret_model
๊ณผ SHAP์ ์ฌ์ฉํด ๋ธ๋๋ฐ์ค ๋ชจ๋ธ์ ๋จธ๋ฆฟ์์ ๋ค์ฌ๋ค๋ณด๋ ๋ฐฉ๋ฒ์ ์ตํ๋๋ค.
interpret_model
์ด ํธ๋ฆฌ ๊ธฐ๋ฐ ๋ชจ๋ธ์์ SHAP์ ํตํด ๊ฐ์ฅ ์ ์๋ํ๋ค๋ ๊ฒ์ ์ดํดํฉ๋๋ค.interpret_model()
ํจ์๋ฅผ ์ฌ์ฉํ์ฌ LightGBM๊ณผ ๊ฐ์ ๋ณต์กํ ๋ชจ๋ธ์ ํ๋์ ํด์ํ ์ ์์ต๋๋ค.๐ก ํด์์ด ์ฉ์ดํ lda ๋ชจ๋ธ๊ณผ ์ฑ๋ฅ์ด ๋ฐ์ด๋ lightgbm ๋ชจ๋ธ์ ๋น๊ตํ๊ณ , SHAP์ ์ง์ํ๋ lightgbm ๋ชจ๋ธ์ ๋ด๋ถ๋ฅผ ํด์ํด ๋ด ๋๋ค.
# 1. ๋ผ์ด๋ธ๋ฌ๋ฆฌ ์ค๋น
from pycaret.datasets import get_data
from pycaret.classification import setup, create_model, tune_model, interpret_model, predict_model
# 2. ์คํ ํ๊ฒฝ ์ค์
df = get_data('juice')
setup(data=df, target='Purchase', session_id=786, fold_shuffle=True)
# 3. (๊ธฐ์ค ๋ชจ๋ธ) ํด์ ๊ฐ๋ฅํ LDA ๋ชจ๋ธ ์ฑ๋ฅ ํ์ธ
print("--- 1. ๊ธฐ์ค ๋ชจ๋ธ(LDA) ์์ฑ ๋ฐ ์ต์ข
์ฑ๋ฅ ---")
lda = create_model('lda')
predict_model(lda)
# 4. (ํด์ ๋์) LightGBM ๋ชจ๋ธ ํ๋ ๋ฐ ์ต์ข
์ฑ๋ฅ ํ์ธ
print("\\n--- 2. ํด์ ๋์ ๋ชจ๋ธ(LightGBM) ์์ฑ ๋ฐ ์ต์ข
์ฑ๋ฅ ---")
lgbm = create_model('lightgbm')
tuned_lgbm = tune_model(lgbm, optimize='F1', choose_better=True)
predict_model(tuned_lgbm)
# 5. ํ๋๋ LightGBM ๋ชจ๋ธ ํด์ (SHAP)
print("\\n--- 3. Global Interpretation (SHAP Summary Plot) ---")
interpret_model(tuned_lgbm)
print("\\n--- 4. Local Interpretation (SHAP Reason Plot) ---")
interpret_model(tuned_lgbm, plot='reason', observation=0)
ํฅ๋ฏธ๋กญ๊ฒ๋, ์ด ๊ฒฝ์ฐ์๋ ๋ ๋จ์ํ๊ณ ํด์ ๊ฐ๋ฅํ lda ๋ชจ๋ธ์ด ๋ณต์กํ tuned_lgbm ๋ชจ๋ธ๋ณด๋ค ํ๋์์ ํ ์คํธ์์ ๋ ๋์ F1 ์ ์๋ฅผ ๊ธฐ๋กํ์ต๋๋ค!
๋ชจ๋ธ | ๊ต์ฐจ ๊ฒ์ฆ (CV) Mean F1 | ํ๋์์ (Test) F1 | SHAP ํด์ ๊ฐ๋ฅ |
---|---|---|---|
lda (๋จ์ ๋ชจ๋ธ) |
0.8186 | 0.8310 โจ | โ |
tuned_lgbm (๋ณต์ก ๋ชจ๋ธ) |
0.8113 | 0.8228 | โ |
interpret_model(tuned_lgbm)
์คํ ๊ฒฐ๊ณผ (Summary Plot)