0Pricing
R Academy · Lezione

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.
  • shapviz fornisce grafici a cascata, beeswarm e di dipendenza per SHAP.
  • I grafici di dipendenza parziale mostrano l’effetto marginale medio di ogni caratteristica.
  • Il package vip fornisce 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

  1. Alberi decisionali: la base degli ensemble
  2. Random forest con ranger
  3. Gradient boosting con xgboost
  4. Importanza delle feature e interpretazione dei modelli
← Torna a R Academy