SHAP kernel explainer

Объяснимый ИИ на Python

Fouad Trad

Machine Learning Engineer

SHAP kernel explainer

 

  • Вычисляет SHAP-значения для любой модели

    • K ближайших соседей
    • Нейронные сети
    • Древовидные модели
  • Медленнее специализированных объяснителей

Изображение, показывающее разделение SHAP-объяснителей на универсальные, применимые к любой модели, и специализированные, оптимизированные для конкретных типов моделей.

Объяснимый ИИ на Python

Сердечные заболевания

age sex chest_pain_type blood_pressure ecg_results thalassemia target
52 1 0 125 1 3 0
53 1 0 140 0 3 0
70 1 0 145 1 3 0
61 1 0 148 1 3 0
62 0 0 138 1 2 0

 

mlp_clf: многослойный перцептрон для предсказания риска сердечного заболевания

Объяснимый ИИ на Python

Страховые выплаты

age gender bmi children smoker charges
19 0 27.900 0 1 16884.92
18 1 33.770 1 0 1725.55
28 1 33.000 3 0 4449.46
33 1 22.705 0 0 21984.47
32 1 28.880 0 0 3866.85

 

mlp_reg: многослойный перцептрон для предсказания страховых выплат

Объяснимый ИИ на Python

Создание kernel explainer

MLPRegressor
import shap


explainer = shap.KernelExplainer( # Model's prediction function, # Representative summary of dataset )
MLPClassifier
import shap


explainer = shap.KernelExplainer( # Model's prediction function, # Representative summary of dataset )
Объяснимый ИИ на Python

Создание kernel explainer

MLPRegressor
import shap

explainer = shap.KernelExplainer(
  mlp_reg.predict, 
  # Representative summary of dataset
)


MLPClassifier
import shap

explainer = shap.KernelExplainer(
  mlp_clf.predict_proba, 
  # Representative summary of dataset
)


Объяснимый ИИ на Python

Создание kernel explainer

MLPRegressor
import shap

explainer = shap.KernelExplainer(
  mlp_reg.predict, 
  shap.kmeans(X, 10)
)


shap_values_reg = explainer.shap_values(X)
MLPClassifier
import shap

explainer = shap.KernelExplainer(
  mlp_clf.predict_proba, 
  shap.kmeans(X, 10)
)


shap_values_cls = explainer.shap_values(X)
Объяснимый ИИ на Python

Важность признаков

MLPRegressor
mean_reg = np.abs(shap_values_reg).mean(axis=0)

plt.bar(X.columns, mean_reg)

Столбчатая диаграмма важности признаков для задачи регрессии: курение и возраст оказывают наибольшее влияние на предсказание страховых выплат.

MLPClassifier
mean_cls = np.abs(shap_values_cls[:,:,1]).mean(axis=0)

plt.bar(X.columns, mean_cls)

Столбчатая диаграмма важности признаков для задачи классификации: тип боли в груди и талассемия оказывают наибольшее влияние на предсказание риска сердечного заболевания.

Объяснимый ИИ на Python

Сравнение со специализированными подходами

Линейная регрессия
plt.bar(X.columns, np.abs(lin_reg.coef_))

Столбчатая диаграмма важности признаков для линейной регрессии: курение и возраст оказывают наибольшее влияние на предсказание страховых выплат.

Логистическая регрессия
plt.bar(X.columns, np.abs(log_reg.coef_[0]))

Столбчатая диаграмма важности признаков для задачи классификации: тип боли в груди оказывает наибольшее влияние на предсказание риска сердечного заболевания.

Объяснимый ИИ на Python

Давайте потренируемся!

Объяснимый ИИ на Python

Preparing Video For Download...