Читать часть 1 здесь!

Для объяснения моделей машинного обучения существует множество методов. Наиболее часто используются GradCam, SHAP, Lime, интегрированные градиенты и т. д. В этой статье мы сосредоточимся только на SHAP. кооперативной теории игр и используется для повышения прозрачности и интерпретируемости моделей машинного обучения. Значения SHAP представляют ответственность функции за изменение выходных данных модели. Мы можем понять, как отдельная функция влияет на выходные данные модели, используя значения SHAP для этой функции.

Tree SHAP — это быстрый и точный метод оценки значений SHAP для моделей деревьев и ансамблей деревьев при нескольких различных возможных предположениях о зависимости признаков. Обычно реализация Tree SHAP из библиотеки shap довольно эффективна. Однако я покажу вам еще одну интересную реализацию TreeSHAP от LinkedIn. https://github.com/linkedin/FastTreeSHAP основан на документе: Fast TreeSHAP: ускорение вычисления значения SHAP для деревьев.

from sklearn.datasets import load_breast_cancer
cancer_ds = load_breast_cancer()
cancer_x = cancer_ds.data
cancer_y = cancer_ds.target
print("Feature set shape: ", cancer_x.shape)
print("Target shape: ", cancer_y.shape)
print("Features: ", cancer_ds.feature_names)
print("Targets: ", cancer_ds.target_names)
Feature set shape:  (569, 30)
Target shape:  (569,)
Features:  ['mean radius' 'mean texture' 'mean perimeter' 'mean area'
 'mean smoothness' 'mean compactness' 'mean concavity'
 'mean concave points' 'mean symmetry' 'mean fractal dimension'
 'radius error' 'texture error' 'perimeter error' 'area error'
 'smoothness error' 'compactness error' 'concavity error'
 'concave points error' 'symmetry error' 'fractal dimension error'
 'worst radius' 'worst texture' 'worst perimeter' 'worst area'
 'worst smoothness' 'worst compactness' 'worst concavity'
 'worst concave points' 'worst symmetry' 'worst fractal dimension']
Targets:  ['malignant' 'benign']

Я использую набор данных breast_cancer от sklearn. Набор данных содержит 30 объектов и 569 строк. Характеристики:'средний радиус', 'средняя текстура', 'средний периметр', 'средняя площадь', 'средняя гладкость', 'средняя компактность', 'средняя вогнутость', 'среднее симметрия», «средняя фрактальная размерность», «ошибка радиуса», «ошибка текстуры», «ошибка периметра», «ошибка площади», «ошибка гладкости», «ошибка компактности», «ошибка вогнутости», «ошибка вогнутых точек», «ошибка симметрии», «ошибка фрактальной размерности», «наихудший радиус», «наихудшая текстура», «наихудший периметр», «наихудшая площадь», «наихудшая гладкость», «наихудшая компактность», «наихудшая вогнутость», «наихудшая вогнутость» ', 'наихудшая симметрия', 'наихудшая фрактальная размерность'. Нам нужно решить проблему бинарной классификации, чтобы определить, является ли образец рака злокачественным или доброкачественным.

Давайте сделаем простой сплит-тест 75:25.

from sklearn.model_selection import train_test_split
x_train, x_test, y_train, y_test = train_test_split(cancer_x, cancer_y, test_size = 0.25, random_state = 42)
print(x_train.shape)
print(x_test.shape)
print(y_train.shape)
print(y_test.shape)
(426, 30)
(143, 30)
(426,)
(143,)

Теперь давайте обучим модель lightgbm на тренировочном наборе. Мы добились оценки F1 95%, что не совсем бесполезно!

! pip install lightgbm
     
import lightgbm as lgb
import numpy as np
train_data = lgb.Dataset(data=x_train, label=y_train)
model = lgb.train(train_set=train_data, params = {})
y_preds = np.array(model.predict(x_test))
from sklearn import metrics
fpr, tpr, thresholds = metrics.roc_curve(y_test, y_preds, pos_label=1)
metrics.auc(fpr, tpr)
     
0.9945900957136913
from sklearn.metrics import f1_score
f1_score(y_test, np.array([0 if a < 0.5 else 1 for a in y_preds ]))
0.9545454545454545

Теперь попробуем объяснить предсказания модели. Мы используем TreeExplainer из библиотеки fasttreeshap. Существует несколько версий алгоритма, мы выберем v2, так как он относительно быстрее.

Я нанес значения SHAP для функций в первой строке. Очевидно, что наихудшая площадь, средние вогнутые точки и наихудшие вогнутые точки больше всего влияют на оценку прогноза. Средний периметр и наихудшая вогнутость влияют на оценку модели в противоположном направлении. Но немного сложно наблюдать за разными случайными выборками и понимать, как функции влияют на результаты. Что, если бы у нас был интерактивный инструмент для этого?

What If Tool будет очень полезен в этом сценарии. Мы можем подключить пользовательскую функцию прогнозирования, которая будет принимать входные данные функций из пользовательского интерфейса и передавать их в модель, чтобы получить оценку модели и значения SHAP. WIT можно использовать для следующих целей (и не только).

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

  • Вместо того, чтобы экспериментировать со многими выборками, мы также можем напрямую посмотреть на график частичной зависимости функции, если нас интересует только изменение оценки модели. График частичной зависимости (короткий график PDP или PD) показывает предельное влияние одной или двух функций на прогнозируемый результат модели машинного обучения (Дж. Х. Фридман). График частичной зависимости может показать, является ли связь между целью и функцией линейной, монотонной или более сложной.

  • Мы также можем просто посмотреть на распределение функций.

  • Неверное объяснение указывает на наименьшее изменение значений признаков, которое может привести к другому результату. Контрфакты «что, если» отвечают на вопрос о том, что модель спрогнозирует, если вы измените ввод действия. Они позволяют понять и устранить неполадки в модели машинного обучения, наблюдая, как она реагирует на изменения ввода (функции). Традиционные подходы к интерпретации могут ранжировать функции на основе их прогностической ценности или аппроксимировать модель машинного обучения. Напротив, контрфактический анализ «опрашивает» модель, чтобы выяснить, какие корректировки определенной точки данных могут привести к изменению вывода модели. Проще говоря, допустим, у нас есть два очень похожих образца рака, и значения признаков выглядят очень похожими, но один доброкачественный, а другой злокачественный! WIT найдет вам контрфактические образцы для любой точки данных.

  • Вы также можете настроить порог для задачи классификации, чтобы оптимизировать точность или полноту в WIT.

PAIR Code недавно выпустил “Learning Interpretability Tool (LIT)”. Инструмент интерпретации обучения (🔥LIT, ранее известный как Инструмент интерпретации языка) — это визуальный интерактивный инструмент для понимания модели машинного обучения, который поддерживает текст, изображения и табличные данные. Его можно запускать как отдельный сервер или в средах ноутбуков, таких как ноутбуки Colab, Jupyter и Google Cloud Vertex AI.

Код, используемый в этой статье, можно найти здесь: https://github.com/zabir-nabil/What-If-Explainability.