В этом руководстве мы рассмотрим, как использовать пакет SHAP-IQ для выявления и визуализации взаимодействий признаков в моделях машинного обучения с помощью индексов взаимодействия Шепли (SII), основываясь на традиционных значениях Шепли.
Значения Шепли отлично подходят для объяснения вклада отдельных признаков в моделях ИИ, но не учитывают взаимодействия между признаками. Индексы взаимодействия Шепли идут дальше, разделяя индивидуальные эффекты и взаимодействия, предлагая более глубокое понимание — например, как долгота и широта вместе влияют на цены на жильё.
В этом руководстве мы начнём работу с пакетом shapiq для вычисления и изучения этих взаимодействий Шепли для любой модели.
Установка зависимостей
Для начала работы с пакетом SHAP-IQ необходимо установить следующие зависимости:
`!pip install shapiq overrides scikit-learn pandas numpy`
Загрузка и предварительная обработка данных
В этом руководстве мы будем использовать набор данных о велосипедах из OpenML. После загрузки данных мы разделим их на обучающие и тестовые наборы для подготовки к обучению модели и оценке её производительности.
`import shapiq`
`from sklearn.ensemble import RandomForestRegressor`
`from sklearn.metrics import meanabsoluteerror, meansquarederror, r2_score`
`from sklearn.modelselection import traintest_split`
`import numpy as np`
`# Load data`
`X, y = shapiq.loadbikesharing(to_numpy=True)`
`# Split into training and testing`
`Xtrain, Xtest, ytrain, ytest = traintestsplit(X, y, testsize=0.2, randomstate=42)`
Обучение модели и оценка её производительности
`# Train model`
`model = RandomForestRegressor()`
`model.fit(Xtrain, ytrain)`
`# Predict`
`ypred = model.predict(Xtest)`
`# Evaluate`
`mae = meanabsoluteerror(ytest, ypred)`
`rmse = np.sqrt(meansquarederror(ytest, ypred))`
`r2 = r2score(ytest, y_pred)`
`print(f”R² Score: {r2:.4f}”)`
`print(f”Mean Absolute Error: {mae:.4f}”)`
`print(f”Root Mean Squared Error: {rmse:.4f}”)`
Настройка объяснителя
Мы настроим TabularExplainer с помощью пакета shapiq для вычисления значений взаимодействия Шепли на основе метода k-SII (k-order Shapley Interaction Index). Установив max_order=4, мы позволим объяснителю учитывать взаимодействия до четырёх признаков одновременно, что позволит глубже понять, как группы признаков коллективно влияют на прогнозы модели.
`# set up an explainer with k-SII interaction values up to order 4`
`explainer = shapiq.TabularExplainer(`
`model=model,`
`data=X,`
`index=”k-SII”,`
`max_order=4`
`)`
Объяснение локального экземпляра
Мы выберем конкретный тестовый экземпляр (индекс 100) для генерации локальных объяснений. Код выводит истинные и предсказанные значения для этого экземпляра, а также разбивку его значений признаков. Это помогает нам понять точные входные данные, переданные в модель, и задаёт контекст для интерпретации следующих объяснений взаимодействия Шепли.
`# create explanations for different orders`
`feature_names = list(df[0].columns) # get the feature names`
`nfeatures = len(featurenames)`
`# select a local instance to be explained`
`instance_id = 100`
`xexplain = Xtest[instance_id]`
`ytrue = ytest[instance_id]`
`ypred = model.predict(xexplain.reshape(1, -1))[0]`
`print(f”Instance {instanceid}, True Value: {ytrue}, Predicted Value: {y_pred}”)`
`for i, feature in enumerate(feature_names):`
`print(f”{feature}: {x_explain[i]}”)`
Анализ значений взаимодействия
Мы используем метод explainer.explain() для вычисления значений взаимодействия Шепли для конкретного экземпляра данных (X[100]) с бюджетом в 256 оценок модели. Это возвращает объект InteractionValues, который фиксирует, как отдельные признаки и их комбинации влияют на выходные данные модели. Параметр max_order=4 означает, что мы учитываем взаимодействия, включающие до четырёх признаков.
`interaction_values = explainer.explain(X[100], budget=256)`
`# analyse interaction values`
`print(interaction_values)`
Построение диаграммы «Водопад»
Диаграмма «Водопад» визуально разбивает прогноз модели на отдельные вклады признаков. Она начинается с базового прогноза и добавляет/вычитает вклад каждого признака в значение Шепли, чтобы достичь окончательного прогнозируемого результата.
В нашем случае мы будем использовать вывод TreeExplainer с max_order=1 (то есть только индивидуальные вклады) для визуализации вклада каждого признака.
`siorder.plotwaterfall(featurenames=featurenames, show=True)`
В нашем случае базовое значение (то есть ожидаемый выход модели без какой-либо информации о признаках) составляет 190,717. По мере добавления вкладов от отдельных признаков (значения Шепли первого порядка) мы можем наблюдать, как каждый из них увеличивает или уменьшает прогноз:
* Признаки вроде «Погода» и «Влажность» имеют положительный вклад, увеличивая прогноз выше базового.
* Признаки вроде «Температура» и «Год» имеют сильное отрицательное влияние, снижая прогноз на −35,4 и −45 соответственно.
Диаграмма «Водопад» помогает нам понять, какие признаки влияют на прогноз и в каком направлении, предоставляя ценную информацию о принятии решений моделью.
1. Какие зависимости необходимо установить для работы с пакетом SHAP-IQ?
Для работы с пакетом SHAP-IQ необходимо установить следующие зависимости: `!pip install shapiq overrides scikit-learn pandas numpy`.
2. Какие шаги включает в себя предварительная обработка данных перед обучением модели?
Предварительная обработка данных включает в себя загрузку данных с помощью `shapiq.loadbikesharing(tonumpy=True)`, разделение данных на обучающие и тестовые наборы с помощью `traintestsplit(X, y, testsize=0.2, random_state=42)`, обучение модели и оценку её производительности.
3. Как настроить объяснитель для вычисления значений взаимодействия Шепли?
Для настройки объяснителя необходимо создать экземпляр `TabularExplainer` с помощью пакета shapiq, указав модель, данные, метод `k-SII` и максимальный порядок взаимодействий. Например: `explainer = shapiq.TabularExplainer(model=model, data=X, index=”k-SII”, max_order=4)`.
4. Какие параметры используются для генерации локальных объяснений?
Для генерации локальных объяснений используется параметр `instanceid` для выбора конкретного тестового экземпляра, `xexplain` для представления данных этого экземпляра, `ytrue` и `ypred` для сравнения истинных и предсказанных значений, а также `feature_names` для получения имён признаков.
5. Как интерпретировать диаграмму «Водопад»?
Диаграмма «Водопад» визуально разбивает прогноз модели на отдельные вклады признаков. Она начинается с базового прогноза и добавляет/вычитает вклад каждого признака в значение Шепли, чтобы достичь окончательного прогнозируемого результата. Признаки с положительным вкладом увеличивают прогноз, а с отрицательным — уменьшают. Это помогает понять, какие признаки влияют на прогноз и в каком направлении.