R Academy · บทเรียน

ความสำคัญของคุณลักษณะและการตีความโมเดล

ดึงและแสดงภาพความสำคัญของตัวแปรและค่า SHAP จากโมเดลแบบ ансамбเบิล

บทเรียน 4 จาก 413 ขั้นตอน

ความสำคัญของคุณลักษณะและการตีความโมเดล เป็นบทเรียน R Academy ฟรีบน CoddyKit นี่คือบทเรียนที่ 4 จากทั้งหมด 4 บทเรียน คุณสามารถอ่านบทเรียนทั้งหมดด้านล่างฟรี — จากนั้นลองปฏิบัติด้วยตัวคุณเองในเบราว์เซอร์พร้อมตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7 บทเรียนนี้เป็นส่วนหนึ่งของเส้นทางการเรียน R Academy และความก้าวหน้าของคุณจะซิงค์ข้ามเว็บและแอป CoddyKit คอร์ส R Academy มีบทเรียนทั้งหมด 4 บทเรียน

เหตุใดการตีความโมเดลจึงสำคัญ

โมเดลที่แม่นยำแต่ไม่มีใครไว้วางใจย่อมไร้ประโยชน์ในทางปฏิบัติ การตีความโมเดลตอบคำถามสองข้อ ได้แก่ คุณลักษณะใดสำคัญที่สุดในภาพรวม? (ความสำคัญระดับภาพรวม) และ เหตุใดโมเดลจึงให้ผลการคาดการณ์เฉพาะนี้? (คำอธิบายเฉพาะกรณี) ทั้ง XGBoost และ ranger มีเครื่องมือในตัวสำหรับวัดความสำคัญระดับภาพรวม ส่วนค่า SHAP ช่วยสร้างคำอธิบายเฉพาะกรณี

# 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() — ตัวชี้วัดสามรายการ

xgb.importance(model) ส่งคืนกรอบข้อมูลที่มีตัวชี้วัดความสำคัญสามรายการสำหรับแต่ละคุณลักษณะ:

  • Gain: การปรับปรุงค่าเสียหายโดยเฉลี่ยจากการแบ่งกลุ่มด้วยคุณลักษณะนี้ (ให้ข้อมูลมากที่สุด)
  • Cover: จำนวนข้อมูลสังเกตโดยเฉลี่ยที่ได้รับผลจากการแบ่งกลุ่มด้วยคุณลักษณะนี้
  • Frequency: สัดส่วนของการแบ่งกลุ่มที่ใช้คุณลักษณะนี้
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) สร้างแผนภูมิแท่งแนวนอนแสดงความสำคัญของคุณลักษณะ โดยค่าเริ่มต้นจะใช้ตัวชี้วัด Gain อาร์กิวเมนต์ top_n จำกัดผลลัพธ์ให้แสดงเฉพาะคุณลักษณะที่สำคัญที่สุดเพื่อให้อ่านได้ชัดเจน

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

ความสำคัญของตัวแปรใน ranger

ranger รองรับการวัดความสำคัญสองแบบ ได้แก่ 'impurity' (รวดเร็ว คำนวณระหว่างการฝึก) และ 'permutation' (ช้ากว่า แต่ใช้วัดผลกระทบจริงของแต่ละคุณลักษณะต่อการคาดการณ์) โดยทั่วไปควรเลือกใช้ความสำคัญแบบสลับค่าเพื่อจัดอันดับที่เชื่อถือได้

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

การเปรียบเทียบความสำคัญของ ranger และ XGBoost

โมเดลแต่ละแบบกำหนดคะแนนความสำคัญแตกต่างกัน เนื่องจากวัดสิ่งที่แตกต่างกัน ความสำคัญที่อิงความไม่บริสุทธิ์ (ค่าเริ่มต้นของ ranger) อาจเอนเอียงไปทางคุณลักษณะที่มีจำนวนค่าที่แตกต่างกันมาก ความสำคัญแบบสลับค่ามีความทนทานมากกว่า ส่วน Gain ของ XGBoost มักเป็นตัวชี้วัดที่ให้ข้อมูลมากที่สุดในบรรดาตัวชี้วัดทั้งสาม

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

ค่า SHAP คืออะไร

