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
shapvizfornece 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
vipfornece 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
- Árvores de decisão: base dos conjuntos
- Florestas aleatórias com ranger
- Boosting de gradiente com xgboost
- Importância de atributos e interpretação de modelos