<aside>

</aside>


πŸ“– 챕터 μ†Œκ°œ

15κ°•μ—μ„œ μš°λ¦¬λŠ” RΒ² μ μˆ˜κ°€ 높은, μ•„μ£Ό ν›Œλ₯­ν•œ νšŒκ·€ λͺ¨λΈμ„ λ§Œλ“€μ—ˆμŠ΅λ‹ˆλ‹€. ν•˜μ§€λ§Œ 높은 점수 ν•˜λ‚˜λ§ŒμœΌλ‘œ 이 λͺ¨λΈμ„ μ™„μ „νžˆ μ‹ λ’°ν•  수 μžˆμ„κΉŒμš”? 마치 κ±΄κ°•κ²€μ§„μ—μ„œ ν˜ˆμ••μ΄ 정상이라고 ν•΄μ„œ λͺΈ 전체가 κ±΄κ°•ν•˜λ‹€κ³  단정할 수 μ—†λŠ” κ²ƒμ²˜λŸΌ, λͺ¨λΈλ„ λ‹€κ°λ„λ‘œ '진단'ν•΄ 봐야 ν•©λ‹ˆλ‹€. 이번 μ‹œκ°„μ—λŠ” plot_model을 μ‚¬μš©ν•˜μ—¬ 우리 λͺ¨λΈμ˜ μˆ¨κ²¨μ§„ λ¬Έμ œμ μ€ μ—†λŠ”μ§€, μ˜ˆμΈ‘μ€ 편ν–₯λ˜μ§€ μ•Šμ•˜λŠ”μ§€, μ–΄λ–€ 데이터에 특히 영ν–₯을 많이 λ°›λŠ”μ§€ 등을 μ‚΄νŽ΄λ³΄λŠ” 'λͺ¨λΈ μ˜μ‚¬'κ°€ λ˜μ–΄λ³΄κ² μŠ΅λ‹ˆλ‹€.


🎯 챕터 λͺ©ν‘œ


πŸ’» 이번 μ±•ν„°μ˜ 전체 μ½”λ“œ 및 ν”„λ‘œμ νŠΈ ꡬ쑰

이번 μ±•ν„°μ˜ 핡심 μ½”λ“œ

πŸ’‘ 15κ°•μ—μ„œ μ΅œμ’…μ μœΌλ‘œ νŠœλ‹ν•œ tuned_best_model을 μ‚¬μš©ν•˜μ—¬, νšŒκ·€ λͺ¨λΈ 진단에 ν•„μˆ˜μ μΈ μ„Έ κ°€μ§€ 핡심 ν”Œλ‘―μ„ μƒμ„±ν•˜κ³  λΆ„μ„ν•©λ‹ˆλ‹€.

# 1. 라이브러리 및 νŠœλ‹λœ λͺ¨λΈ μ€€λΉ„ (1~15κ°• λ‚΄μš©)
from pycaret.datasets import get_data
from pycaret.regression import setup, compare_models, tune_model, plot_model

# 데이터 λ‘œλ“œ, μ„€μ •, λͺ¨λΈ 비ꡐ 및 νŠœλ‹
insurance_df = get_data('insurance')
setup(
    data=insurance_df, target='charges', session_id=123,
    transform_target=True, transform_target_method='quantile',
    fold_shuffle=True
)
best_model = compare_models(sort='R2')
tuned_best_model = tune_model(best_model, optimize='R2', n_iter=100)

# 2. λͺ¨λΈ 진단을 μœ„ν•œ 핡심 ν”Œλ‘― 생성
# μž”μ°¨ ν”Œλ‘― (Residuals Plot) - 였차의 νŒ¨ν„΄ 확인
print("--- 1. μž”μ°¨ ν”Œλ‘― (였차의 λ¬΄μž‘μœ„μ„± 확인) ---")
plot_model(tuned_best_model, plot='residuals')

# 예츑 μ—λŸ¬ ν”Œλ‘― (Prediction Error Plot) - μ˜ˆμΈ‘κ°’ vs μ‹€μ œκ°’ 비ꡐ
print("\\n--- 2. 예츑 μ—λŸ¬ ν”Œλ‘― (μ˜ˆμΈ‘κ°’ vs μ‹€μ œκ°’ 비ꡐ) ---")
plot_model(tuned_best_model, plot='error')

# μΏ‘ 거리 ν”Œλ‘― (Cook's Distance Plot) - 영ν–₯λ ₯ μžˆλŠ” 데이터 확인
print("\\n--- 3. μΏ‘ 거리 ν”Œλ‘― (영ν–₯λ ₯ μžˆλŠ” 데이터 확인) ---")
plot_model(tuned_best_model, plot='cooks')

μ½”λ“œ μ‹€ν–‰ κ²°κ³Ό 미리보기

1. μž”μ°¨ ν”Œλ‘― (residuals) μ‹€ν–‰ κ²°κ³Ό

image.png

2. 예츑 μ—λŸ¬ ν”Œλ‘― (error) μ‹€ν–‰ κ²°κ³Ό

image.png