Лучшая интерпретируемость ведет к лучшему восприятию

Легко ли понять вашу хорошо обученную модель? Сложные алгоритмы машинного обучения обычно могут давать точные прогнозы, но их пресловутый «черный ящик» совершенно не способствует их принятию. Подумайте об этом: если вы попросите меня проглотить черную таблетку, не сказав, что в ней содержится, я определенно не захочу ее проглотить. Интерпретируемость модели подобна этикетке на бутылке с лекарством. Нам нужно сделать нашу эффективную таблетку прозрачной, чтобы ее можно было легко принять.

Как мы можем сделать это? Значение SHAP - отличный инструмент среди других инструментов, таких как LIME (см. Мой пост Объясните свою модель с помощью LIME), InterpretML (см. Мой пост « Объясните свою модель с помощью Microsoft InterpretML »), или ELI5. Значение SHAP также является важным инструментом в Explainable AI или Trusted AI, развивающейся разработке AI (см. Мой пост Объяснение для eXplainable AI). В этой статье я расскажу вам, что такое значение Шепли и как значение SHAP (аддитивные объяснения Шепли) вытекает из концепции Шепли. Я покажу вам, как значения SHAP увеличивают прозрачность модели. Эта статья также поставляется с кодом Python в конце, чтобы вы могли добиться хороших результатов в ваших приложениях, или вы можете загрузить блокнот в этом github. API SHAP получил более позднюю разработку, как описано в SHAP с более элегантными диаграммами.

Что такое значение Шепли?

Позвольте мне объяснить ценность Шепли историей: предположим, что Энн, Боб и Синди вместе забивали «ошибочное» деревянное бревно длиной 38 дюймов на землю. После работы они пошли в местный бар, чтобы выпить, и я, математик, присоединился к ним. Я задал очень странный вопрос: «Каков вклад каждого (в дюймах)?»

Как ответить на этот вопрос? Я перечислил все перестановки и нашел данные в таблице A. (Некоторые из вас уже спрашивали меня, как составить эту таблицу. См. Мое примечание в конце статьи.) Когда порядок A, B, C , предельные вклады трех составляют 2, 32 и 4 дюйма соответственно.

В таблице показано, что коалиция (A, B) или (B, A) составляет 34 дюйма, поэтому предельный вклад C в эту коалицию составляет 4 дюйма. Я взял среднее значение всех перестановок для каждого человека, чтобы получить вклад каждого человека: Энн - 2 дюйма, Боб - 32 дюйма, а Синди - 4 дюйма. Это способ вычисления значения Шепли: это среднее значение предельного вклада по всем перестановкам. Я опишу расчет в формальном математическом термине в конце этого поста. Но теперь давайте посмотрим, как это применяется в машинном обучении.

Я назвал деревянный журнал журналом ошибок по особой причине: это функция потерь в контексте машинного обучения. «Ошибка» - это разница между фактическим значением и прогнозом. Молотки - это предикторы для атаки на журнал ошибок. Как мы измеряем вклад молотков (предикторов)? Ценности Шепли!

От ценности Шепли к SHAP (пояснения к добавкам Шепли)

SHAP (Аддитивные пояснения Шэпли) заслуживает отдельного места, а не расширения значения Шепли. Вдохновленный несколькими методами (1, 2, 3, 4, 5, 6, 7) интерпретируемости модели, Lundberg and Lee (2016) предложил значение SHAP как единый подход к объяснению результатов любой модели машинного обучения. Здесь стоит упомянуть три преимущества.

  1. Первый - это глобальная интерпретируемость - совокупные значения SHAP могут показать, какой вклад каждый предиктор, положительный или отрицательный, вносит в целевую переменную. Это похоже на график важности переменной, но он может показать положительную или отрицательную взаимосвязь для каждой переменной с целью (см. График значений SHAP ниже).
  2. Второе преимущество - это локальная интерпретируемость - каждое наблюдение получает свой собственный набор значений SHAP (см. График отдельных значений SHAP ниже). Это значительно увеличивает его прозрачность. Мы можем объяснить, почему случай получает свое предсказание и вклад предсказателей. Традиционные алгоритмы важности переменных показывают результаты только для всей генеральной совокупности, но не для каждого отдельного случая. Локальная интерпретируемость позволяет нам точно определить и сопоставить влияние факторов.
  3. В-третьих, значения SHAP могут быть рассчитаны для любой древовидной модели, в то время как другие методы используют модели линейной регрессии или логистической регрессии в качестве суррогатных моделей.

Интерпретируемость модели не означает причинно-следственной связи

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

Визуализация данных и объяснение модели

