ความสำคัญของคุณลักษณะและการตีความโมเดล
ดึงและแสดงภาพความสำคัญของตัวแปรและค่า SHAP จากโมเดลแบบ ансамбเบิล
ความสำคัญของคุณลักษณะและการตีความโมเดล เป็นบทเรียน 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 ในทันที — ไม่ต้องติดตั้งในเครื่องของคุณ
บทเรียนทั้งหมดในหลักสูตรนี้
- ต้นไม้ตัดสินใจ: พื้นฐานของโมเดล ансамбเบิล
- ป่าสุ่มด้วย ranger
- การเพิ่มพูนแบบเกรเดียนต์ด้วย xgboost
- ความสำคัญของคุณลักษณะและการตีความโมเดล