0Pricing
R Academy · Aula

Importância de atributos e interpretação de modelos

Extraia e visualize a importância das variáveis e os valores SHAP de modelos de conjunto.

Importância de atributos e interpretação de modelos é uma aula grátis de R Academy no CoddyKit. Esta é a aula 4 de 4. Você pode ler a aula completa abaixo gratuitamente — depois pratica ao vivo no navegador com um editor de código integrado e um tutor de IA 24/7. Faz parte do caminho de aprendizado de R Academy, e seu progresso é sincronizado entre a web e o app CoddyKit. O curso de R Academy inclui 4 aulas no total.

Por que a interpretação do modelo é importante

Modelos precisos nos quais ninguém confia são inúteis na prática. A interpretação de modelos responde a duas perguntas: Quais características são mais importantes globalmente? (importância global) e Por que o modelo fez esta previsão específica? (explicação local). Tanto o XGBoost quanto o ranger oferecem ferramentas integradas para medir a importância global, enquanto os valores SHAP permitem explicações locais.

# 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() — Três métricas

xgb.importance(model) retorna um quadro de dados com três métricas de importância para cada característica:

  • Ganho: melhoria média na perda resultante das divisões por essa característica (o mais informativo).
  • Cobertura: número médio de observações afetadas pelas divisões por essa característica.
  • Frequência: proporção das divisões que utilizaram essa característica.
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) cria um gráfico de barras horizontais das importâncias das características. Por padrão, utiliza a métrica Ganho. O argumento top_n limita a saída às características mais importantes, facilitando a visualização.

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)'
)

Importância das variáveis no ranger

O ranger é compatível com duas medidas de importância: 'impurity' (rápida, calculada durante o treinamento) e 'permutation' (mais lenta, mas mede o impacto real de cada característica nas previsões). Em geral, a importância por permutação é preferida para obter classificações confiáveis.

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))

Comparando a importância no ranger e no XGBoost

Modelos diferentes atribuem pontuações de importância diferentes porque medem aspectos diferentes. A importância baseada em impureza (padrão do ranger) pode favorecer características com muitos valores distintos. A importância por permutação é mais robusta. O Ganho do XGBoost geralmente é a mais informativa de suas três métricas.

# 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')

O que são os valores SHAP?

Os valores SHAP (SHapley Additive exPlanations) decompõem cada previsão em contribuições de cada característica, com base na teoria dos jogos. Para uma previsão referente a uma observação, os valores SHAP somam a diferença entre a saída do modelo e a linha de base (a previsão média). Isso permite obter explicações globais e locais.

O XGBoost oferece suporte nativo a SHAP para árvores por meio de 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)

Noções básicas do pacote shapviz

O pacote shapviz fornece uma camada avançada de visualização sobre os valores SHAP. Passe a matriz SHAP bruta e a matriz de características para shapviz() e, em seguida, utilize funções de plotagem como sv_importance(), sv_waterfall() e 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')

Gráfico de cascata — explicação local

Um gráfico de cascata explica uma única previsão: ele mostra como cada característica elevou ou reduziu a previsão em relação à linha de base. Valores SHAP positivos (barras vermelhas) aumentam a previsão; valores negativos (barras azuis) a reduzem. A linha de base é a saída média do modelo.

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'
  )

Gráficos de dependência parcial

Um gráfico de dependência parcial (PDP) mostra o efeito marginal de uma característica na saída do modelo, calculado como média sobre todas as outras características. Ele revela se a relação é linear, monotônica ou apresenta padrões não lineares. Utilize o pacote pdp ou 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')

Gráfico de dependência SHAP

Um gráfico de dependência SHAP mostra o valor SHAP de uma característica em função de seu valor real. Ele é semelhante a um PDP, mas utiliza atribuições SHAP exatas e pode colorir os pontos de acordo com uma segunda característica que interage com a primeira, revelando efeitos de interação.

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
)

Pacote vip — importância unificada

O pacote vip fornece uma interface de importância independente do modelo, que funciona com ranger, XGBoost e qualquer modelo parsnip. vip(model) cria um gráfico de barras; vi(model) retorna os valores de importância como uma 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)

Verificação rápida

Na importância das características do XGBoost, qual métrica geralmente é considerada a mais informativa para compreender a qualidade das características?

Recapitulação da interpretação

Principais conclusões sobre a importância das características e a interpretação de modelos:

  • xgb.importance(model) retorna Ganho, Cobertura e Frequência; o Ganho é o mais informativo.
  • xgb.plot.importance(imp) cria um gráfico de barras da importância no XGBoost.
  • O ranger oferece suporte à importância por 'impurity' (rápida) e por 'permutation' (confiável).
  • Os valores SHAP decompõem cada previsão em contribuições por característica.
  • O shapviz fornece gráficos de cascata, enxame de abelhas e dependência para SHAP.
  • Os gráficos de dependência parcial mostram o efeito marginal médio de cada característica.
  • O pacote vip fornece uma interface unificada de importância, independente do modelo.
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')

Perguntas Frequentes

A aula “Importância de atributos e interpretação de modelos” é grátis?

Sim — o texto completo de “Importância de atributos e interpretação de modelos” é grátis para ler aqui na web. Para praticá-la interativamente (um editor de código integrado e um tutor de IA 24/7) e desbloquear o restante do curso de R Academy, atualize para CoddyKit PRO. O curso de R Academy inclui 4 aulas no total.

O que vou aprender em “Importância de atributos e interpretação de modelos”?

Extraia e visualize a importância das variáveis e os valores SHAP de modelos de conjunto. Você pratica R Academy com código prático que executa diretamente no navegador, e um tutor de IA 24/7 responde suas dúvidas enquanto trabalha na aula.

Preciso ter experiência prévia para começar R Academy?

Nenhuma experiência prévia é necessária. R Academy no CoddyKit é estruturado para alunos iniciantes até avançados, então você pode começar aqui ou desde o início e aprender no seu ritmo. Esta é a aula 4 de 4.

Quanto tempo leva a aula “Importância de atributos e interpretação de modelos”?

A maioria das aulas CoddyKit leva cerca de 5–10 minutos. Cada uma é compacta e interativa, então você faz progresso constante e retoma exatamente de onde parou entre web e app.

Posso escrever e executar código nesta aula de R Academy?

Sim. Cada aula de R Academy inclui um editor de código integrado, então você escreve e executa código real direto no navegador e recebe feedback de IA instantaneamente — nenhuma configuração local necessária.

Todas as aulas deste curso

  1. Árvores de decisão: base dos conjuntos
  2. Florestas aleatórias com ranger
  3. Boosting de gradiente com xgboost
  4. Importância de atributos e interpretação de modelos
← Voltar para R Academy