Объясняемость модели становится основной частью конвейера машинного обучения. Сохранение модели машинного обучения в виде «черного ящика» больше не вариант. К счастью, есть инструменты, которые быстро развиваются и становятся все более популярными. Это руководство представляет собой практическое руководство по XAI-анализу пакета Python с открытым исходным кодом SHAP для решения проблемы регрессии.

SHAP (Аддитивные объяснения Шепли) Лундберга и Ли (2016) - это метод объяснения индивидуальных прогнозов, основанный на теоретически оптимальных для игры значениях Шепли. Ценности Шепли - это широко используемый подход из теории кооперативных игр, обладающий желаемыми свойствами. Значения признаков экземпляра данных действуют как игроки в коалиции. Значение Шепли - это средний предельный вклад значения признака во всех возможных коалициях [1].

В этом руководстве мы будем использовать пример набора данных о ценах на жилье в Бостоне из наборов данных sklearn. Это простая задача регрессии [2].

boston = datasets.load_boston()
X_train, X_test, y_train, y_test = model_selection.train_test_split(boston.data, boston.target, random_state=0)

После разделения набора данных для обучения и тестирования создайте модель и подгоните ее.

regressor = ensemble.RandomForestRegressor()
regressor.fit(X_train, y_train);

Расчет значения Шепли

С пакетом SHAP расчет довольно прост и понятен. Нам нужна только модель (регрессор) и набор данных (X_train).

# Create object that can calculate shap values
explainer = shap.TreeExplainer(regressor)
# Calculate Shap values
shap_values = explainer.shap_values(X_train)

После расчета значений SHAP мы можем построить несколько анализов, которые помогут нам понять модель.

SHAP Важность функции

В качестве первого шага я рекомендую оценить важность функции. Это базовое представление о модели. На следующем рисунке вы можете увидеть сравнение между важностью функции, рассчитанной по значениям SHAP (важны функции с большими абсолютными значениями Шепли), и важностью функции, вычисленной как среднее значение и стандартное отклонение накопления уменьшения примесей в каждом дереве (с использованием scikit- выучить [3]). Как видите, они выглядят очень похоже, но это не одно и то же.

shap.summary_plot(shap_values, X_train, feature_names=features, plot_type="bar")

Сводный график SHAP

Сводный график сочетает в себе важность функций с эффектами функций. Каждая точка на сводном графике представляет собой значение Шепли экземпляра для каждого объекта. Положение по оси Y определяется элементом, а по оси X - значением Шепли каждого экземпляра. Вы можете видеть, что функция LSTAT является наиболее важной функцией, имеет высокий диапазон значений Шепли. Цвет представляет ценность функции от низкого до высокого. Перекрывающиеся точки колеблются в направлении оси Y, поэтому мы получаем представление о распределении значений Шепли для каждого объекта. Функции упорядочены по степени важности.

shap.summary_plot(shap_values, X_train, feature_names=features)

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

График зависимости SHAP

График частичной зависимости (график PDP или PD) показывает предельное влияние, которое одна или две функции оказывают на прогнозируемый результат модели машинного обучения (J. H. Friedman 2001 [4]). График частичной зависимости может показать, является ли связь между целью и элементом линейной, монотонной или более сложной. График частичной зависимости - это глобальный метод: метод рассматривает все экземпляры и дает утверждение о глобальной связи признака с прогнозируемым результатом. PDP предполагает, что первая функция не коррелирует со второй функцией. Если это предположение нарушается, средние значения, рассчитанные для графика частичной зависимости, будут включать точки данных, которые очень маловероятны или даже невозможны.

График зависимости - это график разброса, который показывает влияние одной функции на прогнозы, сделанные моделью. В этом примере стоимость недвижимости значительно увеличивается, когда среднее количество комнат в доме превышает 6.

  • Каждая точка - это отдельный прогноз (строка) из набора данных.
  • Ось x - это фактическое значение из набора данных.
  • Ось Y - это значение SHAP для этой функции, которое показывает, насколько знание этого значения функции изменяет выходные данные модели для этого прогноза.

Цвет соответствует второй функции, которая может иметь эффект взаимодействия с функцией, которую мы строим (по умолчанию эта вторая функция выбирается автоматически). Если между этой другой функцией и функцией, которую мы строим, присутствует эффект взаимодействия, он будет отображаться как отдельный вертикальный узор окраски.

shap.dependence_plot(5, shap_values, X_train, feature_names=features)

В приведенном выше примере мы видим, что среднее количество комнат в доме выше 7,5, CRIM всегда низкий. Значения Шепли в этих случаях высоки, что значительно снижает результаты. Это понимание является функцией зависимости взаимодействия между функциями RM и CRIM.

График SHAP Force

Этот график дает нам объяснимость предсказания одной модели. График силы может использоваться для анализа ошибок, поиска объяснения предсказанию конкретного экземпляра.

i = 18
shap.force_plot(explainer.expected_value, shap_values[i], X_test[i], feature_names = features)

Из сюжета мы видим:

  1. Выходное значение модели: 16,83
  2. Базовое значение: это значение, которое можно было бы спрогнозировать, если бы мы не знали никаких функций для текущего экземпляра. Базовое значение - это среднее значение выходных данных модели по набору обучающих данных (объяснительное_ ожидаемое_значение в коде).
  3. Цифры на стрелках графика обозначают значение функции для этого экземпляра. CRIM, уровень преступности на душу населения по городам = 0,06664 и RM, среднее количество комнат = 6,546
  4. Красным цветом обозначены особенности, которые повысили оценку модели, а синим - особенности, которые снизили оценку.
  5. Чем больше стрелка, тем больше влияние функции на вывод. Величину уменьшения или увеличения воздействия можно увидеть на оси абсцисс.
  6. CRIM 0,066 увеличивает стоимость имущества, RM 6,546 снижает стоимость имущества.

Если мы хотим более глобальное представление предыдущих прогнозов, мы можем использовать вариант графика силы. Здесь мы можем увидеть прогнозы для группы строк, расположенных вертикально (повернутых на 90 °) и бок о бок. На рисунке ниже мы видим первые 5 строк набора данных.

# visualize the first 5 predictions explanations with a dark red dark blue color map.
shap.force_plot(explainer.expected_value, shap_values[0:5,:], X_test[0:5,:], plot_cmap="DrDb", feature_names=features)

Схема принятия решения SHAP

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

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

shap.decision_plot(explainer.expected_value[0], shap_values[0], feature_names = list(features))

Прямая вертикальная линия графика решений отмечает базовое значение модели. Цветная линия - это предсказание. Значения признаков печатаются рядом со строкой прогноза для справки. Начиная с нижней части графика, линия прогноза показывает, как значения SHAP накапливаются из базового значения, чтобы прийти к окончательной оценке модели в верхней части графика. Графики принятия решений представляют собой буквальное представление значений SHAP, что упрощает их интерпретацию.

График силы и график решения являются эффективными для объяснения предсказания предыдущей модели. Масштабы и направление основных эффектов легко определить.

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

Резюме

Фреймворк SHAP оказался важным достижением в области интерпретации моделей машинного обучения. SHAP объединяет несколько существующих методов для создания интуитивно понятного, теоретически обоснованного подхода к объяснению прогнозов для любой модели. Значения SHAP количественно определяют величину и направление (положительное или отрицательное) влияния функции на прогноз [6]. Я считаю, что анализ XAI с помощью SHAP и других инструментов должен быть неотъемлемой частью конвейера машинного обучения. Подробнее о XAI для задач мультиклассовой классификации с помощью SHAP см. Ссылку. Код в этом посте можно найти здесь.