Использование пакета SHAP Python для идентификации и визуализации взаимодействий в ваших данных

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

Основное внимание будет уделено применению пакета SHAP и интерпретации результатов. В частности, мы начнем с объяснения того, что такое значения взаимодействия SHAP и как их можно использовать для объяснения отдельных прогнозов. Затем мы погружаемся в 3 различных агрегирования этих значений, которые помогают нам объяснить, как модель делает прогнозы в целом. Это включает в себя получение абсолютного среднего по всем значениям взаимодействия и использование сводки SHAP и графиков зависимости. Мы рассмотрим ключевые фрагменты кода, а полный проект вы можете найти на GitHub.

Набор данных

Чтобы объяснить, как использовать пакет SHAP, мы создали смоделированный набор данных с 1000 наблюдений. В таблице 1 вы можете увидеть функции в этом наборе данных. Цель состоит в том, чтобы предсказать годовой бонус сотрудника, используя оставшиеся 5 функций. Мы разработали набор данных таким образом, чтобы было взаимодействие между опытом и степенью, а также между производительностью и продажами. days_late не взаимодействует ни с какими другими функциями. Вы можете найти этот набор данных на Kaggle.

В этой статье предполагается, что вы немного знакомы с взаимодействием данных. Если нет, то статью ниже было бы неплохо прочитать в первую очередь. Здесь мы объясняем, что такое взаимодействия. Используя тот же набор данных, что и выше, мы также объясняем другие методы, которые можно использовать для их анализа. Это может быть хорошей альтернативой SHAP.



Пакеты

В приведенном ниже коде вы можете увидеть пакеты, которые мы будем использовать для анализа этих данных. В строках со 2 по 5 у нас есть несколько стандартных библиотек, используемых для управления и визуализации данных. В строке 7 мы импортируем XGBoost, который используем для моделирования целевой переменной. В строке 9 мы импортируем пакет SHAP. Ниже мы инициализируем пакет, который позволяет отображать графики в блокноте. Убедитесь, что у вас все это установлено.

Моделирование

Чтобы использовать пакет SHAP, нам сначала нужно обучить модель. В строках 2–4 мы импортируем наш набор данных и назначаем целевую переменную и функции. В строках 7 и 8 мы определяем и обучаем нашу модель XGBoost. Для простоты мы обучили нашу модель, используя весь набор данных. Чтобы избежать переобучения, мы ограничили каждое дерево в модели максимальной глубиной 3.

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

Интерпретация значений взаимодействия SHAP

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



Чтобы вычислить значения взаимодействия SHAP, в строке 2 мы определяем объяснитель, передавая нашу модель функции TreeExplainer. Эта функция используется для объяснения вывода моделей дерева ансамбля. Используя объяснитель в строке 3, мы получаем значения взаимодействия. Это вернет массив shap_interaction, содержащий по одной записи для каждого из 1000 наблюдений в нашей матрице X-функций.

Чтобы понять структуру shap_interaction, мы можем использовать приведенный ниже код. Строка 2 сообщает нам, что форма массива (1000, 5, 5). Это означает, что массив содержит 1000 матриц 5x5. Мы будем называть матрицы 5x5 матрицами вкладов. Они содержат значения SHAP, используемые для объяснения каждого из 1000 отдельных прогнозов. Строка 5 дает матрицу вклада для первого сотрудника в нашем наборе данных. Мы можем видеть эту матрицу на рисунке 2 ниже.

Матрица сообщает нам, насколько каждый фактор способствовал предсказанию модели по сравнению со средним предсказанием. Это интерпретация аналогична стандартным значениям SHAP, за исключением того, что вклады разбиты на основные эффекты и эффекты взаимодействия. Основные эффекты даны по диагоналям. Например, уровень опыта этого сотрудника увеличил его прогнозируемый бонус на 35,99 доллара. Эффекты взаимодействия даны по диагоналям. Эти значения разделены вдвое, поэтому, например, взаимодействие performance.sales уменьшило прогнозируемый бонус на 8,76 доллара (-4,38 доллара x 2).

