Интерпретируемость машинного обучения с помощью кода с помощью SHAP.

Интерпретируемость машинного обучения становится все более важной, особенно по мере усложнения алгоритмов машинного обучения.

Насколько хорош ваш алгоритм машинного обучения, если его нельзя объяснить? Менее производительные, но объяснимые модели (такие как линейная регрессия) иногда предпочтительнее более производительных, но моделей черного ящика (таких как XGBoost или нейронные сети). Вот почему исследования объяснимости машинного обучения (также известные как eXplainable AI или XAI) в последнее время стали растущей областью с появлением удивительных проектов, таких как SHAP.

Чувствовали бы вы себя уверенно, используя модель машинного обучения, если не можете объяснить, что она делает?

Именно здесь SHAP может оказать большую помощь: он может объяснить любую модель машинного обучения, указав влияние каждой из функций на цель. Но это не все, на что способен ШАП. Создайте простую модель (sklearn/xgboost/keras) и используйте SHAP: теперь у вас есть процесс выбора функций, который оказывает наибольшее влияние на прогноз.

Но как SHAP работает под капотом? И как начать им пользоваться?

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

Весь код для этого туториала можно найти на Kaggle здесь. Не стесняйтесь запустить блокнот самостоятельно или создать копию!

1. Как начать использовать SHAP?

Здесь мы рассмотрим простой пример со значениями Shap, используя конкурс Kaggle Цены на жилье — передовые методы регрессии, чтобы проиллюстрировать SHAP. Если вам интересно или вы никогда раньше не были на Kaggle, читайте подробнее о данных и самом конкурсе здесь.

Процесс использования shap довольно прост: нам нужно построить модель, а затем использовать библиотеку shap, чтобы объяснить ее.

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

Обычный рабочий процесс с точки зрения кода выглядит так:

  1. Создайте оценщик. Например, GradientBoostingRegressor из sklearn.ensemble:
estimator = GradientBoostingRegressor(random_state = random_state)

2. Обучите своего оценщика:

estimator.fit(X_train, y_train)

3. используйте библиотеку shap для расчета значений SHAP. Например, используя следующий код:

explainer = shap.Explainer(estimator.predict, X100)
shap_values = explainer(X100)

4. Посмотрите, как влияет каждая функция, используя shap.summary_plot:

shap.summary_plot(shap_values, max_display=15, show=False)

Например, вы можете видеть здесь, что функция TotalQual оказывает наибольшее влияние на выходные данные модели. Высокие значения (выделены красным цветом на графике выше) общего качества могут увеличить цену недвижимости примерно на 60 000, а низкие значения могут снизить цену примерно на 20 000. Интересно знать, занимаетесь ли вы недвижимостью, не так ли?

Но это далеко не все, на что способен ШАП! SHAP также может объяснить один прогноз.

Например, используя shap.plots.waterfall для одного элемента в наборе данных, вы можете получить следующее:

Для этого конкретного примера прогнозируемая цена составила 166 тысяч (против 174 тысяч в среднем). И мы можем понять, почему алгоритм предсказал такое: например, значение TotalQual, высокое (7), увеличивает значение, а значение YearBuilt (1925) снижает значение.

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

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

shap.summary_plot(shap_values, max_display=15, show=False, plot_type='bar')

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

2. Краткий обзор: как работает SHAP внутри?

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

Но давайте попробуем объяснить вкратце, что делает SHAP и лежащие в его основе концепции, не слишком углубляясь в математические уравнения.

Объяснимое машинное обучение (также известное как eXplainable AI или XAI) направлено на понимание того, почему результат модели машинного обучения такой. Для этого вы теоретически можете взять определение своей модели, например, модель на основе дерева, такую ​​как Random Forest, а затем посмотреть, почему ваш вывод такой. Но это не так просто и, конечно, становится еще сложнее для моделей глубокого обучения…

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

Это основная концепция популярного алгоритма XAI (SHAP, LIME и т. д.): используйте существующую модель, аппроксимируйте ее с помощью объяснимой модели, и теперь у вас есть объяснимая модель. Теперь сложность заключается в том, как аппроксимировать модель машинного обучения вокруг заданного прогноза, а затем и вокруг большинства прогнозов.

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

Ууууу! Теперь вы знаете основы того, как работает SHAP, и как вы можете сразу начать использовать его в своих проектах машинного обучения!

Надеюсь, вам понравилась эта статья! Дайте мне знать, если у вас есть какие-либо вопросы или предложения. Также не стесняйтесь обращаться ко мне в LinkedIn, GitHub или Twitter или ознакомьтесь с некоторыми другими руководствами, которые я написал по лучшим практикам DS/ML. Приятного обучения!

Источники: