R Academy · Pelajaran

Kepentingan Ciri dan Tafsiran Model

Ekstrak dan visualisasikan kepentingan pemboleh ubah serta nilai SHAP daripada model ensemble.

Pelajaran 4 daripada 413 langkah

Kepentingan Ciri dan Tafsiran Model ialah pelajaran R Academy percuma di CoddyKit. Ini ialah pelajaran 4 daripada 4. Sebanyak 3 pelajaran dalam laluan pembelajaran ini boleh dibaca sepenuhnya secara percuma — selepas itu, CoddyKit PRO membuka akses kepada semua pelajaran, serta latihan praktikal dengan penyunting kod terbina dalam dan tutor kecerdasan buatan yang tersedia 24/7. Pelajaran ini merupakan sebahagian daripada laluan pembelajaran R Academy, dan kemajuan anda disegerakkan merentas web serta aplikasi CoddyKit. Kursus R Academy merangkumi sejumlah 4 pelajaran.

Mengapa Interpretasi Model Penting

Model yang tepat tetapi tidak dipercayai oleh sesiapa pun tidak berguna dalam amalan. Interpretasi model menjawab dua soalan: Ciri manakah yang paling penting secara keseluruhan? (kepentingan keseluruhan) dan Mengapakah model menghasilkan ramalan khusus ini? (penjelasan setempat). Kedua-dua XGBoost dan ranger menyediakan alat terbina dalam untuk kepentingan keseluruhan, manakala nilai SHAP membolehkan penjelasan setempat.

# 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() — Tiga Metrik

xgb.importance(model) mengembalikan bingkai data dengan tiga metrik kepentingan bagi setiap ciri:

  • Gain: purata peningkatan dalam kehilangan daripada pecahan berdasarkan ciri ini (paling bermaklumat).
  • Cover: purata bilangan pemerhatian yang terjejas oleh pecahan berdasarkan ciri ini.
  • Frequency: perkadaran pecahan yang menggunakan ciri ini.
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) menghasilkan carta bar mendatar bagi kepentingan ciri. Secara lalai, fungsi ini menggunakan metrik Gain. Argumen top_n mengehadkan keluaran kepada ciri yang paling penting supaya lebih jelas.

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

Kepentingan Pemboleh Ubah ranger

ranger menyokong dua ukuran kepentingan: 'impurity' (pantas, dikira semasa latihan) dan 'permutation' (lebih perlahan, tetapi mengukur kesan sebenar setiap ciri terhadap ramalan). Kepentingan permutasi biasanya lebih disukai untuk menghasilkan kedudukan yang boleh dipercayai.

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

Membandingkan Kepentingan ranger dan XGBoost

Model yang berbeza memberikan skor kepentingan yang berbeza kerana model tersebut mengukur perkara yang berbeza. Kepentingan berdasarkan ketulenan (lalai ranger) boleh berat sebelah terhadap ciri yang mempunyai banyak kategori unik. Kepentingan permutasi lebih teguh. Gain XGBoost biasanya merupakan metrik yang paling bermaklumat antara ketiga-tiga metriknya.

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

Apakah Nilai SHAP?

Nilai SHAP (SHapley Additive exPlanations) menguraikan setiap ramalan kepada sumbangan daripada setiap ciri, berasaskan teori permainan. Bagi ramalan untuk satu pemerhatian, jumlah nilai SHAP bersamaan dengan perbezaan antara keluaran model dan garis dasar (purata ramalan). Ini membolehkan penjelasan keseluruhan dan setempat.

XGBoost menyokong SHAP pepohon secara asli melalui 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)

Asas Pakej shapviz

Pakej shapviz menyediakan lapisan visualisasi yang kaya di atas nilai SHAP. Hantar matriks SHAP mentah dan matriks ciri kepada shapviz(), kemudian gunakan fungsi pelukisan seperti sv_importance(), sv_waterfall(), dan 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')

Carta Air Terjun — Penjelasan Setempat

Carta air terjun menerangkan satu ramalan: carta ini menunjukkan cara setiap ciri menolak ramalan melebihi atau kurang daripada garis dasar. Nilai SHAP positif (bar merah) meningkatkan ramalan; nilai negatif (bar biru) mengurangkannya. Garis dasar ialah purata keluaran model.

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

Carta Kebergantungan Separa

Carta kebergantungan separa (PDP) menunjukkan kesan marginal satu ciri terhadap keluaran model, dipuratakan merentasi semua ciri lain. Carta ini mendedahkan sama ada hubungan tersebut linear, monotonik atau mempunyai corak bukan linear. Gunakan pakej pdp atau 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')

