Permutation Importance & Partial Dependence Plot 정리

Permutation Importance과 Pertial Dependence Plot은 Machine Learning Model에서 Input과 Output간의 관계를 이해하기 위한 가장 쉬운 방법론 중 하나이다.

Model을 평가하는 여러 방식이 있지만 그 중에 우리는 Output에 대해서 어떠한 Feature가 가장 영향을 많이 주었는지를 보고 싶을 때가 있는데 이러한 Concept을 Feature Importance라고 말한다.

오늘 정리하는 Permutation Importance와 Partial Dependence Plot은 Feature Importance를 알아보는 방법론이다.

해당 두 방식은 모두 모델이 기본적으로 Fitting이 완료된 이후에 사용이 가능한 방법으로 Lime이나 Shap Value에 비교해서 Kaggle등의 Competition시 함께 하는 팀 구성원들에게 설명이 용이하여 자주 사용될 것이라 생각되어, 이 곳에 미리 대략 정리해둔다.

Permutation Importance

Permutation Importance의 기본적인 Concept은 다음과 같다.

1.앞서 서론에서 언급한 바와 같이 Fitting이 완료된 Model을 구한다.

2. 특정 Feature의 Importance를 파악하기 위해서는 해당 Feature의 Column Value를 무작위로 섞어준 후 Prediction을 한다.

3. 기존 Target Value와 Predicted Value간의 차이는 Shuffle을 진행한 Feature의 중요성을 측정하는데 사용할 수 있다.

4. 이런 식으로 2~3번의 절차를 다른 Feature에도 반복함으로써 각 Feature의 중요성을 파악할 수 있다.

참고사이트에서 예로 든 문제는 팀의 통계에 기반하여 Man of the Match를 예측하는 문제였는데 Permutation Importance을 이용, 각 Feature별로 Shuffling을 하였을 때 Model의 Accuracy를 기준으로 반복하면서 발생한  데이터의 변동까지 표기후 이를 내림차순으로 정리한 결과값이다.  (Github 참고)

import eli5
from eli5.sklearn import PermutationImportance

perm = PermutationImportance(my_model, random_state=1).fit(val_X, val_y)
eli5.show_weights(perm, feature_names = val_X.columns.tolist())

Partial Dependence Plot

Partial Dependence Plot은 하나의 변수의 변화가 Model에서 어떠한 영향을 미치는지, 또는 두 변수의 상호작용이 어떠한 지점에서 Model에 어떻게 영향을 미치는지 확인할 수 있는 Plot이다.

Concept은 Permutation과 비슷하다. Importance를 파악하기 위한 Feature의 값을 조금씩 바꿔가면서 Prediction을 진행하고 Outcome의 변화를 추적하는 방식이다.

다음 예제는 Permutation Importance와 동일한 예제를 사용해서 Partial Dependence Plot을 사용한 것이다.(Github 참고)

from matplotlib import pyplot as plt
from pdpbox import pdp, get_dataset, info_plots

# Create the data that we will plot
pdp_goals = pdp.pdp_isolate(model=tree_model, dataset=val_X, model_features=feature_names, feature='Goal Scored')

# plot it
pdp.pdp_plot(pdp_goals, 'Goal Scored')

y축은 Baseline 대비 Prediction의 변동폭이고 음영은 신뢰구간이라고 보면 된다. 1골 이후부터는 Prediction에 대해 유의한 영향을 미치나 그 이후에 골을 더 많이 넣었다고 해서 Prediction에 비례해서 영향을 미치는 것으로 보이지 않는다고 이야기할 수 있다.

두 변수간의 Intraction이 언제 어떻게 Prediction에 대한 영향을 미치는지도 볼 수 있었다.

이걸 보면 Goal Scored가 1이고 Distance Covered가 100km일 때 조합이 Baseline 대비 Prediction의 변동폭이 0.720(실선)인 것을 알 수 있다. 이에 대한 해석법은 StackExchange 질의와 이 질의에 달린 웹북 링크에서 자세히 볼 수 있다.

위 그래프가 워낙 단조롭게 나와서 놀랐는데 Towardsdatascience의 Article을 보니 꽤 복잡한 실제 케이스를 볼수 있어서, 충부히 해당 방법론이 활용할 가치가 있겠다라는 생각이 들었다.

참고: Permutation Importance, Partial Dependence Plots, Introducing PDPbox, How to interpret partial dependence interaction plot for binary classification?