TL; DR - с выпуском XGBoost 1.3 появилась новая захватывающая функция для интерпретируемости моделей - значения SHAP с ускорением на GPU. Значения SHAP - это метод локальной объяснимости прогнозов модели. То есть они дают вам возможность принципиальным образом исследовать влияние различных функций на выходные данные модели.

Фон SHAP и GPUTreeSHAP

SHAP по своей сути описывает средний эффект от добавления функции в модель, но делает это таким образом, чтобы попытаться учесть все возможные подмножества других функций. Хотя существует множество возможных методов описания релевантности функций, SHAP использует идеи теории игр, чтобы гарантировать полезные математические свойства, такие как эффективность и монотонность. Эффективность утверждает, что общие атрибуты общих характеристик складываются в прогноз модели - это дает значение SHAP естественной интерпретации, поскольку они эффективно разбивают прогноз на составные части. Монотонность гласит, что если модель изменяется так, что актуальность функции возрастает, ее атрибуция не должна уменьшаться. См. [1] для более подробного чтения значений SHAP применительно к ансамблям деревьев решений.

Значения SHAP были доступны в XGBoost уже для нескольких версий, но 1.3 обеспечивает ускорение графического процессора, сокращая время вычислений до 20 раз для значений SHAP и до 340 раз для значений взаимодействия SHAP. Это работает под капотом RAPIDS GPUTreeShap, который предлагает портативные реализации CUDA C ++ алгоритмов SHAP для моделей дерева решений. GPUTreeSHAP использует новый подход с массовым распараллеливанием, основанный на сглаживании и переупорядочении миллионов путей к деревьям из ансамбля и сопоставлении с тысячами ядер CUDA, где проблемы динамического программирования решаются с помощью специальных аппаратных инструкций. Этот алгоритм подробно описан в [3].

SHAP на практике

Давайте рассмотрим несколько основных примеров использования значений XGBoost и SHAP для определения ключевых функций и их взаимодействия в наборе данных о жилье Калифорнии. Это известный набор данных о ценах на жилье и атрибутах в Калифорнии из переписи 1990 года, доступный через scikit-learn.

XGBoost 1.3 с ускорением графического процессора можно установить через

pip install xgboost

Или установив версию 0.17 of RAPIDS, которая включает XGBoost 1.3.0 вместе с другими библиотеками с ускорением на GPU для анализа данных. (См. Страницу« Приступая к работе с RAPIDS для получения инструкций на основе conda и контейнеров.»)

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

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

SHAP time 0.16751956939697266

Вычисление всех значений SHAP занимает всего ~ 0,17 с с использованием графического процессора V100 по сравнению с 2,64 с с использованием 40 ядер ЦП на 2x Xeon E5–2698, то есть ускорение в 15 раз даже для этого небольшого набора данных.

«Shap_values» теперь содержит матрицу, в которой каждая строка является обучающим экземпляром из X, а столбцы содержат атрибуцию признаков (то есть сумму, которую каждая функция внесла в прогноз). Последний столбец выходных данных shap_values ​​содержит «смещение» или ожидаемый результат модели, если никакие функции не использовались. Каждая строка всегда в точности соответствует прогнозу модели - это уникальное преимущество значений SHAP по сравнению с другими методами объяснения модели.

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

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

SHAP interactions time 1.3384981155395508

Вычисление всех взаимодействий занимает всего ~ 1,33 с на нашем V100, тогда как на 40 ядер ЦП требуется ~ 40,12 с, то есть ускорение в 30 раз. Это относительно небольшой набор данных с возможными взаимодействиями функций только 8x8. Для больших наборов данных, как показано в нашей статье, GPUTreeShap может сократить вычисления взаимодействия функций с дней до нескольких минут.

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

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

Заключение

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

Следующие шаги

XGBoost 1.3.0 - это только первый выпуск с GPUTreeSHAP, со многими дополнительными функциями, запланированными на будущее. Следите за будущими статьями об ускорении графического процессора для SHAP, включая нашу интеграцию с популярным пакетом Python shap, который расширяет эту работу на более широкий спектр моделей деревьев, таких как LightGBM, sklearn random forest и CatBoost.

использованная литература

[1] Лундберг, Скотт М. и др. «От локальных объяснений к глобальному пониманию с объяснимым ИИ для деревьев». Nature Machine Intelligence 2.1 (2020): 2522–5839.

[2] Чен, Тяньци и Карлос Гестрин. «XGBoost: масштабируемая система повышения качества дерева». Материалы 22-й Международной конференции ACM SIGKDD по открытию знаний и интеллектуальному анализу данных. 2016 г.

[3] Митчелл, Рори, Эйбе Франк и Джеффри Холмс. «GPUTreeShap: Fast Parallel Tree Interpretability». Препринт arXiv arXiv: 2010.13972 (2020).