Ważność cech i interpretacja modeli
Wyodrębniaj i wizualizuj ważność zmiennych oraz wartości SHAP z modeli ensemble.
Ważność cech i interpretacja modeli to bezpłatna lekcja R Academy na CoddyKit. To lekcja 4 z 4. Możesz przeczytać całą lekcję poniżej za darmo — a potem ćwiczyć ją interaktywnie w przeglądarce z wbudowanym edytorem kodu i tutorem AI dostępnym 24/7. To część ścieżki edukacyjnej R Academy, a Twój postęp synchronizuje się między webem a aplikacją CoddyKit. Kurs R Academy zawiera 4 lekcji w sumie.
Dlaczego interpretacja modelu ma znaczenie
Dokładne modele, którym nikt nie ufa, są w praktyce bezużyteczne. Interpretacja modelu odpowiada na dwa pytania: Które cechy mają największe znaczenie w ujęciu globalnym? (ważność globalna) oraz Dlaczego model wygenerował tę konkretną predykcję? (wyjaśnienie lokalne). Zarówno XGBoost, jak i ranger udostępniają wbudowane narzędzia do określania ważności globalnej, natomiast wartości SHAP umożliwiają tworzenie wyjaśnień lokalnych.
# 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() — trzy metryki
xgb.importance(model) zwraca ramkę danych z trzema metrykami ważności dla każdej cechy:
- Gain: średnia poprawa funkcji straty wynikająca z podziałów wykorzystujących tę cechę (najbardziej miarodajna metryka).
- Cover: średnia liczba obserwacji, na które wpływają podziały wykorzystujące tę cechę.
- Frequency: odsetek podziałów, w których wykorzystano tę cechę.
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) tworzy poziomy wykres słupkowy ważności cech. Domyślnie wykorzystuje metrykę Gain. Argument top_n ogranicza wynik do najważniejszych cech, aby wykres był czytelniejszy.
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)'
)Ważność zmiennych w ranger
ranger obsługuje dwie miary ważności: 'impurity' (szybką, obliczaną podczas trenowania) oraz 'permutation' (wolniejszą, ale mierzącą rzeczywisty wpływ każdej cechy na predykcje). Ważność permutacyjna jest na ogół preferowana, gdy zależy nam na wiarygodnym rankingu.
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))Porównanie ważności w ranger i XGBoost
Różne modele przypisują różne wartości ważności, ponieważ mierzą różne aspekty. Ważność oparta na impurity (domyślna w ranger) może być obciążona na korzyść cech o dużej liczbie unikatowych wartości. Ważność permutacyjna jest bardziej odporna na takie obciążenie. Gain w XGBoost jest zwykle najbardziej miarodajną z jego trzech metryk.
# 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')Czym są wartości SHAP?
Wartości SHAP (SHapley Additive exPlanations) rozkładają każdą predykcję na wkłady poszczególnych cech, wykorzystując podstawy teorii gier. Dla predykcji dotyczącej jednej obserwacji wartości SHAP sumują się do różnicy między wynikiem modelu a wartością bazową (średnią predykcją). Umożliwia to zarówno globalną, jak i lokalną interpretację modelu.
XGBoost natywnie obsługuje tree SHAP za pośrednictwem 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)Podstawy pakietu shapviz
Pakiet shapviz udostępnia rozbudowaną warstwę wizualizacji opartą na wartościach SHAP. Należy przekazać do shapviz() surową macierz SHAP oraz macierz cech, a następnie użyć funkcji rysujących, takich jak sv_importance(), sv_waterfall() i 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')Wykres kaskadowy — wyjaśnienie lokalne
Wykres kaskadowy wyjaśnia pojedynczą predykcję: pokazuje, jak każda cecha przesunęła predykcję powyżej lub poniżej wartości bazowej. Dodatnie wartości SHAP (czerwone słupki) zwiększają predykcję, a ujemne wartości (niebieskie słupki) ją zmniejszają. Wartość bazowa to średni wynik modelu.
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'
)Wykresy zależności cząstkowej
Wykres zależności cząstkowej (PDP) przedstawia uśredniony marginalny wpływ jednej cechy na wynik modelu, przy uwzględnieniu wszystkich pozostałych cech. Pokazuje, czy zależność jest liniowa, monotoniczna lub ma charakter nieliniowy. Należy użyć pakietu pdp albo funkcji 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')Wykres zależności SHAP
Wykres zależności SHAP przedstawia wartość SHAP jednej cechy w zależności od jej rzeczywistej wartości. Jest podobny do wykresu PDP, ale wykorzystuje dokładne atrybucje SHAP i może kolorować punkty na podstawie drugiej cechy wchodzącej w interakcję, ujawniając efekty interakcji.
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
)Pakiet vip — ujednolicona ważność
Pakiet vip udostępnia niezależny od modelu interfejs określania ważności, który działa z ranger, XGBoost oraz dowolnym modelem parsnip. vip(model) tworzy wykres słupkowy, a vi(model) zwraca wartości ważności jako 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)Szybkie sprawdzenie
W przypadku ważności cech w XGBoost która metryka jest na ogół uznawana za najbardziej miarodajną przy ocenie jakości cech?
Podsumowanie interpretacji
Najważniejsze informacje z lekcji „Ważność cech i interpretacja modelu”:
xgb.importance(model)zwraca metryki Gain, Cover i Frequency; Gain jest najbardziej miarodajna.xgb.plot.importance(imp)tworzy wykres słupkowy ważności w XGBoost.- ranger obsługuje ważność
'impurity'(szybką) i'permutation'(wiarygodną). - Wartości SHAP rozkładają każdą predykcję na wkłady poszczególnych cech.
shapvizudostępnia wykresy kaskadowe, beeswarm i zależności dla wartości SHAP.- Wykresy zależności cząstkowej pokazują średni marginalny wpływ każdej cechy.
- Pakiet
vipudostępnia niezależny od modelu, ujednolicony interfejs określania ważności.
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')Często zadawane pytania
Czy lekcja „Ważność cech i interpretacja modeli” jest bezpłatna?
Tak — pełny tekst „Ważność cech i interpretacja modeli” jest dostępny za darmo tutaj w sieci. Aby ćwiczyć ją interaktywnie (wbudowany edytor kodu i tutor AI dostępny 24/7) i odblokować resztę kursu R Academy, przejdź na CoddyKit PRO. Kurs R Academy zawiera 4 lekcji w sumie.
Co nauczysz się w „Ważność cech i interpretacja modeli”?
Wyodrębniaj i wizualizuj ważność zmiennych oraz wartości SHAP z modeli ensemble. Ćwiczysz R Academy z praktycznym kodem, który uruchamiasz bezpośrednio w przeglądarce, a tutor AI dostępny 24/7 odpowiada na Twoje pytania podczas pracy nad lekcją.
Czy potrzebuję doświadczenia, aby zacząć R Academy?
Nie wymagamy żadnego doświadczenia. R Academy w CoddyKit jest strukturyzowany dla początkujących i zaawansowanych użytkowników, więc możesz zacząć tutaj lub od początku i uczyć się w swoim tempie. To lekcja 4 z 4.
Ile czasu zajmuje lekcja „Ważność cech i interpretacja modeli”?
Większość lekcji CoddyKit trwa około 5–10 minut. Każda lekcja to mały, interaktywny krok, dzięki czemu robisz systematyczne postępy i zawsze wracasz dokładnie do tego samego miejsca — na webie i w aplikacji.
Czy mogę pisać i uruchamiać kod w tej lekcji R Academy?
Tak. Każda lekcja R Academy zawiera wbudowany edytor kodu, więc piszesz i uruchamiasz prawdziwy kod bezpośrednio w przeglądarce i od razu otrzymujesz sprzężenie zwrotne od AI — bez konfiguracji na komputerze.
Wszystkie lekcje w tym kursie
- Drzewa decyzyjne: podstawa metod ensemble
- Lasy losowe za pomocą ranger
- Gradient boosting za pomocą xgboost
- Ważność cech i interpretacja modeli