Importanza delle feature e interpretazione dei modelli
Estragga e visualizzi l'importanza delle variabili e i valori SHAP dai modelli ensemble
Importanza delle feature e interpretazione dei modelli è una lezione R Academy gratuita su CoddyKit. Questa è la lezione 4 di 4. Puoi leggere la lezione completa qui gratuitamente — poi esercitati direttamente nel browser con un editor di codice integrato e un tutor IA disponibile 24/7. Fa parte del percorso di apprendimento R Academy, e i tuoi progressi si sincronizzano tra il web e l'app CoddyKit. Il corso R Academy include 4 lezioni in totale.
Perché è importante interpretare i modelli
I modelli accurati di cui nessuno si fida sono inutili nella pratica. L’interpretazione dei modelli risponde a due domande: Quali caratteristiche sono globalmente più importanti? (importanza globale) e Perché il modello ha prodotto questa specifica previsione? (spiegazione locale). Sia XGBoost sia ranger forniscono strumenti integrati per valutare l’importanza globale, mentre i valori SHAP consentono spiegazioni locali.
# 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() — Tre metriche
xgb.importance(model) restituisce un data frame con tre metriche di importanza per ogni caratteristica:
- Gain: miglioramento medio della loss dovuto agli split su questa caratteristica (la metrica più informativa).
- Cover: numero medio di osservazioni interessate dagli split su questa caratteristica.
- Frequency: proporzione degli split che hanno utilizzato questa caratteristica.
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) crea un grafico a barre orizzontali dell’importanza delle caratteristiche. Per impostazione predefinita utilizza la metrica Gain. L’argomento top_n limita l’output alle caratteristiche più importanti, per maggiore chiarezza.
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)'
)Importanza delle variabili in ranger
ranger supporta due misure di importanza: 'impurity' (veloce, calcolata durante l’addestramento) e 'permutation' (più lenta, ma misura l’impatto effettivo di ogni caratteristica sulle previsioni). In genere, l’importanza per permutazione è preferibile per ottenere classifiche affidabili.
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))Confronto tra l’importanza in ranger e XGBoost
Modelli diversi assegnano punteggi di importanza diversi perché misurano aspetti diversi. L’importanza basata sull’impurità (impostazione predefinita di ranger) può essere influenzata a favore delle caratteristiche con elevata cardinalità. L’importanza per permutazione è più robusta. Il Gain di XGBoost è generalmente la più informativa delle sue tre metriche.
# 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')Cosa sono i valori SHAP?
I valori SHAP (SHapley Additive exPlanations) scompongono ogni previsione nei contributi delle singole caratteristiche, basandosi sulla teoria dei giochi. Per la previsione relativa a una singola osservazione, la somma dei valori SHAP è uguale alla differenza tra l’output del modello e il valore di base (la previsione media). Ciò consente di ottenere spiegazioni sia globali sia locali.
XGBoost supporta nativamente Tree SHAP tramite 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)Nozioni di base sul package shapviz
Il package shapviz fornisce un ricco livello di visualizzazione basato sui valori SHAP. Passi la matrice SHAP grezza e la matrice delle caratteristiche a shapviz(), quindi utilizzi funzioni di grafico come 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')Grafico a cascata — Spiegazione locale
Un grafico a cascata spiega una singola previsione: mostra come ogni caratteristica abbia spinto la previsione al di sopra o al di sotto del valore di base. I valori SHAP positivi (barre rosse) aumentano la previsione; i valori negativi (barre blu) la diminuiscono. Il valore di base è l’output medio del modello.
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'
)Grafici di dipendenza parziale
Un grafico di dipendenza parziale (PDP) mostra l’effetto marginale di una caratteristica sull’output del modello, calcolato come media rispetto a tutte le altre caratteristiche. Indica se la relazione è lineare, monotona o presenta andamenti non lineari. Utilizzi il package pdp o 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')Grafico di dipendenza SHAP
Un grafico di dipendenza SHAP mostra il valore SHAP di una caratteristica in relazione al suo valore effettivo. È simile a un PDP, ma utilizza attribuzioni SHAP esatte e può colorare i punti in base a una seconda caratteristica interagente, mettendo in evidenza gli effetti di interazione.
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
)Package vip — Importanza unificata
Il package vip fornisce un’interfaccia per l’importanza indipendente dal modello, compatibile con ranger, XGBoost e qualsiasi modello parsnip. vip(model) crea un grafico a barre; vi(model) restituisce i valori di importanza come 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 rapida
Nell’importanza delle caratteristiche di XGBoost, quale metrica è generalmente considerata la più informativa per comprendere la qualità delle caratteristiche?
Riepilogo dell’interpretazione
Punti chiave su Importanza delle caratteristiche e interpretazione dei modelli:
xgb.importance(model)restituisce Gain, Cover e Frequency; Gain è la metrica più informativa.xgb.plot.importance(imp)crea un grafico a barre dell’importanza in XGBoost.- ranger supporta l’importanza
'impurity'(veloce) e'permutation'(affidabile). - I valori SHAP scompongono ogni previsione nei contributi delle singole caratteristiche.
shapvizfornisce grafici a cascata, beeswarm e di dipendenza per SHAP.- I grafici di dipendenza parziale mostrano l’effetto marginale medio di ogni caratteristica.
- Il package
vipfornisce un’interfaccia unificata per l’importanza, indipendente dal modello.
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')Domande Frequenti
La lezione «Importanza delle feature e interpretazione dei modelli» è gratuita?
Sì — il testo completo di «Importanza delle feature e interpretazione dei modelli» è gratuito qui sul web. Per esercitarvi in modo interattivo (un editor di codice integrato e un tutor IA 24/7) e sbloccare il resto del corso R Academy, passa a CoddyKit PRO. Il corso R Academy include 4 lezioni in totale.
Cosa imparerò in «Importanza delle feature e interpretazione dei modelli»?
Estragga e visualizzi l'importanza delle variabili e i valori SHAP dai modelli ensemble Eserciti R Academy con codice pratico che esegui direttamente nel browser, e un tutor IA 24/7 risponde alle tue domande mentre lavori sulla lezione.
Ho bisogno di esperienza per iniziare R Academy?
Non è richiesta alcuna esperienza precedente. R Academy su CoddyKit è strutturato per principianti e studenti avanzati, quindi puoi iniziare da qui o dall'inizio e procedere al tuo ritmo. Questa è la lezione 4 di 4.
Quanto tempo richiede la lezione «Importanza delle feature e interpretazione dei modelli»?
La maggior parte delle lezioni CoddyKit richiede circa 5–10 minuti. Ogni lezione è breve e interattiva, quindi fai progressi costanti e riprendi esattamente da dove hai lasciato su web e app.
Posso scrivere ed eseguire codice in questa lezione R Academy?
Sì. Ogni lezione R Academy include un editor di codice integrato, quindi scrivi ed esegui codice reale direttamente nel tuo browser e ricevi feedback istantaneo dall'IA — nessuna configurazione locale necessaria.
Tutte le lezioni di questo corso
- Alberi decisionali: la base degli ensemble
- Random forest con ranger
- Gradient boosting con xgboost
- Importanza delle feature e interpretazione dei modelli