Мастерство анализа взаимодействий признаков в 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