Объяснимый ИИ с sklearn.inspection

Здравствуйте, любители НЛП! Написав о способах объяснения прогнозов с помощью LIME и SHAP, сегодня я углублюсь в другие темы Объяснимого ИИ, то есть графики частичной зависимости и отдельные графики условного ожидания. Их имена могут показаться запутанными, но уверяю вас, что их легко понять. Наслаждаться! 😄

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

Графики Частичная зависимость (PDP) и Индивидуальное условное ожидание (ICE) могут использоваться для визуализации и анализа взаимодействия между целевым откликом и набором интересующих входных признаков.

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

Индивидуальные графики условного ожидания

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

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

Давайте посмотрим, как сделать эти графики с помощью Python.

Пример кода

Сначала импортируем необходимые библиотеки.

В этом примере мы используем набор данных о жилье в Калифорнии, целью которого является прогнозирование средней цены на жилье в калифорнийских группах кварталов с использованием таких характеристик, как средний доход или количество комнат на домохозяйство. Затем мы обучим RandomForestRegressor прогнозировать цены на жилье на основе этих функций и, наконец, создадим графики частичной зависимости и отдельные графики условного ожидания, используя класс PartialDependenceDisplay из модуля sklearn.inspection.

Я добавил объяснение функций в наборе данных в следующем фрагменте кода. В этой статье мы в основном имеем дело с этими функциями:

  • AveOccup: среднее количество членов домохозяйства в блок-группе.
  • MedInc: средний доход в блок-группе.

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

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

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

Затем мы импортируем библиотеку shap и создаем небольшое подмножество обучающих данных, в данном случае со 100 образцами.

Далее мы делаем графики частичной зависимости, используя функцию partial_dependence модуля shap.plots и передавая в качестве аргументов:

  • Интересующая функция (AveOccup).
  • Функция предсказания (model.predict).
  • Набор данных (X100).
  • Делать ли график частичной зависимости или отдельный график условного ожидания (с ice ).
  • Следует ли отображать также среднее прогнозирование модели ( model_expected_value) и среднее значение признака ( feature_expected_value).

Эта функция выполняет итерацию по всем образцам в X100 и для каждого образца вызывает функцию model.predict много раз с разными значениями целевого признака, но сохраняя фиксированными дополнительные признаки (т. е. все остальные признаки). Результирующий график показывает средний результат модели для каждого значения целевого признака по всему набору данных.

На этом графике мы видим, что ожидаемый прогноз модели высокий, когда AveOccup меньше 2, затем он быстро уменьшается до тех пор, пока AveOccup не станет равным 4, и остается в основном постоянным для более высоких значений AveOccup.

Давайте сделаем то же самое для функции MedInc.

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

Давайте теперь попробуем отдельные графики условного ожидания. Мы можем сделать их снова, используя функцию partial_dependence, но на этот раз с параметром ice, установленным на True.

Результат по-прежнему показывает средний прогноз модели по вариациям функций AveOccup (темно-синяя линия). Тем не менее, графики ICE также показывают варианты вывода для каждой выборки, что позволяет нам увидеть, есть ли выборки с различным взаимодействием признаков.

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

Точно так же давайте вычислим график ICE для функции MedInc.

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

Давайте теперь отложим нашу модель и проанализируем обучающие данные, чтобы найти отношения между AveOccup, MedInc и ценой группы блоков. Мы создаем точечную диаграмму, где x — это AveOccup, y — это MedInc, а каждый образец цвета представляет цену группы блоков.

Можете ли вы угадать, как выглядит диаграмма?

Действительно, выборки с низким значением AveOccup и высоким значением MedInc, по-видимому, имеют более высокую цену, и мы видели, что модель научилась благодаря частичной зависимости и отдельным графикам условного ожидания. Похоже, модель усвоила осмысленные правила 🙂

Выводы и дальнейшие шаги

В этой статье мы увидели, что такое графики частичной зависимости (PDP) и графики индивидуального условного ожидания (ICE) и как их сделать в Python на примере регрессии в наборе данных о жилье в Калифорнии.

Возможные следующие шаги:

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

Спасибо за чтение! Если вы хотите узнать больше о НЛП, не забудьте подписаться на NLPlanet в Medium, LinkedIn и Twitter!

Сообщения, связанные с NLPlanet