Важность перестановок и частичная зависимость определяют новую версию поддержки scikit-learn 0.22 (праздник🎉!) И SHAP в качестве бонуса.

3 декабря 2019 года была выпущена новая версия scikit-learn версии 0.22, которая поставляется с множеством замечательных функций, которые нельзя пропустить, поскольку в их Основные моменты выпуска для scikit-learn 0.22 дается краткое описание :

Видеть? Множество долгожданных функций! В частности родная поддержка укладки ROCKS! Но в этом посте давайте рассмотрим три важных инструмента объяснения модели ,, часть из которых была реализована в новой версии scikit-learn авторами plot_partial_dependence и permutation_importance.

Оглавление

  1. Почему имеет значение объяснимость?
  2. Первое первым…
  3. Важность переменной - важность переменной модели на основе дерева
  4. Переменная важность - важность перестановки
  5. График частичной зависимости (PDP)
  6. ДОБАВКИ SHAPLEY (SHAP)
  7. Тогда какой из них использовать?
  8. Заключение
  9. Ссылка

1. Почему имеет значение объяснимость?

Часто говорят, что модель машинного обучения - это «черный ящик».

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

Вместо этого люди хотят услышать следующее: «переменная A работает положительно на +10, переменная B работает отрицательно на -2…», и вот где линейные модели имеют преимущество перед обычные подозреваемые в продвинутых алгоритмах машинного обучения.

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

С помощью этих инструментов мы можем знать и понимать (по крайней мере, чувствовать, что мы понимаем), что « какая переменная влияет на прогноз, насколько »?

Согласно курсу Kaggle Объясняемость машинного обучения, преимущества объяснимости заключаются в следующем:

Отладка

- Вы можете определить ошибочную предварительную обработку или утечку данных по подозрительному влиянию на прогноз.

Информирование разработчиков функций

- Если у вас нет интуиции, какая комбинация переменных может дать хорошую предсказательную силу, исследование объяснимости данных может дать вам ответ.

Направление будущего сбора данных

- Какую новую переменную стоит инвестировать в сбор?

Информирование людей о принятии решений

- Предоставление информации для принятия решений человеком посредством визуализации причины прогноза.

Укрепление доверия

- Если объяснение соответствует общепринятому мнению людей или экспертов, оно может укрепить доверие к модели.

Теперь я представлю три распространенных инструмента объяснения,

  • важность переменной (на основе дерева или путем перестановки)
  • график частичной зависимости
  • ФОРМА

SHAP не был частью этого обновления sklearn, но я включил его в список, потому что он важен для объяснимости модели.

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

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

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

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

2. Первое, что нужно сделать…

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

Таким образом, вы не можете ожидать, что объяснение модели заменит EDA. Вместо этого он предназначен для поддержки и улучшения EDA для лучшей разработки функций (вернитесь к первой главе и просмотрите «Почему имеет значение объяснимость?» !!)

3. Важность переменной - важность переменной модели на основе дерева

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

Модели на основе дерева решений (классификатор дерева решений, CART, random forest, lightgbm и т. Д.) Имеют собственную логику вычисления важности переменной, основанную на уменьшении функции потерь путем разделения узлов (подробнее см. Здесь), но имейте в виду, что GBDT, как правило, имеет несколько вариантов для расчета важности, и вариант по умолчанию не является необходимым для уменьшения функции потерь. Это могут быть другие показатели, например количество разделений по интересующей переменной.

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

Но тогда разве другие модели не могут выполнять переменную важность? Ответ положительный! Вот для чего нужна «важность перестановки»!

4. Важность переменной - важность перестановки

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

Используя имя переменной в таблице выше, допустим, мы хотим предсказать рост человека, когда ему исполнится 20 лет (первый столбец), используя данные, доступные для возраста 10 лет (другие столбцы).

Теперь я предполагаю, что мы уже обучили некоторую модель и имеем точность спуска (шаг 0 ниже) - опять же, мы не можем получить значение переменной без модели спуска.

0. Добиться успеха в создании хорошей прогнозной модели.

1. Важность перестановки начинается с случайного перемешивания значений в одном столбце для подготовки своего рода «нового» набора данных.

2. Затем, используя «новые» данные, сделайте прогнозы, используя предварительно обученную модель (не повторно тренируйте модель с «новыми» данными!). Точность должна быть несколько хуже, чем по исходным данным, и должна иметь увеличение функции потерь. Обратите внимание на увеличение функции потерь.

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

