Scikit-Learn에서는 PartialDependenceDisplay을 이용하여 Partial Dependence Plot(PDP), Individual Conditional Expectation(ICE) Plot을 그릴 수 있다. 이번 포스팅에서는 그 방법을 알아본다.
Partial Dependence Plot, Individual Conditional Expectation Plot에 대한 개념은 아래 포스팅을 참고하기 바란다.
PartialDependenceDisplay 사용법
여기서는 보스턴 집값 데이터를 사용하며 모형 클래스는 랜덤 포레스트로 정했다.
import pandas as pd
from sklearn.ensemble import RandomForestRegressor
from sklearn.inspection import PartialDependenceDisplay
from sklearn.datasets import load_boston
boston = load_boston() ## 보스턴 데이터
df = pd.DataFrame(boston.data, columns=boston.feature_names)
df['MEDV'] = boston.target
feature_names = ['AGE', 'RAD', 'LSTAT', 'B', 'INDUS', 'CHAS']
X = df[feature_names].values ## 설명 변수
y = df['MEDV'].values ## 반응 변수
## 모형 학습
model = RandomForestRegressor(max_depth=3, random_state=0).fit(X, y)
PartialDependenceDisplay은 from_estimator를 이용하여 PDP, ICE Plot을 그릴 수 있다. from_estimator는 기본적으로 학습된 모델, 의존도 계산 시 필요한 데이터, 관심 변수 인덱스 등을 인자로 받는다. 또한 kind 인자가 'average'인 경우 PDP, 'ice'인 경우 ICE Plot 그리고 'both'인 경우에는 PDP, ICE Plot 모두 그려준다.
아래 코드를 통해 PartialDependenceDisplay 사용법을 익혀보자.
import matplotlib.pyplot as plt
fig = plt.figure(figsize=(8, 8))
fig.set_facecolor('white')
ax = fig.add_subplot()
feature_idx = 2
PartialDependenceDisplay.from_estimator(model, ## 학습 모델
X, ## 의존도 계산시 필요한 데이터
[feature_idx], ## 관심 변수
feature_names=feature_names, ## 변수 이름
kind='average', ## average = pdp, ice = ice
ax=ax
)
이번엔 kind='both'로 설정하여 PDP, ICE Plot을 그려보자.
fig = plt.figure(figsize=(8, 8))
fig.set_facecolor('white')
ax = fig.add_subplot()
PartialDependenceDisplay.from_estimator(model, ## 학습 모델
X, ## 의존도 계산시 필요한 데이터
[feature_idx], ## 관심 변수
feature_names=feature_names, ## 변수 이름
kind='both', ## average = pdp, ice = ice
ax=ax
)
PDP, ICE Plot 모두 색상이 같으므로 구분이 되지 않는다. 구분을 해주기 위하여 ice_lines_kw, pd_line_kw를 이용하여 선 스타일을 바꿔보자.
fig = plt.figure(figsize=(8, 8))
fig.set_facecolor('white')
ax = fig.add_subplot()
PartialDependenceDisplay.from_estimator(model, ## 학습 모델
X, ## 의존도 계산시 필요한 데이터
[feature_idx], ## 관심 변수
feature_names=feature_names, ## 변수 이름
kind='both', ## average = pdp, ice = ice
ice_lines_kw={'color':'k', 'alpha':0.5}, ## ice 선 스타일
pd_line_kw={'color':'r', 'linewidth':4}, ## pdp 선 스타일
ax=ax
)
여기서 다루지 않는 인자에 대해서는 여기를 참고하기 바란다. 부디 이번 포스팅이 도움이 되었으면 좋겠다.
댓글