R Academy · Les

Feature importance en modelinterpretatie

Haal variable importance en SHAP-waarden uit ensemblemodellen en visualiseer ze.

Les 4 van 413 stappen

Feature importance en modelinterpretatie is een gratis R Academy-les op CoddyKit. Dit is les 4 van 4. Je kunt 3 lessen uit dit leerpad gratis volledig lezen — daarna ontgrendelt CoddyKit PRO alle lessen, plus praktische oefeningen met een ingebouwde code-editor en een AI-tutor die 24/7 beschikbaar is. Deze les maakt deel uit van het leertraject R Academy. Je voortgang wordt gesynchroniseerd op het web en in de CoddyKit-app. De cursus R Academy bevat in totaal 4 lessen.

Waarom modelinterpretatie belangrijk is

Nauwkeurige modellen die niemand vertrouwt, zijn in de praktijk nutteloos. Modelinterpretatie beantwoordt twee vragen: Welke kenmerken zijn wereldwijd het belangrijkst? (globaal belang) en Waarom heeft het model deze specifieke voorspelling gedaan? (lokale verklaring). Zowel XGBoost als ranger bieden ingebouwde hulpmiddelen voor globaal belang, terwijl SHAP-waarden lokale verklaringen mogelijk maken.

# 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() — drie metrieken

xgb.importance(model) retourneert een data frame met drie belangmetrieken voor elk kenmerk:

  • Gain: gemiddelde verbetering van het verlies door splitsingen op dit kenmerk (meest informatief).
  • Cover: gemiddeld aantal observaties dat wordt beïnvloed door splitsingen op dit kenmerk.
  • Frequency: aandeel van de splitsingen waarin dit kenmerk is gebruikt.
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) maakt een horizontaal staafdiagram van het belang van kenmerken. Standaard gebruikt het de metriek Gain. Het argument top_n beperkt de uitvoer tot de belangrijkste kenmerken, zodat de grafiek overzichtelijk blijft.

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

Belang van variabelen in ranger

ranger ondersteunt twee belangmaten: 'impurity' (snel, berekend tijdens het trainen) en 'permutation' (langzamer, maar meet de daadwerkelijke invloed van elk kenmerk op de voorspellingen). Permutatiebelang heeft over het algemeen de voorkeur voor betrouwbare rangschikkingen.

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

Belang in ranger en XGBoost vergelijken

Verschillende modellen kennen verschillende belangscores toe, omdat ze verschillende zaken meten. Belang op basis van impurity (de standaard in ranger) kan bevooroordeeld zijn ten gunste van kenmerken met veel verschillende waarden. Permutatiebelang is robuuster. De Gain van XGBoost is meestal de meest informatieve van de drie metrieken.

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

Wat zijn SHAP-waarden?

SHAP (SHapley Additive exPlanations)-waarden splitsen elke voorspelling op in bijdragen van afzonderlijke kenmerken, gebaseerd op de speltheorie. Voor een voorspelling van één observatie tellen de SHAP-waarden op tot het verschil tussen de modeluitvoer en de basiswaarde (de gemiddelde voorspelling). Dit maakt zowel globale als lokale verklaringen mogelijk.

XGBoost ondersteunt tree SHAP standaard via 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)

Basisprincipes van het pakket shapviz

Het pakket shapviz biedt een uitgebreide visualisatielaag boven op SHAP-waarden. Geef de onbewerkte SHAP-matrix en de matrix met kenmerken door aan shapviz() en gebruik vervolgens plotfuncties zoals sv_importance(), sv_waterfall() en 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')

Watervalgrafiek — lokale verklaring

Een watervalgrafiek verklaart één voorspelling: de grafiek laat zien hoe elk kenmerk de voorspelling boven of onder de basiswaarde heeft geduwd. Positieve SHAP-waarden (rode balken) verhogen de voorspelling; negatieve waarden (blauwe balken) verlagen deze. De basiswaarde is de gemiddelde modeluitvoer.

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

Grafieken van gedeeltelijke afhankelijkheid

Een grafiek van gedeeltelijke afhankelijkheid (PDP) toont het marginale effect van één kenmerk op de modeluitvoer, gemiddeld over alle andere kenmerken. De grafiek laat zien of de relatie lineair, monotoon of niet-lineair is. Gebruik het pakket pdp of 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-afhankelijkheidsgrafiek

Een SHAP-afhankelijkheidsgrafiek toont de SHAP-waarde voor één kenmerk uitgezet tegen de daadwerkelijke waarde ervan. De grafiek lijkt op een PDP, maar gebruikt exacte SHAP-toeschrijvingen en kan punten kleuren op basis van een tweede kenmerk dat ermee in wisselwerking staat, waardoor interactie-effecten zichtbaar worden.

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
)

Pakket vip — uniform belang

Het pakket vip biedt een modelonafhankelijke interface voor belang die werkt met ranger, XGBoost en elk parsnip-model. vip(model) maakt een staafdiagram; vi(model) retourneert de belangwaarden als een 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)

Korte controle

Welke metriek wordt bij het belang van XGBoost-kenmerken over het algemeen als het meest informatief beschouwd om de kwaliteit van kenmerken te begrijpen?

Samenvatting van modelinterpretatie

Belangrijkste punten uit Belang van kenmerken en modelinterpretatie:

  • xgb.importance(model) retourneert Gain, Cover en Frequency; Gain is het meest informatief.
  • xgb.plot.importance(imp) maakt een staafdiagram van het belang in XGBoost.
  • ranger ondersteunt 'impurity' (snel) en 'permutation' (betrouwbaar) als belangmaten.
  • SHAP-waarden splitsen elke voorspelling op in bijdragen per kenmerk.
  • shapviz biedt waterval-, zwerm- en afhankelijkheidsgrafieken voor SHAP.
  • Grafieken van gedeeltelijke afhankelijkheid tonen het gemiddelde marginale effect van elk kenmerk.
  • Het pakket vip biedt een modelonafhankelijke, uniforme interface voor belang.
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')
Gratis beginnen

Leer R met een AI-tutor — gratis

Schrijf echte code en voer die uit in je browser, krijg direct hulp van een AI-tutor die 24/7 beschikbaar is en ga verder waar je gebleven bent op het web of in de app.

Cursussen
43
Lessen
159

Veelgestelde vragen

Is de les “Feature importance en modelinterpretatie” gratis?

Ja — je kunt hier op het web alle 3 lessen van het leerpad R Academy, waaronder “Feature importance en modelinterpretatie”, gratis volledig lezen. Daarna ontgrendelt CoddyKit PRO alle lessen, plus interactieve oefeningen met een ingebouwde code-editor en een AI-tutor die 24/7 beschikbaar is. De cursus R Academy bevat in totaal 4 lessen.

Wat leer ik in “Feature importance en modelinterpretatie”?

Haal variable importance en SHAP-waarden uit ensemblemodellen en visualiseer ze. Je oefent met R Academy door code rechtstreeks in de browser uit te voeren. Een AI-begeleider die 24/7 beschikbaar is beantwoordt je vragen terwijl je de les doorwerkt.

Heb ik ervaring nodig om met R Academy te beginnen?

Ervaring vooraf is niet nodig. R Academy op CoddyKit is opgebouwd voor beginners tot gevorderden, zodat je hier of bij het begin kunt starten en in je eigen tempo kunt leren. Dit is les 4 van 4.

Hoe lang duurt de les “Feature importance en modelinterpretatie”?

De meeste lessen van CoddyKit duren ongeveer 5–10 minuten. Elke les is kort en interactief, zodat je gestaag vooruitgaat en op het web en in de app precies verdergaat waar je was gebleven.

Kan ik code schrijven en uitvoeren in deze les over R Academy?

Ja. Elke les over R Academy bevat een ingebouwde code-editor, zodat je rechtstreeks in je browser echte code kunt schrijven en uitvoeren en direct feedback van AI krijgt — lokale installatie is niet nodig.

Alle lessen in deze cursus

  1. Beslisbomen: basis van ensembles
  2. Random forests met ranger
  3. Gradient boosting met xgboost
  4. Feature importance en modelinterpretatie
← Terug naar R Academy