0Pricing
R Academy · Урок

Важность признаков и интерпретация моделей

Извлекайте и визуализируйте важность переменных и значения SHAP из ансамблевых моделей

«Важность признаков и интерпретация моделей» — бесплатный урок R Academy на CoddyKit. Это урок 4 из 4. Ты можешь прочитать весь урок бесплатно ниже — а потом практиковать его прямо в браузере с встроенным редактором кода и ИИ-репетитором 24/7. Это часть пути обучения R Academy, и твой прогресс синхронизируется между веб-версией и приложением CoddyKit. Курс R Academy содержит 4 уроков всего.

Почему важна интерпретация моделей

Точные модели, которым никто не доверяет, на практике бесполезны. Интерпретация моделей отвечает на два вопроса: Какие признаки наиболее важны в целом? (глобальная важность) и Почему модель сделала именно это предсказание? (локальное объяснение). И XGBoost, и ranger имеют встроенные инструменты для оценки глобальной важности, а значения SHAP позволяют получать локальные объяснения.

# The interpretation toolkit we will use:
# - xgb.importance()      XGBoost global importance
# - xgb.plot.importance() Visualise XGBoost importance
# - ranger importance     Random forest importance
# - shapviz package       SHAP value computation + plots

cat('Packages needed: xgboost, ranger, shapviz')

xgb.importance() — три метрики

xgb.importance(model) возвращает таблицу данных с тремя метриками важности для каждого признака:

  • Gain: среднее улучшение функции потерь при разбиениях по этому признаку (наиболее информативная метрика).
  • Cover: среднее количество наблюдений, на которые влияют разбиения по этому признаку.
  • Frequency: доля разбиений, в которых использовался этот признак.
library(xgboost)
library(MASS)

X <- as.matrix(Boston[, -14])
y <- Boston[, 14]
dtrain <- xgb.DMatrix(data = X, label = y)

params <- list(objective = 'reg:squarederror', eta = 0.1,
               max_depth = 5, subsample = 0.8)
model  <- xgboost(data = dtrain, params = params,
                  nrounds = 100, verbose = 0)

imp <- xgb.importance(model = model, feature_names = colnames(X))
print(head(imp))

xgb.plot.importance()

xgb.plot.importance(importance_matrix) создаёт горизонтальную столбчатую диаграмму важности признаков. По умолчанию используется метрика Gain. Аргумент top_n ограничивает вывод наиболее важными признаками для большей наглядности.

imp <- xgb.importance(model = model, feature_names = colnames(X))

# Plot top 10 features by Gain
xgb.plot.importance(
  importance_matrix = imp,
  top_n  = 10,
  measure = 'Gain',
  main   = 'XGBoost Feature Importance (Gain)'
)

Важность переменных в ranger

ranger поддерживает два показателя важности: 'impurity' (быстрый, вычисляется во время обучения) и 'permutation' (более медленный, но измеряет фактическое влияние каждого признака на предсказания). Для надёжного ранжирования обычно предпочитают перестановочную важность.

library(ranger)

# Impurity importance (fast)
rf_imp <- ranger(
  medv ~ ., data = MASS::Boston,
  num.trees  = 500,
  importance = 'impurity'
)
imp_impurity <- rf_imp$variable.importance

# Permutation importance (more reliable, slower)
rf_perm <- ranger(
  medv ~ ., data = MASS::Boston,
  num.trees  = 500,
  importance = 'permutation'
)
imp_permutation <- rf_perm$variable.importance

cbind(impurity = sort(imp_impurity, dec=TRUE),
      permutation = sort(imp_permutation, dec=TRUE))

Сравнение важности в ranger и XGBoost

Разные модели присваивают разные оценки важности, поскольку измеряют разные характеристики. Важность на основе неоднородности (используемая в ranger по умолчанию) может быть смещена в пользу признаков с большим числом уникальных значений. Перестановочная важность надёжнее. Среди трёх метрик XGBoost Gain обычно считается наиболее информативной.

# Align rankings for comparison
xgb_rank <- imp$Feature
rf_rank  <- names(sort(rf_perm$variable.importance, dec=TRUE))

# Spearman rank correlation between the two rankings
shared <- intersect(xgb_rank, rf_rank)
xgb_pos <- match(shared, xgb_rank)
rf_pos  <- match(shared, rf_rank)

cor(xgb_pos, rf_pos, method = 'spearman')

Что такое значения SHAP?

Значения SHAP (SHapley Additive exPlanations) раскладывают каждое предсказание на вклады отдельных признаков на основе теории игр. Для предсказания одного наблюдения значения SHAP в сумме равны разнице между результатом модели и базовым уровнем (средним предсказанием). Это позволяет получать как глобальные, так и локальные объяснения.

XGBoost изначально поддерживает tree SHAP через predict(model, data, predcontrib = TRUE).

# Compute SHAP values natively from XGBoost
shap_matrix <- predict(
  model,
  newdata     = dtrain,
  predcontrib = TRUE  # returns SHAP contributions
)

# Result: matrix with one column per feature + BIAS column
dim(shap_matrix)  # rows x (features + 1)
colnames(shap_matrix)

Основы пакета shapviz

Пакет shapviz предоставляет широкие возможности визуализации значений SHAP. Передайте исходную матрицу SHAP и матрицу признаков в shapviz(), а затем используйте такие функции построения графиков, как sv_importance(), sv_waterfall() и sv_beeswarm().

library(shapviz)

# Build shapviz object from XGBoost model
shp <- shapviz(model, X_pred = X)

# Global importance: mean |SHAP| per feature
sv_importance(shp, kind = 'bar')