Carta Kebergantungan SHAP

Carta kebergantungan SHAP menunjukkan nilai SHAP bagi satu ciri yang diplotkan terhadap nilai sebenar ciri tersebut. Carta ini serupa dengan PDP tetapi menggunakan atribusi SHAP yang tepat dan boleh mewarnakan titik berdasarkan ciri kedua yang berinteraksi, sekali gus mendedahkan kesan interaksi.

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
)

Pakej vip — Kepentingan Disatukan

Pakej vip menyediakan antaramuka kepentingan yang tidak bergantung pada model, dan berfungsi dengan ranger, XGBoost serta mana-mana model parsnip. vip(model) menghasilkan carta bar; vi(model) mengembalikan nilai kepentingan sebagai 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)

Semakan Pantas

Dalam kepentingan ciri XGBoost, metrik manakah yang biasanya dianggap paling bermaklumat untuk memahami kualiti ciri?

Ulang Kaji Interpretasi

Perkara utama daripada Kepentingan Ciri dan Interpretasi Model:

  • xgb.importance(model) mengembalikan Gain, Cover dan Frequency; Gain ialah yang paling bermaklumat.
  • xgb.plot.importance(imp) menghasilkan carta bar bagi kepentingan XGBoost.
  • ranger menyokong kepentingan 'impurity' (pantas) dan 'permutation' (boleh dipercayai).
  • Nilai SHAP menguraikan setiap ramalan kepada sumbangan bagi setiap ciri.
  • shapviz menyediakan carta air terjun, swarm lebah dan kebergantungan untuk SHAP.
  • Carta kebergantungan separa menunjukkan purata kesan marginal setiap ciri.
  • Pakej vip menyediakan antaramuka kepentingan bersatu yang tidak bergantung pada model.
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')
Percuma untuk bermula

Pelajari R dengan tutor kecerdasan buatan — percuma

Tulis dan jalankan kod sebenar dalam pelayar anda, dapatkan bantuan segera daripada tutor kecerdasan buatan yang tersedia 24/7, dan sambung semula dari tempat anda berhenti di web atau dalam aplikasi.

Kursus
43
Pelajaran
159

Soalan Lazim

Adakah pelajaran “Kepentingan Ciri dan Tafsiran Model” percuma?

Ya — sebanyak 3 pelajaran dalam laluan pembelajaran R Academy, termasuk “Kepentingan Ciri dan Tafsiran Model”, boleh dibaca sepenuhnya secara percuma di web ini. Selepas itu, CoddyKit PRO membuka akses kepada semua pelajaran, serta latihan interaktif dengan penyunting kod terbina dalam dan tutor kecerdasan buatan yang tersedia 24/7. Kursus R Academy merangkumi sejumlah 4 pelajaran.

Apakah yang akan saya pelajari dalam “Kepentingan Ciri dan Tafsiran Model”?

Ekstrak dan visualisasikan kepentingan pemboleh ubah serta nilai SHAP daripada model ensemble. Anda berlatih R Academy menggunakan kod praktikal yang dijalankan terus dalam pelayar, manakala tutor kecerdasan buatan 24/7 menjawab soalan anda semasa anda mengikuti pelajaran.

Adakah saya memerlukan pengalaman untuk memulakan R Academy?

Tiada pengalaman terdahulu diperlukan. Pembelajaran R Academy di CoddyKit disusun untuk pelajar daripada peringkat pemula hingga lanjutan, jadi anda boleh bermula di sini atau dari awal dan belajar mengikut kadar anda sendiri. Ini ialah pelajaran 4 daripada 4.

Berapa lamakah pelajaran “Kepentingan Ciri dan Tafsiran Model” diambil?

Kebanyakan pelajaran CoddyKit mengambil masa kira-kira 5–10 minit. Setiap pelajaran ringkas dan interaktif, jadi anda boleh membuat kemajuan secara berterusan dan menyambung tepat dari tempat anda berhenti di web atau aplikasi.

Bolehkah saya menulis dan menjalankan kod dalam pelajaran R Academy ini?

Ya. Setiap pelajaran R Academy menyertakan penyunting kod terbina dalam, jadi anda boleh menulis dan menjalankan kod sebenar terus dalam pelayar serta menerima maklum balas kecerdasan buatan serta-merta — tanpa memerlukan persediaan setempat.

Semua pelajaran dalam kursus ini

  1. Pepohon Keputusan: Asas Model Ensemble
  2. Hutan Rawak dengan ranger
  3. Peningkatan Gradien dengan xgboost
  4. Kepentingan Ciri dan Tafsiran Model
← Kembali ke R Academy