أهمية السمات وتفسير النماذج
استخرج أهمية المتغيرات وقيم SHAP من النماذج التجميعية وتصورها
أهمية السمات وتفسير النماذج درس مجاني في R Academy على CoddyKit. هذا هو الدرس 4 من أصل 4. يمكنك قراءة الدرس كاملاً أدناه مجاناً — ثم تمرن عليه مباشرة في المتصفح باستخدام محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 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 تقنية tree 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')الأسئلة الشائعة
هل درس «أهمية السمات وتفسير النماذج» مجاني؟
نعم — نص درس «أهمية السمات وتفسير النماذج» كامل متاح مجاناً هنا على الويب. لتمرينه بشكل تفاعلي (محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7) وفتح باقي دورة R Academy، انتقل إلى CoddyKit PRO. تتضمن دورة R Academy 4 دروس في المجموع.
ماذا ستتعلم في «أهمية السمات وتفسير النماذج»؟
استخرج أهمية المتغيرات وقيم SHAP من النماذج التجميعية وتصورها تتمرن على R Academy مع أكواد عملية تشغلها مباشرة في المتصفح، ومدرس ذكاء اصطناعي متاح 24/7 يجيب على أسئلتك أثناء عملك.
هل أحتاج إلى خبرة سابقة لأبدأ R Academy؟
لا تُشترط خبرة سابقة. R Academy على CoddyKit منظم للمبتدئين حتى المتقدمين، لذا يمكنك البدء من هنا أو من البداية والتقدم بسرعتك الخاصة. هذا هو الدرس 4 من أصل 4.
كم من الوقت يستغرق درس «أهمية السمات وتفسير النماذج»؟
معظم دروس CoddyKit تستغرق حوالي 5–10 دقائق. كل منها موجز وتفاعلي، لذا تحرز تقدماً مستمراً وتستأنف من حيث توقفت عبر الويب والتطبيق.
هل يمكنني كتابة وتشغيل أكواد في درس R Academy هذا؟
نعم. كل درس في R Academy يتضمن محرر أكواد مدمج، لذا تكتب وتشغل أكواداً حقيقية مباشرة في متصفحك وتحصل على تعليقات فورية من الذكاء الاصطناعي — بدون إعداد محلي.
جميع الدروس في هذه الدورة
- أشجار القرار: أساس النماذج التجميعية
- الغابات العشوائية باستخدام ranger
- التعزيز التدرجي باستخدام xgboost
- أهمية السمات وتفسير النماذج