# Beeswarm plot (SHAP summary plot)
sv_importance(shp, kind = 'beeswarm')

Водопадная диаграмма — локальное объяснение

Водопадная диаграмма объясняет одно предсказание: она показывает, как каждый признак сместил предсказание выше или ниже базового уровня. Положительные значения SHAP (красные столбцы) увеличивают предсказание, а отрицательные (синие столбцы) уменьшают его. Базовый уровень — это средний результат модели.

library(shapviz)

shp <- shapviz(model, X_pred = X)

# Explain the prediction for observation 1
sv_waterfall(shp, row_id = 1) +
  ggplot2::labs(
    title = 'SHAP Waterfall — Observation 1',
    subtitle = 'How each feature contributed to this prediction'
  )

Графики частичной зависимости

График частичной зависимости (PDP) показывает предельное влияние одного признака на результат модели в среднем по всем остальным признакам. Он позволяет увидеть, является ли зависимость линейной, монотонной или содержит нелинейные закономерности. Используйте пакет pdp или SHAPforxgboost::pdp_shap().

library(pdp)

# Partial dependence for 'lstat' in the Boston housing model
# We need a predict function wrapper for ranger
rf <- ranger(medv ~ ., data = MASS::Boston, num.trees = 300)

pd <- partial(
  rf,
  pred.var = 'lstat',
  train    = MASS::Boston,
  type     = 'regression'
)

plot(pd, type = 'l', lwd = 2,
     xlab = 'lstat', ylab = 'Partial Dependence',
     main = 'PDP: lstat vs medv')

График зависимости SHAP

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

library(shapviz)

shp <- shapviz(model, X_pred = X)

# SHAP dependence plot for 'lstat', coloured by 'rm'
sv_dependence(
  shp,
  v       = 'lstat',   # main feature on x-axis
  color_var = 'rm'     # interaction feature for colour
)

Пакет vip — единый интерфейс важности

Пакет vip предоставляет не зависящий от модели интерфейс оценки важности, работающий с ranger, XGBoost и любой моделью parsnip. vip(model) создаёт столбчатую диаграмму, а vi(model) возвращает значения важности в виде tibble.

library(vip)

# Works with parsnip fitted models
lm_fit <- fit(
  linear_reg() |> set_engine('lm'),
  medv ~ ., data = MASS::Boston
)

vip(lm_fit, num_features = 10)

# Also works with ranger directly
vip(rf_imp, num_features = 10)

# Return importance as a data frame
vi(rf_imp)

Быстрая проверка

Какая метрика обычно считается наиболее информативной для понимания качества признаков в XGBoost?

Итоги по интерпретации

Основные выводы из темы «Важность признаков и интерпретация моделей»:

  • xgb.importance(model) возвращает Gain, Cover и Frequency; Gain наиболее информативна.
  • xgb.plot.importance(imp) создаёт столбчатую диаграмму важности в XGBoost.
  • ranger поддерживает важность 'impurity' (быструю) и 'permutation' (надёжную).
  • Значения SHAP раскладывают каждое предсказание на вклады отдельных признаков.
  • shapviz предоставляет водопадные диаграммы, диаграммы типа beeswarm и графики зависимости для SHAP.
  • Графики частичной зависимости показывают среднее предельное влияние каждого признака.
  • Пакет vip предоставляет единый интерфейс оценки важности, не зависящий от модели.
library(shapviz)

# Complete interpretation workflow
shp <- shapviz(xgb_model, X_pred = X_matrix)

# 1. Global importance
sv_importance(shp, kind = 'beeswarm')

# 2. Local explanation for one observation
sv_waterfall(shp, row_id = 42)

# 3. Feature relationship
sv_dependence(shp, v = 'most_important_feature')

Часто задаваемые вопросы

Урок «Важность признаков и интерпретация моделей» бесплатный?

Да — полный текст урока «Важность признаков и интерпретация моделей» бесплатно доступен здесь в веб-версии. Чтобы практиковать его интерактивно (встроенный редактор кода и ИИ-репетитор 24/7) и разблокировать остальной курс R Academy, подпишись на CoddyKit PRO. Курс R Academy содержит 4 уроков всего.

Чему я научусь в уроке «Важность признаков и интерпретация моделей»?

Извлекайте и визуализируйте важность переменных и значения SHAP из ансамблевых моделей Ты практикуешь R Academy с помощью реального кода, который запускаешь прямо в браузере, и ИИ-репетитор 24/7 отвечает на твои вопросы во время урока.

Нужен ли мне опыт, чтобы начать R Academy?

Предыдущий опыт не требуется. R Academy на CoddyKit структурирован для всех уровней — от новичков до продвинутых, поэтому ты можешь начать отсюда или с самого начала и учиться в своем темпе. Это урок 4 из 4.

Сколько времени занимает урок «Важность признаков и интерпретация моделей»?

Большинство уроков CoddyKit занимают около 5–10 минут. Каждый из них компактный и интерактивный, поэтому ты постоянно делаешь прогресс и продолжаешь с того же места в веб-версии и приложении.

Можно ли писать и запускать код в этом уроке R Academy?

Да. Каждый урок R Academy включает встроенный редактор кода, поэтому ты пишешь и запускаешь реальный код прямо в браузере и получаешь моментальную обратную связь от AI — локальная установка не требуется.

Все уроки этого курса

  1. Деревья решений: основа ансамблей
  2. Случайный лес с ranger
  3. Градиентный бустинг с xgboost
  4. Важность признаков и интерпретация моделей
← Назад к R Academy