ค่า SHAP (SHapley Additive exPlanations) แยกผลการคาดการณ์แต่ละรายการออกเป็นส่วน योगदानจากคุณลักษณะแต่ละรายการ โดยมีพื้นฐานมาจากทฤษฎีเกม สำหรับการคาดการณ์ข้อมูลสังเกตหนึ่งรายการ ค่า SHAP จะรวมกันเท่ากับผลต่างระหว่างผลลัพธ์ของโมเดลกับค่าพื้นฐาน (ค่าเฉลี่ยของการคาดการณ์) จึงสามารถใช้สร้างคำอธิบายทั้งในระดับภาพรวมและระดับเฉพาะกรณีได้

XGBoost รองรับ SHAP สำหรับต้นไม้โดยตรงผ่าน 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)

พื้นฐานแพ็กเกจ shapviz

แพ็กเกจ shapviz มีชั้นการแสดงผลที่หลากหลายสำหรับค่า SHAP โดยส่งเมทริกซ์ SHAP ดิบและเมทริกซ์คุณลักษณะให้กับ shapviz() จากนั้นใช้ฟังก์ชันสร้างแผนภูมิ เช่น sv_importance(), sv_waterfall() และ 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')

แผนภูมิน้ำตก — คำอธิบายเฉพาะกรณี

แผนภูมิน้ำตกใช้ อธิบายการคาดการณ์หนึ่งรายการ โดยแสดงว่าคุณลักษณะแต่ละรายการผลักดันให้ผลการคาดการณ์สูงหรือต่ำกว่าค่าพื้นฐานอย่างไร ค่า SHAP ที่เป็นบวก (แท่งสีแดง) ทำให้ผลการคาดการณ์เพิ่มขึ้น ส่วนค่าที่เป็นลบ (แท่งสีน้ำเงิน) ทำให้ผลการคาดการณ์ลดลง ค่าพื้นฐานคือผลลัพธ์เฉลี่ยของโมเดล

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

แผนภูมิการพึ่งพาบางส่วน

แผนภูมิการพึ่งพาบางส่วน (PDP) แสดงผลกระทบส่วนเพิ่มของคุณลักษณะหนึ่งรายการต่อผลลัพธ์ของโมเดล โดยเฉลี่ยจากคุณลักษณะอื่นทั้งหมด แผนภูมินี้ช่วยให้เห็นว่าความสัมพันธ์เป็นเชิงเส้น เป็นแบบเพิ่มหรือลดทิศทางเดียว หรือมีรูปแบบไม่เชิงเส้น ใช้แพ็กเกจ pdp หรือ 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

แผนภูมิการพึ่งพา SHAP แสดงค่า SHAP ของคุณลักษณะหนึ่งโดยพล็อตเทียบกับค่าจริงของคุณลักษณะนั้น ลักษณะคล้ายกับ PDP แต่ใช้ค่าการจัดสรร SHAP ที่คำนวณอย่างเจาะจง และสามารถระบายสีจุดตามคุณลักษณะอีกหนึ่งรายการที่มีปฏิสัมพันธ์กัน เพื่อเผยให้เห็นผลกระทบจากปฏิสัมพันธ์

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 — ความสำคัญแบบรวมเป็นหนึ่ง

แพ็กเกจ vip มีส่วนติดต่อสำหรับวัดความสำคัญโดยไม่ขึ้นกับโมเดล ซึ่งทำงานร่วมกับ ranger, XGBoost และโมเดล parsnip ใด ๆ ได้ vip(model) สร้างแผนภูมิแท่ง ส่วน vi(model) ส่งคืนค่าความสำคัญในรูปแบบ 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)

ตรวจสอบความเข้าใจอย่างรวดเร็ว

ในการวัดความสำคัญของคุณลักษณะใน XGBoost โดยทั่วไปตัวชี้วัดใดถือว่าให้ข้อมูลมากที่สุดสำหรับทำความเข้าใจคุณภาพของคุณลักษณะ

สรุปการตีความ