Визуализация данных и объяснимость модели - два неотъемлемых аспекта проекта по науке о данных. Это бинокль, помогающий вам увидеть закономерности в данных и историях в вашей модели. Я написал серию статей о визуализации данных, в том числе Панды-Боке для упрощения потрясающих интерактивных графиков, Использование Seaborn для простого создания красивых графиков, Эффективные графики с помощью Plotly и Создание Красивые геокарты с сюжетом ». Или вы можете добавить в закладки итоговый пост Пути обучения Dataman - развивайте свои навыки, продвигайте свою карьеру », в котором перечислены ссылки на все статьи. Моя цель в статьях о визуализации данных - помочь вам создавать экспонаты и идеи по визуализации данных легко и профессионально. Кроме того, я выбираю одни и те же данные как для визуализации данных, так и для объяснения модели во всех этих статьях, чтобы вы могли увидеть, как они идут рука об руку. Если вы хотите принять все эти коды визуализации данных или сделать свою работу более профессиональной, взгляните на них.

Как использовать SHAP в Python?

Я собираюсь использовать данные о качестве красного вина на Kaggle.com для проведения анализа. Целевое значение этого набора данных - оценка качества от низкого до высокого (0–10). Входными переменными являются содержание каждого образца вина, включая фиксированную кислотность, летучую кислотность, лимонную кислоту, остаточный сахар, хлориды, свободный диоксид серы, общий диоксид серы, плотность, pH, сульфаты и спирт. Всего 1599 образцов вин.

В этом посте я построю модель регрессии случайного леса и буду использовать TreeExplainer в SHAP. Некоторые читатели спрашивали, существует ли один пояснитель SHAP для любого алгоритма машинного обучения - древовидных или недревесных алгоритмов. Да, есть. Он называется KernelExplainer. Вы можете прочитать мой второй пост Объясните любые модели с помощью значений SHAP - Используйте KernelExplainer, в котором я показываю, что если ваша модель представляет собой модель машинного обучения на основе дерева, вы должны использовать объяснитель дерева TreeExplainer() который оптимизирован для быстрого получения результатов. Если ваша модель представляет собой модель глубокого обучения, используйте объяснитель глубокого обучения DeepExplainer(). Для всех других типов алгоритмов (таких как KNN) используйте KernelExplainer(). Кроме того, API SHAP получил более позднюю разработку. См. SHAP с более элегантными диаграммами.

Для читателей, которые хотят глубже изучить алгоритмы машинного обучения, вы можете прочитать мой пост Мои лекции о случайном лесу, градиентном усилении, регуляризации и H2O.ai. Для глубокого обучения отметьте Объяснение глубокого обучения удобным для регрессии способом. Для RNN / LSTM / GRU, проверьте Техническое руководство по RNN / LSTM / GRU для прогнозирования цен на акции.

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

(A) График важности переменной - глобальная интерпретируемость

Вы можете установить SHAP через pip из этого Github. Функция shap.summary_plot с plot_type=”bar” позволяет построить график важности переменной. На графике важности переменных перечислены наиболее значимые переменные в порядке убывания. Верхние переменные вносят больший вклад в модель, чем нижние, и поэтому обладают высокой предсказательной силой.

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

График значения SHAP может дополнительно показать положительные и отрицательные отношения предикторов с целевой переменной. Код shap.summary_plot(shap_values, X_train) дает следующий график:

Этот график состоит из всех точек в данных поезда. Он демонстрирует следующую информацию:

  • Важность функции. Переменные ранжируются в порядке убывания.
  • Влияние. Расположение по горизонтали показывает, связано ли влияние этого значения с более высоким или более низким прогнозом.
  • Исходное значение. Цвет показывает, является ли эта переменная высокой (красным) или низкой (синим) для данного наблюдения.
  • Корреляция: высокий уровень содержания «алкоголя» имеет высокое и положительное влияние на рейтинг качества. «Максимум» определяется красным цветом, а «положительное» влияние отображается на оси X. Точно так же мы скажем, что «летучая кислотность» отрицательно коррелирует с целевой переменной.

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

(B) График зависимости SHAP - глобальная интерпретация

Вы можете спросить, как показать частичный график зависимости. График частичной зависимости показывает предельный эффект, который одна или две функции оказывают на прогнозируемый результат модели машинного обучения (J. H. Friedman, 2001). Он сообщает, является ли связь между целью и объектом линейной, монотонной или более сложной. Чтобы создать график зависимости, вам понадобится всего одна строка кода: shap.dependence_plot(“alcohol”, shap_values, X_train). Функция автоматически включает другую переменную, с которой выбранная вами переменная больше всего взаимодействует. Следующий график показывает, что существует приблизительно линейная и положительная тенденция между алкоголем и целевой переменной, а алкоголь часто взаимодействует с сульфатами.

Предположим, вы хотите узнать «летучую кислотность» и переменную, с которой она взаимодействует больше всего, вы можете сделать shap.dependence_plot(“volatile acidity”, shap_values, X_train). График ниже показывает, что существует приблизительно линейная, но отрицательная зависимость между «летучей кислотностью» и целевой переменной. Эта отрицательная взаимосвязь уже продемонстрирована на графике важности переменной (K).

(C) График индивидуальной ценности SHAP - интерпретируемость на местном уровне

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

Если вы используете блокнот Jupyter, вам нужно будет инициализировать его с помощью initjs (). Для экономии места я написал небольшую функцию shap_plot(j) для выполнения значений SHAP для наблюдений в таблице B.