Средний прогноз — это средний прогнозируемый бонус для всех 1000 сотрудников. Если вы добавите все значения в матрицу вклада и добавите средний прогноз, вы получите фактический прогноз модели для этого сотрудника. В нашем случае средний прогнозируемый бонус составил 148,93 доллара. Все значения в матрице в сумме составляют 59,98 долларов США. Это дает прогнозируемый бонус в размере 208,91 доллара для первого сотрудника. Вы можете подтвердить, что это то же самое, что и предсказание модели, используя приведенный ниже код.

Графики взаимодействия SHAP

Анализ отдельных матриц вклада позволяет объяснить прогнозы отдельных моделей. Но что, если мы хотим объяснить, как модель вообще делает прогнозы? Для этого мы можем агрегировать значения в матрицах вклада несколькими различными способами.

Абсолютный средний график

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

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

Сводный сюжет

Для стандартных значений SHAP полезным графиком является график пчелиного тепла. Это один из графиков, включенных в пакет SHAP. В приведенном ниже коде мы получаем значения SHAP и отображаем этот график. В частности, это значения SHAP, которые не были разбиты на их основные эффекты и эффекты взаимодействия.

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

Со значениями взаимодействия SHAP мы можем расширить этот график, используя сводный график в приведенном ниже коде. Результат можно увидеть на рисунке 5. Здесь значения SHAP для основных эффектов даны по диагоналям, а вне диагоналей указаны эффекты взаимодействия. Для этого сюжета эффекты взаимодействия уже удвоены. Как и в случае с пчелиным теплым графиком, цвета задаются значением признака для признака на оси Y.

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

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

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

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

Возвращаясь к нашему сводному сюжету, мы видим, что основной эффект опыта положительный. Итак, предположим, что опыт для кого-то со степенью увеличивается. Основные эффекты и эффекты взаимодействия будут работать в одном направлении. Это означает, что по мере увеличения опыта их прогнозируемый бонус будет увеличиваться. С другой стороны, если у человека нет ученой степени. тогда главный (положительный) и интерактивный (отрицательный) эффекты будут работать в противоположных направлениях. Прогнозируемый бонус может увеличиваться, уменьшаться или оставаться стабильным по мере увеличения опыта.

Это согласуется с диаграммой рассеяния ниже. Здесь мы нанесли необработанные значения данных — без значений SHAP. Мы видим, что если у человека есть ученая степень, то его бонус имеет тенденцию увеличиваться с опытом. Если у них нет степени, бонус, как правило, стабилен на разных уровнях опыта. Мы не показали это с использованием значений SHAP, но стабильный бонус предполагает, что, когда у сотрудника нет степени, основной и интерактивный эффекты могут полностью компенсировать друг друга.

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

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



Поддержите меня, став одним из моих приглашенных участников :)



| Твиттер | Ютуб | Информационный бюллетень — подпишитесь на БЕСПЛАТНЫЙ доступ к Курсу Python SHAP

Источники изображений

Все изображения мои собственные или взяты с www.flaticon.com. В случае последнего у меня есть Полная лицензия, как определено в их Премиум-плане.

Рекомендации

С. Лундберг, Пакет SHAP Python (2021), https://github.com/slundberg/shap

С. Лундберг, NHANES I Survival Model.ipynb (2020), https://github.com/slundberg/shap/blob/master/notebooks/tabular_examples/tree_based_models /NHANES%20I%20Survival%20Model.ipynb

С. Лундберг и С. Ли, Единый подход к интерпретации модельных прогнозов (2017 г.), https://arxiv.org/pdf/1705.07874.pdf

К. Молнар, Интерпретируемое машинное обучение (2021 г.) https://christophm.github.io/interpretable-ml-book/interaction.html