ประเด็นสำคัญจากความสำคัญของคุณลักษณะและการตีความโมเดล:

  • xgb.importance(model) ส่งคืน Gain, Cover และ Frequency โดย Gain ให้ข้อมูลมากที่สุด
  • xgb.plot.importance(imp) สร้างแผนภูมิแท่งแสดงความสำคัญของ XGBoost
  • ranger รองรับความสำคัญแบบ 'impurity' (รวดเร็ว) และ 'permutation' (เชื่อถือได้)
  • ค่า SHAP แยกการคาดการณ์แต่ละรายการออกเป็นส่วน योगदानจากคุณลักษณะแต่ละรายการ
  • shapviz มีแผนภูมิน้ำตก แผนภูมิฝูงผึ้ง และแผนภูมิการพึ่งพาสำหรับ SHAP
  • แผนภูมิการพึ่งพาบางส่วนแสดงผลกระทบส่วนเพิ่มโดยเฉลี่ยของคุณลักษณะแต่ละรายการ
  • แพ็กเกจ vip มีส่วนติดต่อวัดความสำคัญแบบรวมเป็นหนึ่งโดยไม่ขึ้นกับโมเดล
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')
เริ่มต้นได้ฟรี

เรียนรู้ R ด้วย AI tutor — ฟรี

เขียนและเรียกใช้โค้ดจริงในเบราว์เซอร์ของคุณ รับความช่วยเหลือทันทีจาก AI tutor 24/7 และเรียนรู้ต่อจากที่คุณหยุดบนเว็บหรือในแอป

คอร์ส
43
บทเรียน
159

คำถามที่พบบ่อย

บทเรียน “ความสำคัญของคุณลักษณะและการตีความโมเดล” ฟรีหรือไม่

ใช่ — ข้อความเต็มของ “ความสำคัญของคุณลักษณะและการตีความโมเดล” ฟรีให้อ่านที่นี่บนเว็บ เพื่อปฏิบัติแบบโต้ตอบ (ตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7) และปลดล็อคส่วนที่เหลือของคอร์ส R Academy ให้อัปเกรดเป็น CoddyKit PRO คอร์ส R Academy มีบทเรียนทั้งหมด 4 บทเรียน

คุณจะเรียนรู้อะไรในบทเรียน “ความสำคัญของคุณลักษณะและการตีความโมเดล”

ดึงและแสดงภาพความสำคัญของตัวแปรและค่า SHAP จากโมเดลแบบ ансамбเบิล คุณปฏิบัติ R Academy ด้วยโค้ดที่ใช้งานได้จริงที่คุณเรียกใช้โดยตรงในเบราว์เซอร์ และติวเตอร์ AI ตลอด 24/7 ตอบคำถามของคุณขณะที่คุณไปผ่านบทเรียน

คุณต้องมีประสบการณ์ก่อนที่จะเริ่มเรียน R Academy หรือไม่

ไม่จำเป็นต้องมีประสบการณ์มาก่อน R Academy บน CoddyKit ออกแบบมาสำหรับผู้เริ่มต้นไปจนถึงผู้เรียนขั้นสูง คุณสามารถเริ่มต้นที่นี่หรือเริ่มจากตัวแรกและเรียนด้วยความเร็วของคุณเอง นี่คือบทเรียนที่ 4 จากทั้งหมด 4 บทเรียน

บทเรียน “ความสำคัญของคุณลักษณะและการตีความโมเดล” ใช้เวลานานแค่ไหน

บทเรียน CoddyKit ส่วนใหญ่ใช้เวลาประมาณ 5–10 นาที แต่ละบทเรียนจึงสั้นและเป็นแบบโต้ตอบ คุณสามารถก้าวหน้าอย่างต่อเนื่องและกลับมาเรียนต่อจากตรงที่เพิ่งหยุดบนเว็บและแอปได้เลย

ฉันเขียนและรันโค้ดในบทเรียน R Academy นี้ได้ไหม

ได้ บทเรียน R Academy ทุกบทมีตัวแก้ไขโค้ดในตัว คุณจึงเขียนและรันโค้ดจริงได้เลยในเบราว์เซอร์ และได้รับข้อเสนอแนะจาก AI ในทันที — ไม่ต้องติดตั้งในเครื่องของคุณ

บทเรียนทั้งหมดในหลักสูตรนี้

  1. ต้นไม้ตัดสินใจ: พื้นฐานของโมเดล ансамбเบิล
  2. ป่าสุ่มด้วย ranger
  3. การเพิ่มพูนแบบเกรเดียนต์ด้วย xgboost
  4. ความสำคัญของคุณลักษณะและการตีความโมเดล
← กลับไปที่ R Academy