<НА ГЛАВНУЮ

Мастерство анализа взаимодействий признаков в ML-моделях с SHAP-IQ и индексами взаимодействия Shapley

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

Анализ взаимодействий признаков с помощью SHAP-IQ

Пакет SHAP-IQ расширяет традиционные значения Shapley, позволяя анализировать взаимодействия признаков в моделях машинного обучения с использованием индексов взаимодействия Shapley (SII). В то время как классические значения Shapley объясняют вклад отдельных признаков, они не учитывают, как признаки взаимодействуют, например, как долгота и широта вместе влияют на цену дома. SHAP-IQ отделяет индивидуальные эффекты от взаимодействий, предоставляя более глубокие инсайты.

Установка зависимостей

Для работы установите необходимые пакеты:

!pip install shapiq overrides scikit-learn pandas numpy

Загрузка и подготовка данных

В этом примере используется набор данных Bike Sharing с OpenML. После загрузки данные разбиваются на обучающую и тестовую выборки.

import shapiq
from sklearn.ensemble import RandomForestRegressor
from sklearn.metrics import mean_absolute_error, mean_squared_error, r2_score
from sklearn.model_selection import train_test_split
import numpy as np
 
# Загрузим данные
X, y = shapiq.load_bike_sharing(to_numpy=True)
 
# Разделим на обучающую и тестовую выборки
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)

Обучение модели и оценка качества

Обучаем RandomForestRegressor и оцениваем его с помощью стандартных метрик.

model = RandomForestRegressor()
model.fit(X_train, y_train)
 
y_pred = model.predict(X_test)
 
mae = mean_absolute_error(y_test, y_pred)
rmse = np.sqrt(mean_squared_error(y_test, y_pred))
r2 = r2_score(y_test, y_pred)
 
print(f"R² Score: {r2:.4f}")
print(f"Mean Absolute Error: {mae:.4f}")
print(f"Root Mean Squared Error: {rmse:.4f}")

Настройка объяснителя SHAP-IQ

TabularExplainer вычисляет значения взаимодействий Shapley с учетом взаимодействий до 4 признаков (max_order=4), раскрывая сложные групповые эффекты.

explainer = shapiq.TabularExplainer(
    model=model,
    data=X,
    index="k-SII",
    max_order=4
)

Объяснение одного примера

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

instance_id = 100
x_explain = X_test[instance_id]
y_true = y_test[instance_id]
y_pred = model.predict(x_explain.reshape(1, -1))[0]
print(f"Instance {instance_id}, True Value: {y_true}, Predicted Value: {y_pred}")
for i, feature in enumerate(feature_names):
    print(f"{feature}: {x_explain[i]}")

Вычисление значений взаимодействий

С помощью explainer вычисляем значения взаимодействий Shapley для выбранного примера, отражая влияние отдельных и комбинированных признаков.

interaction_values = explainer.explain(X[100], budget=256)
print(interaction_values)

Значения первого порядка Shapley

Для анализа только индивидуальных вкладов признаков используем max_order=1 в TreeExplainer, что дает стандартные значения Shapley без взаимодействий.

explainer = shapiq.TreeExplainer(model=model, max_order=1, index="SV")
si_order = explainer.explain(x=x_explain)
si_order

Визуализация с помощью Waterfall диаграммы

Waterfall диаграмма разбивает предсказание на вклады признаков, начиная с базового уровня. Положительные вклады (например, Weather, Humidity) увеличивают предсказание, отрицательные (например, Temperature, Year) уменьшают.

si_order.plot_waterfall(feature_names=feature_names, show=True)

Диаграмма помогает понять, какие признаки и в каком направлении влияют на решение модели, что важно для интерпретации.

Полный код и дополнительные материалы доступны на GitHub и в сообществах проекта.

🇬🇧

Switch Language

Read this article in English

Switch to English