Объяснимость с помощью SHAP

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

Fouad Trad

Machine Learning Engineer

Введение в SHAP

  • SHAPSHapley Additive exPlanations
  • Метод, независимый от модели
  • Использует значения Шепли из теории игр
  • Значения SHAP → количественная оценка вклада признаков в предсказания

Логотип SHAP

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

Распределение прибыли между участниками группы

Изображение музыкальной группы.

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

Объяснители SHAP

 

  • Вычисление значений SHAP
  • Древовидные объяснители → модели на основе деревьев

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

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

Набор данных о поступлении

GRE Score TOEFL Score University Rating SOP LOR CGPA Chance of Admit Accept
337 118 4 4.5 4.5 9.65 0.92 1
324 107 4 4 4.5 8.87 0.76 1
316 104 3 3 3.5 8 0.72 1
322 110 3 3.5 2.5 8.67 0.8 1
314 103 2 2 3 8.21 0.45 0

 

  • rf_reg: предсказывает вероятность поступления
  • rf_class: предсказывает факт зачисления
  • X: датафрейм с признаками
Объяснимый ИИ на Python

Вычисление значений SHAP

import shap
Регрессия
explainer_reg = shap.TreeExplainer(rf_reg)

shap_values_reg = explainer_reg.shap_values(X)
Классификация
explainer_class = shap.TreeExplainer(rf_class)

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

Понимание вывода SHAP

Регрессия
print(shap_values_reg.shape)  
(400, 6)

Изображение значений SHAP в виде таблицы с теми же размерами, что и датафрейм X (количество наблюдений, количество признаков)

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

Понимание вывода SHAP

Регрессия
print(shap_values_reg.shape)  
(400, 6)

Изображение значений SHAP в виде таблицы с теми же размерами, что и датафрейм X (количество наблюдений, количество признаков)

Классификация
print(shap_values_class.shape)
(400, 6, 2)

Выбор значений положительного класса

positive_values = shap_values_class[:,:,1]
Объяснимый ИИ на Python

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

mean_shap_values_class = np.abs(shap_values_class[:, :, 1]).mean(axis=0)
mean_shap_values_reg = np.abs(shap_values_reg).mean(axis=0)

plt.bar(X_train.columns, mean_shap_values_class) plt.bar(X_train.columns, mean_shap_values_reg)

Изображение важности признаков для регрессии и классификации, показывающее, что CGPA и результаты GRE оказывают наибольшее влияние на прогноз поступления.

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

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

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

Preparing Video For Download...