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

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

Например, в игре участвует 4 игрока (A, B, C, D). Шепли количественно оценивает вклад каждого игрока в игру. Он основан на идее, что результат каждой возможной комбинации игроков должен использоваться для определения важности одного игрока. Вклад игрока A может быть разным, если он делается совместно с игроком B или с C, или с B и C вместе, и если это только A. Итак, чтобы рассчитать вклад игрока A, нам необходимо учитывать все взаимодействия A с другими игроками, а также их коллективный вклад.

Таким образом, учитывая каждого игрока и все другие взаимодействия, будет 2⁴ = 16 возможных взаимодействий. Теперь SHAP требует обучения отдельной модели прогнозирования для каждого из этих различных взаимодействий.

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

Проще говоря,

Значение SHAP для характеристики A = среднее предельное значение для характеристики A во всех комбинациях = среднее значение Σ для всех взаимодействий с A (прогнозирование модели, включая функцию A - прогнозирование модели без функции)

Свойства значений SHAPley:

1) Эффективность:

Вклады функций должны составлять разницу между вкладом x и средним значением.

2) Симметрия:

Вклад двух функций (j и k) должен быть одинаковым, если они вносят одинаковый вклад.

3) Пустышка:

Признак j, который не изменяет прогнозируемое значение независимо от того, к какой коалиции функций он добавлен, должен иметь значение Шепли, равное 0.

4) Аддитивность:

Чтобы получить совокупный вклад функций, можно добавить их соответствующие значения Шепли. Это означает, что для модели ансамбля, такой как Random Forest или Gradient Boosting, это свойство гарантирует, что если мы вычислим Shapely Values ​​для каждого дерева индивидуально и усредним их, мы получим Shapely значения для ансамбля.

Реализация SHAP в Python:

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

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

Для объяснения я собираюсь использовать набор данных UCI Bank Marketing. Эти данные связаны с кампаниями прямого маркетинга португальского банковского учреждения. Цель классификации - предсказать, подпишется ли клиент на срочный депозит (переменная y).

Данные содержат информацию в следующем формате:

Категориальная переменная:

  • В браке - (женат, холост, разведен)
  • Работа - (Менеджмент, BlueCollar, Техник, предприниматель, пенсионер, администратор, услуги, самозанятый, домработница, студент, безработный, неизвестный)
  • Контакт - контактный вид связи (Телефон, Сотовая, Неизвестно)
  • Образование - (начальное, среднее, высшее, неизвестно)
  • Месяц - последний контактный месяц в году (январь, февраль, март, апр, май, июнь, июль, август, сентябрь, октябрь, ноябрь, декабрь)
  • Poutcome - результат предыдущей маркетинговой кампании (Успех, Провал, Другое, Неизвестно)
  • Жилье - есть жилищный кредит? (Да нет)
  • Кредит - есть личный кредит? (Да нет)
  • Дефолт - есть кредит в дефолте? (Да нет)

Числовая переменная:

  • Возраст
  • Остаток: средний годовой остаток в евро.
  • День: последний контактный день месяца
  • Продолжительность: продолжительность последнего контакта в секундах
  • Кампания: количество контактов, выполненных во время этой кампании и для этого клиента.
  • Pdays: количество дней, прошедших с момента последнего обращения к клиенту из предыдущей кампании.
  • Предыдущий: количество контактов, выполненных до этой кампании и для этого клиента

Класс

  • депозит - (Да / Нет)

Давайте прочитаем набор данных на Python и выполним необходимую предварительную обработку категориальных переменных.

Установка библиотеки SHAP

Обучение-тестовое разделение и обучение классификатора случайного леса

Вычисление значений SHAP с помощью TreeExplainer

Для проблем с классификацией объяснитель.shap_values ​​() возвращает список размером n_classes. Поскольку это модель двоичной классификации, n_classes = 2. Каждый объект этого списка представляет собой массив размером [n_samples, n_features] и соответствует значениям SHAP для соответствующего класса. В этом примере shap_values ​​[1] - это значения SHAP для положительного класса (Да), а shap_values ​​[0] - значения SHAP для отрицательного класса. Для регрессионных моделей мы получаем единый набор значений формы размером [n_samples, n_features].

Типы графиков с использованием библиотеки SHAP

  1. shap.summary_plot ()

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

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

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

На приведенном выше графике функции расположены в порядке убывания важности: красный цвет указывает на высокое значение функции, а синий - на низкое значение. Мы знаем, что чем положительнее значение SHAP, тем больше вклад этой функции, поскольку значение SHAP вычисляет разницу между прогнозами с функцией и без нее. Таким образом, КРАСНЫЙ цвет соответствует + SHAP, и признак положительно коррелирует с целевой переменной, а если СИНИЙ цвет соответствует –SHAP, он отрицательно коррелирован с целевой переменной.

Таким образом, «продолжительность» положительно коррелирует с целевой переменной. По мере увеличения дюрации увеличивается вероятность получения срочного депозита.

Точно так же Contact_unknown - это двоичная переменная (0/1). Если он равен 0, он соответствует положительному результату модели, что означает, что он отрицательно коррелирован с целевой переменной.

2) shap.force_plot:

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

Из фрагмента кода видно, что для строки 5 функция pred_proba выводит вероятность 0,6 для класса 1.

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

Из сводного графика мы знаем, что продолжительность положительно связана с целевой переменной. Средняя продолжительность по нашим данным составляет 262. Здесь Duration (988 ›262). Таким образом, это смещает прогноз вправо. Точно так же Age = 47, contact_cellular = 1, day = 30, previous = 5 способствуют улучшению логита по сравнению с базовым значением. В то время как pdays = 87, poutcome_success = 0 сдвигает прогноз влево.

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

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

3) shap.dependence_plot ():

График зависимости используется для визуализации взаимодействий между различными функциями.

Каждая точка на диаграмме представляет собой наблюдение.

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

На графике мы можем увидеть взаимодействие между функциями age и month_nov, где month_nov является категориальным. Для более старшего возраста, когда month_nov = 0, это увеличивает прогнозируемую вероятность подписки клиента на срочный депозит.

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

Ссылки

  1. SHAP: единый подход к интерпретации прогнозов модели. arXiv: 1705.07874
  2. Https://github.com/slundberg/shap