4. По желанию, но обычно нормализуйте важность всех переменных до 1,0.

5. Изменяя перемешивание, мы можем вычислять важность одной переменной несколько раз. Таким образом, мы можем рассчитать среднее значение и стандартное отклонение важности перестановки.

Вот пример кода с использованием новой функции permutation_importance в scikit-learn версии 0.22. Использованный набор данных был взят из конкурса Kaggle« Прогнозирование тарифов на такси в Нью-Йорке ». Результатом кода является сравнение важности переменной на основе дерева с выводом важности перестановки.

5. График частичной зависимости (PDP)

Важность переменной дает один балл важности для каждой переменной и помогает узнать, какая переменная влияет в большей или меньшей степени.

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

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

PDP может быть реализован с помощью новой функции plot_partial_dependence в scikit-learn версии 0.22.

Может существовать версия PDP с двумя переменными. Новая функция scikit-learn поддерживает любую из них.

Из выходных данных PDP, приведенных выше, мы видим, что PDP требует больших вычислительных ресурсов и времени для запуска, в частности, даже одно 2D PDP заняло целых 13 секунд.

6. Разъяснения по добавкам Шапли (SHAP)

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

На иллюстрации предсказанные значения для каждого идентификатора записи будут разложены таким образом, что «Прогноз» = «Среднее предсказание» + «Значение SHAP для каждой переменной».

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

Математический механизм слишком сложно описать здесь, и я не совсем понимаю его :), но, по крайней мере, мы можем запустить API для получения значений SHAP благодаря библиотеке python shap.

7. Тогда какой из них использовать?

Мы увидели три различных типа выходных данных объяснимости модели: важность переменной, PDP и SHAP. Все они дают разные результаты. Как мы можем выбрать один из них, если нам нужно объяснение?

а. Значения SHAP можно использовать для чего угодно.

Первое:

SHAP имеет преимущество в том смысле, что они обеспечивают наиболее детализированные выходные данные.

Гранулярные выходные данные можно свести к менее гранулированным, в то время как обратное неверно. Это означает, что:

по значениям SHAP мы можем вычислить результаты, подобные важности переменных, и график, подобный PDP:

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

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

б. Тогда почему люди не всегда используют SHAP?

Одним из недостатков SHAP является более длительное время вычислений. Существует два типа SHAP, и сообщается, что «KernelSHAP» очень медленный (см. Комментарий в примере кода выше; он был в 40 000 раз медленнее !!), а другой тип « TreeSHAP » - это более быстрая реализация. Но давайте помнить об одном:

К сожалению, TreeSHAP доступен только для моделей на основе дерева решений.

Еще одна причина не использовать SHAP - это то, зачем вам требуется объяснение модели:

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

c. Когда достаточно переменной важности

Могут быть сценарии, когда важности переменной достаточно, и нам не нужны PDP или SHAP.

  • Когда мы хотим, чтобы эксперт в предметной области провел нюхательный тест на разумность модели.

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

  • Когда мы хотим, чтобы порядок важности переменных выполнял выбор переменных.

Выбор переменных полезен при моделировании для более простого объяснения модели, удаления шума модели для повышения точности, предотвращения коллинеарности и т. Д.

С выходами переменной важности мы можем выбрать подмножество исходного набора переменных, имеющее наивысшую важность.

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

d. Когда PDP достаточно.

Кроме того, в некоторых сценариях нам нужно больше, чем важность переменной, но PDP достаточно, а SHAP - излишне.

  • Когда мы знаем, какая переменная важна, и просто хотим узнать, "как".

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

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

Отсюда, естественно, возникла новая инженерная идея, позволяющая определить расстояние между точками посадки и высадки, а не только их абсолютные местоположения по отдельности.

8. Заключение

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

Я представил три типа методологий объяснимости: важность переменной (на основе дерева и перестановка), график частичной зависимости (PDP) и SHAP.

Хотя SHAP является наиболее детальным способом узнать объяснимость модели и может извлекать выходные данные, аналогичные другим подходам, выполнение может занять время и стать излишним.

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

9. Справочная информация

Основные сведения о выпуске scikit-learn 0.22

Курсы Kaggle Объясняемость машинного обучения

Кристоф Мольнар« Интерпретируемое машинное обучение - руководство по созданию объяснимых моделей черного ящика

Джошуа Подуска« Библиотеки Python SHAP и LIME: Часть 1 - Отличные объяснения, с плюсами и минусами обоих »