Позвольте мне шаг за шагом пройти вас по приведенному выше коду. Вышеупомянутый shap.force_plot() принимает три значения: базовое значение (explainerModel.expected_value[0]), значения SHAP (shap_values_Model[j][0]) и матрицу значений характеристик (S.iloc[[j]]). Базовое значение или ожидаемое значение - это среднее значение выходных данных модели по обучающим данным X_train. Это базовое значение, используемое на следующем графике.

Когда я выполняю shap_plot(0), я получаю результат для первой строки таблицы B:

Позвольте мне подробно описать этот изящный сюжет:

  • Выходное значение - это прогноз для этого наблюдения (прогноз для первой строки в таблице B равен 6.20).
  • базовое значение: исходный документ объясняет, что базовое значение E (y_hat) - это значение, которое можно было бы спрогнозировать, если бы мы не знали каких-либо характеристик для текущего вывода. Другими словами, это среднее предсказание или среднее значение (yhat). Вы можете спросить, почему это 5,62. Это потому, что средний прогноз Y_test равен 5,62. Вы можете проверить это с помощью Y_test.mean(), который дает значение 5.62.
  • Красный / синий: функции, которые подталкивают прогноз выше (вправо), показаны красным, а те, которые подталкивают прогноз ниже, - синим.
  • Алкоголь: положительно влияет на рейтинг качества. Содержание алкоголя в этом вине составляет 11,8 (как показано в первой строке таблицы B), что выше среднего значения 10,41. Таким образом, это смещает прогноз вправо.
  • pH: отрицательно влияет на рейтинг качества. Значение pH ниже среднего (= 3,26
  • Сульфаты: положительно связано с рейтингом качества. Уровень сульфатов ниже среднего (= 0,64
  • Вы можете задаться вопросом, откуда мы знаем средние значения предикторов. Помните, что модель SHAP построена на наборе обучающих данных. Средние значения переменных: X_train.mean()

Как выглядит результат второго наблюдения в таблице B? Давай doshap_plot(1):

Как насчет 3-го наблюдения в Таблице B? Давайте сделаем shap_plot(2):

Просто сделать еще один, прежде чем вам станет скучно. Четвертое наблюдение в таблице B следующее: shap_plot(3)

Чего не делают ценности SHAP

С тех пор, как я опубликовал эту статью, ее родственную статью Объясните любые модели с помощью значений SHAP - используйте KernelExplainer и недавнюю разработку SHAP с более элегантными диаграммами читатели поделились со мной вопросами со своих встреч. со своими клиентами. Вопросы не о вычислении значений SHAP, но аудитория подумала, что могут сделать значения SHAP. Один из основных комментариев: Можете ли вы определить движущие силы, побуждающие нас разрабатывать стратегии?

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

Серия статей о объяснении модели

Тем из вас, кто интересуется объяснимостью модели, будет полезна следующая последовательность:

Часть I: Объясните свою модель с помощью значений SHAP

Часть II: SHAP с более элегантными диаграммами

Часть III: Объяснение объяснимого ИИ

Часть IV: Объясните любые модели со значениями SHAP - используйте KernelExplainer

Часть V: Объясните свою модель с помощью LIME

Часть VI: Объясните свою модель с помощью Microsoft InterpretML

Конечное примечание: значение Шепли в математической форме

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

Ллойд Шепли придумал эту концепцию решения для кооперативной игры в 1953 году. Шепли хочет вычислить вклад каждого игрока в коалиционную игру. Предположим, что имеется N игроков, а S - это подмножество N игроков. Пусть v (S) будет общей стоимостью S игроков. Когда игрок i присоединяется к игрокам S, предельный вклад игрока i составляет v (S ∪ { i}) - v (S). Если мы возьмем среднее значение вклада по возможным различным перестановкам, в которых может быть сформирована коалиция, мы получим правильный вклад игрока i:

Шепли устанавливает следующие четыре аксиомы, чтобы добиться справедливого вклада:

  • Аксиома 1: Эффективность. Сумма значений Шепли всех агентов равна стоимости всей коалиции.
  • Аксиома 2: Симметрия. У всех игроков есть шанс присоединиться к игре. Вот почему в таблице A выше перечислены все перестановки игроков.
  • Аксиома 3: пустышка. Если игрок i ничего не вносит в какую-либо коалицию S, то вклад игрока i равен нулю, т.е. φᵢ (v) = 0. Очевидно, нам нужно установить граничное значение.
  • Аксиома 4: Аддитивность. Для любой пары игр v, w: φ (v + w) = φ (v) + φ (w), где (v + w) (S) = v (S) + w (S) для всех S. Это свойство позволяет производить простое арифметическое суммирование.

Я применяю расчет значения Шепли к таблице (A), чтобы получить предельный вклад:

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

Как создать упрощенную версию?

Для читателей, интересующихся кодом, я делаю его доступным ниже:

Код создает этот сюжет: