R Academy · leksjon

Funksjonsviktighet og modellfortolkning

Hent ut og visualiser variabelviktighet og SHAP-verdier fra ensemblemodeller.

Leksjon 4 av 413 trinn

Funksjonsviktighet og modellfortolkning er en gratis leksjon i R Academy på CoddyKit. Dette er leksjon 4 av 4. Du kan lese valgfritt 3 leksjoner fra denne læringsstien gratis i sin helhet – deretter låser CoddyKit PRO opp alle leksjoner, samt praktisk øving med en innebygd kodeeditor og en AI-veileder som er tilgjengelig døgnet rundt. Den er en del av læringsløpet i R Academy, og fremdriften din synkroniseres mellom nettet og CoddyKit-appen. Kurset i R Academy inneholder totalt 4 leksjoner.

Hvorfor modellfortolkning er viktig

Nøyaktige modeller som ingen stoler på, er i praksis ubrukelige. Modellfortolkning besvarer to spørsmål: Hvilke egenskaper er viktigst på et overordnet nivå? (global viktighet) og Hvorfor ga modellen denne spesifikke prediksjonen? (lokal forklaring). Både XGBoost og ranger har innebygde verktøy for global viktighet, mens SHAP-verdier muliggjør lokale forklaringer.

# 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 måltall

xgb.importance(model) returnerer en data frame med tre viktighetsmål for hver egenskap:

  • Gain: gjennomsnittlig forbedring i tapsfunksjonen fra splitt på denne egenskapen (mest informativt).
  • Cover: gjennomsnittlig antall observasjoner som påvirkes av splitt på denne egenskapen.
  • Frequency: andelen splitter der denne egenskapen ble brukt.
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) oppretter et vannrett stolpediagram over egenskapenes viktighet. Som standard bruker den måltallet Gain. Argumentet top_n begrenser resultatet til de viktigste egenskapene for å gjøre det mer oversiktlig.

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

Variabelviktighet i ranger

ranger støtter to viktighetsmål: 'impurity' (raskt, beregnes under treningen) og 'permutation' (langsommere, men måler den faktiske påvirkningen hver egenskap har på prediksjonene). Permutasjonsviktighet foretrekkes vanligvis for pålitelige rangeringer.

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

Sammenligning av viktighet i ranger og XGBoost

Ulike modeller tildeler ulike viktighetsskårer fordi de måler forskjellige ting. Viktighet basert på impurity (standard i ranger) kan være skjev til fordel for egenskaper med mange unike verdier. Permutasjonsviktighet er mer robust. XGBoosts Gain er vanligvis det mest informative av de tre måltallene.

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

Hva er SHAP-verdier?

SHAP (SHapley Additive exPlanations)-verdier dekomponerer hver prediksjon i bidrag fra hver egenskap, basert på spillteori. For en prediksjon av én observasjon summeres SHAP-verdiene til forskjellen mellom modellens resultat og basisverdien (gjennomsnittlig prediksjon). Dette muliggjør både globale og lokale forklaringer.

XGBoost støtter tree SHAP direkte 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)

Grunnleggende om pakken shapviz

Pakken shapviz tilbyr et rikt visualiseringslag oppå SHAP-verdier. Send den rå SHAP-matrisen og egenskapsmatrisen til shapviz(), og bruk deretter visualiseringsfunksjoner som sv_importance(), sv_waterfall() og 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')

Vannfallsdiagram — lokal forklaring

Et vannfallsdiagram forklarer én enkelt prediksjon: Det viser hvordan hver egenskap flyttet prediksjonen over eller under basisverdien. Positive SHAP-verdier (røde stolper) øker prediksjonen, mens negative verdier (blå stolper) reduserer den. Basisverdien er modellens gjennomsnittlige resultat.

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

Partielle avhengighetsdiagrammer

Et partielt avhengighetsdiagram (PDP) viser den marginale effekten én egenskap har på modellens resultat, gjennomsnittlig over alle andre egenskaper. Det viser om sammenhengen er lineær, monoton eller har ikke-lineære mønstre. Bruk pakken pdp eller 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-avhengighetsdiagram

Et SHAP-avhengighetsdiagram viser SHAP-verdien for én egenskap plottet mot den faktiske verdien. Det ligner på et PDP, men bruker eksakte SHAP-attribusjoner og kan fargelegge punkter etter en annen egenskap som samspiller med den første, slik at samspillseffekter blir synlige.

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
)

vip-pakken — samlet viktighet

Pakken vip tilbyr et modellagnostisk grensesnitt for viktighet som fungerer med ranger, XGBoost og alle parsnip-modeller. vip(model) oppretter et stolpediagram, mens vi(model) returnerer viktighetsverdiene som en 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)

Kort kontroll

Hvilket måltall regnes vanligvis som det mest informative for å forstå egenskapskvalitet i XGBoosts egenskapsviktighet?

Oppsummering av fortolkning

Viktigste punkter fra egenskapsviktighet og modellfortolkning:

  • xgb.importance(model) returnerer Gain, Cover og Frequency; Gain er mest informativt.
  • xgb.plot.importance(imp) oppretter et stolpediagram over XGBoost-viktighet.
  • ranger støtter 'impurity' (raskt) og 'permutation' (pålitelig) som viktighetsmål.
  • SHAP-verdier dekomponerer hver prediksjon i bidrag fra de enkelte egenskapene.
  • shapviz tilbyr vannfallsdiagrammer, beeswarm-diagrammer og avhengighetsdiagrammer for SHAP.
  • Partielle avhengighetsdiagrammer viser den gjennomsnittlige marginale effekten av hver egenskap.
  • Pakken vip tilbyr et samlet, modellagnostisk grensesnitt for viktighet.
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 å komme i gang

Lær deg R med en AI-veileder – gratis

Skriv og kjør ekte kode i nettleseren, få umiddelbar hjelp fra en AI-veileder som er tilgjengelig døgnet rundt, og fortsett der du slapp – på nettet eller i appen.

Kurs
43
Leksjoner
159

Ofte stilte spørsmål

Er leksjonen «Funksjonsviktighet og modellfortolkning» gratis?

Ja – du kan lese valgfritt 3 av leksjonene i læringsstien R Academy, inkludert «Funksjonsviktighet og modellfortolkning», gratis i sin helhet her på nettet. Deretter låser CoddyKit PRO opp alle leksjoner, samt interaktiv øving med en innebygd kodeeditor og en AI-veileder som er tilgjengelig døgnet rundt. Kurset i R Academy inneholder totalt 4 leksjoner.

Hva lærer jeg i «Funksjonsviktighet og modellfortolkning»?

Hent ut og visualiser variabelviktighet og SHAP-verdier fra ensemblemodeller. Du øver på R Academy med praktisk kode som du kjører direkte i nettleseren, mens en AI-veileder som er tilgjengelig døgnet rundt, svarer på spørsmålene dine mens du jobber deg gjennom leksjonen.

Trenger jeg erfaring for å begynne med R Academy?

Ingen tidligere erfaring er nødvendig. R Academy på CoddyKit er lagt opp for både nybegynnere og viderekomne, så De kan begynne her eller helt fra start og lære i Deres eget tempo. Dette er leksjon 4 av 4.

Hvor lang tid tar leksjonen «Funksjonsviktighet og modellfortolkning»?

De fleste CoddyKit-leksjoner tar omtrent 5–10 minutter. Hver leksjon er kort og interaktiv, slik at De gjør jevne fremskritt og kan fortsette akkurat der De slapp – både på nettet og i appen.

Kan jeg skrive og kjøre kode i denne R Academy-leksjonen?

Ja. Alle R Academy-leksjoner har en innebygd kodeeditor, slik at De kan skrive og kjøre ekte kode direkte i nettleseren og få umiddelbar tilbakemelding fra AI – uten lokal konfigurering.

Alle leksjonene i dette kurset

  1. Beslutningstrær: grunnlaget for ensembler
  2. Tilfeldige skoger med ranger
  3. Gradient boosting med xgboost
  4. Funksjonsviktighet og modellfortolkning
← Tilbake til R Academy