الرسم البياني يوفر ملخصًا بصريًا للعلاقات بين المتغيرات في correl_data
. قيم الترابط تتراوح بين -1 و 1، حيث تشير القيم الأقرب إلى 1 إلى وجود ترابط إيجابي قوي، والقيم الأقرب إلى -1 تشير إلى وجود ترابط سلبي قوي، والقيم حول الصفر تقترح عدم وجود ترابط. من الواضح أنه لا يوجد ترابط قوي بين الأزواج من المتغيرات، حيث لا تتجاوز قيم الترابط حتى 0.6.
الخطوة التالية هي حساب قيم VIF لمتغيرات التنبؤ. يقوم الكود أدناه بحساب القيم لكل متغير تنبؤ في مجموعة البيانات للتحقق من وجود التعددية.
أولاً، يقوم بتعريف X
عن طريق إزالة عمود الهدف Performance
وإضافة منقطة. ثم، ينشئ إطار بيانات، datacamp_vif_data
، لتخزين أسماء المتنبئين وقيم VIF الخاصة بهم. باستخدام حلقة، يقوم بحساب VIF لكل متنبئ باستخدام الدالة variance_inflation_factor()
، حيث تشير قيم VIF الأعلى إلى وجود التعددية.
# تعريف متغيرات التنبؤ X = datacamp_retail_data.drop(columns=['Performance']) # إضافة ثابت إلى النموذج (المنقطة) X = add_constant(X) # حساب VIF لكل ميزة datacamp_vif_data = pd.DataFrame() datacamp_vif_data['Feature'] = X.columns datacamp_vif_data['VIF'] = [variance_inflation_factor(X.values, i) for i in range(X.shape[1])] print(datacamp_vif_data)
الناتج:
الناتج يظهر قيم VIF. الصورة بواسطة الكاتب
تُظهر هذه النتائج قيمة VIF لكل متغير تنبؤي، مشيرة إلى مستويات التعددية في مجموعة البيانات. الصف const
يمثل مصطلح التقاطع، مع قيمة VIF قريبة من 1، مما يعني عدم وجود تعددية. بين المتغيرات التنبؤية، Product_range
لديها أعلى قيمة VIF (5.94)، مما يقترح أنها تحتاج إلى تدابير تصحيحية. جميع المتغيرات التنبؤية الأخرى لديها قيم VIF أقل من 3، مما يشير إلى وجود تعددية منخفضة.
النهج اليدوي لحساب VIF
النهج الآخر هو حساب القيم بشكل منفصل عن طريق تناول كل متغير مستقل وتنبؤي ضد المتغيرات التنبؤية الأخرى.
العمل يتم بتحديد كل ميزة في retail_data
كمتغير تابع (y) والميزات الباقية كمتغيرات مستقلة (X). يتم تناسب نموذج الانحدار الخطي بعد ذلك للتنبؤ بـ y باستخدام X، ويتم استخدام قيمة R-squared للنموذج لحساب VIF باستخدام الصيغة التي ناقشناها في القسم الأول.
بعد ذلك، يتم تخزين كل ميزة وقيم VIF الخاصة بها في قاموس (vif_manual
)، الذي يتم تحويله بعد ذلك إلى DataFrame (vif_manual_df
) للعرض.
datacamp_retail_data = retail_data.drop(columns=['Performance']) # حساب VIF يدويًا vif_manual = {} for feature in retail_data.columns: # تعريف المتغير المستهدف (الميزة الحالية) والمتنبئين (جميع الميزات الأخرى) y = datacamp_retail_data[feature] X = datacamp_retail_data.drop(columns=[feature]) # تناسب نموذج الانحدار الخطي model = LinearRegression().fit(X, y) # حساب R-squared r_squared = model.score(X, y) # حساب VIF vif = 1 / (1 - r_squared) vif_manual[feature] = vif # تحويل القاموس إلى DataFrame للعرض الأفضل vif_manual_df = pd.DataFrame(list(vif_manual.items()), columns=['Feature', 'VIF']) print(vif_manual_df)
الناتج:
عرض الناتج الذي يظهر قيم VIF. الصورة من قبل الكاتب
يعرض الإخراج كل ميزة مع قيمة VIF الخاصة بها، مما يساعد على تحديد قضايا التعددية المحتملة. يمكنك رؤية أن النتيجة هي بوضوح نفس النتيجة التي حصلنا عليها أعلاه؛ وسيكون تفسيرها نفسه، وهو أن المتغير Product_range
يظهر تعددية.
معامل تضخم التباين في R
في هذا القسم، سنكرر تمرين معامل تضخم التباين أعلاه في قسم Python، خصوصًا للمطورين الذين يعملون مع لغة برمجة R. نبدأ بتحميل مجموعة البيانات والمكتبات اللازمة.
library(tidyverse) library(car) library(corrplot) data <- read.csv('vif_data.csv') str(data)
الإخراج:
الخطوة التالية هي حساب مصفوفة الارتباط بزوجين، وتصويرها بواسطة الخريطة الحرارية. تساعدنا الدوال cor()
و corrplot
في إنجاز هذه المهمة.
# إزالة عمود الهدف predictors_data <- data[, !(names(data) %in% "Performance")] # حساب مصفوفة الترابط correlation_matrix <- cor(predictors_data) # رسم خريطة حرارة الترابط # تحميل المكتبات اللازمة library(ggplot2) library(reshape2) melted_corr_matrix <- melt(correlation_matrix) # رسم خريطة الحرارة باستخدام ggplot2 ggplot(data = melted_corr_matrix, aes(x = Var1, y = Var2, fill = value)) + geom_tile(color = "white") + scale_fill_gradient2(low = "blue", high = "red", mid = "white", midpoint = 0, limit = c(-1, 1), space = "Lab", name="Correlation") + theme_minimal() + # تصميم أدنى لمظهر نظيف theme(axis.text.x = element_text(angle = 45, vjust = 1, hjust = 1)) + labs(x = "", y = "") + # إزالة تسميات المحاور geom_text(aes(Var1, Var2, label = round(value, 2)), color = "black", size = 4) + theme(axis.text=element_text(size=15))
الناتج:
الترابط بين المتغيرات. صورة بواسطة المؤلف
من الواضح من خريطة الحرارة للترابط أنه لا توجد ترابط قوي بين الأزواج من المتغيرات، حيث لا تكون قيم الترابط حتى أكبر من 0.6. الآن، سنحسب قيم VIF ونرى ما إذا كان هناك شيء مقلق. السطر التالي من الكود يقوم بهذه المهمة.
# تناسب نموذج الانحدار model <- lm(Performance ~ Ambience + Customer_service + Offers + Product_range, data = data) # حساب VIF vif(model)
الناتج:
من الناتج، يمكننا رؤية أن بين المتغيرات التنبؤية، فقط المتغير Product_range
لديه قيمة VIF أكبر من 5، مما يوحي بوجود تعددية متعددة تحتاج إلى تدابير تصحيحية.
النهج اليدوي لحساب VIF
النهج الآخر لحساب قيم VIF سيكون حساب قيم VIF لكل متغير بشكل منفصل عن طريق تناول كل متغير مستقل ضد باقي المتغيرات التنبؤية.
يتم ذلك في الكود أدناه، الذي يستخدم الدالة sapply()
عبر كل متنبئ، حيث يتم تعيين كل متنبئ كمتغير تابع في نموذج انحدار ليني مع باقي المتنبئين كمتغيرات مستقلة.
ثم يُستخدم قيمة R-squared من كل نموذج لحساب قيم VIF باستخدام الصيغة الخاصة به. وأخيرًا، يتم عرض النتيجة، vif_values
، لعرض قيم VIF لكل متنبئ، مما يساعد في تحديد مشاكل التعددية في التفاعل.
# حساب قيم VIF لكل متنبئ يدويًا predictors <- c("Ambience", "Customer_service", "Offers", "Product_range") vif_values <- sapply(predictors, function(pred) { formula <- as.formula(paste(pred, "~ .")) model <- lm(formula, data = data[, predictors]) 1 / (1 - summary(model)$r.squared) }) print(vif_values)
الناتج:
نحصل على نفس النتيجة ومن الواضح أن المتغير Product_range
بقيمة VIF عالية تتجاوز 5 يحتاج إلى تدخل.
VIF vs. مصفوفة الارتباط وطرق أخرى
للتذكير، هذه هي الطرق الشهيرة لاكتشاف التعددية في التفاعل:
- قيم VIF العالية: تعتبر القيم العالية لمعامل VIF مؤشرًا واضحًا على وجود التعددية الخطية. عند تجاوز هذه القيم حدود معينة، تشير إلى أن العامل التنبؤي مرتبط بشكل قوي بالعوامل التنبؤية الأخرى، مما قد يؤثر على استقرار وموثوقية وأداء النموذج.
- مصفوفات الترابط: من خلال فحص مصفوفة الترابط، يمكنك رؤية الترابطات زوجية بين العوامل التنبؤية. الترابطات الزوجية العالية تقترح وجود التعددية الخطية بين تلك العوامل المحددة. ومع ذلك، هذه الطريقة تكتشف فقط العلاقات الخطية المباشرة بين متغيرين وقد تفوتها التعددية الخطية التي تشمل تفاعلات أكثر تعقيدًا بين عدة متغيرات.
- تغييرات معاملات: إذا تغيرت معاملات المتنبئين بشكل كبير عند إضافة أو إزالة متغيرات أخرى من النموذج، فهذا يمكن أن يكون علامة على وجود تعدد الانحدار. تشير هذه التقلبات إلى أن بعض المتنبئين قد يشتركون في معلومات مشتركة، مما يجعل من الصعب تحديد تأثير كل متغير بشكل فردي على النتيجة.
من بين جميع هذه الطرق، فإن معامل التضخيم الإحصائي مفيد بشكل خاص لأنه يمكنه اكتشاف تعدد الانحدار حتى عندما تكون الارتباطات الزوجية منخفضة، كما رأينا في مثالنا الخاص. وهذا يجعل معامل التضخيم الإحصائي أداة شاملة أكثر.
أفكار إضافية حول كيفية التعامل مع قيم VIF العالية
إذا كانت قيم VIF تشير إلى وجود تعدد الانحدار العالي، وكنت لا ترغب بالضرورة في إزالة المتغير، فهناك بعض الاستراتيجيات الأخرى المتقدمة للتخفيف من تعدد الانحدار:
- اختيار الميزات: قم بإزالة أحد المتنبئات المترابطة بشكل كبير، وأعد حساب VIF لمعرفة ما إذا كان ذلك يساعد في تبسيط النموذج وتحسين الاستقرار.
- تحليل المكونات الرئيسية (PCA): استخدم PCA لدمج المتنبئات الخاصة بك في مجموعة أصغر من المكونات غير المرتبطة. يقوم ذلك بتحويل المتغيرات الأصلية إلى متغيرات جديدة ومستقلة وغير مرتبطة تلتقط معظم تباين البيانات، مما يساعد في التعامل مع التعددية التبادلية دون فقدان المعلومات القيمة.
- تقنيات التنظيم: قم بتطبيق تقنية الانحدار الريجي أو الانحدار اللأسو، والتي تضيف مصطلحات عقوبة إلى النموذج. تساعد هذه التقنيات في تقليل التعددية بشكلٍ يقلل من تأثير المتغيرات المترابطة، مما يجعل النموذج أكثر استقرارًا وموثوقية.
الاستنتاج
معرفة كيفية استخدام معامل الانكسار الاصطناعي أمر أساسي لتحديد وإصلاح التعددية المتعلقة، مما يحسن دقة ووضوح نماذج الانحدار. يساعد فحص قيم VIF بانتظام وتطبيق تدابير تصحيحية عند الحاجة المحترفين في مجال البيانات والمحللين على بناء نماذج يمكنهم الثقة فيها. تضمن هذا النهج أن تكون تأثيرات كل متنبئ واضحة، مما يجعل من السهل استخلاص استنتاجات موثوقة من النموذج واتخاذ قرارات أفضل بناءً على النتائج. خذ مسارنا المهني عالم تعلم الآلة في لغة Python لفهم كيفية بناء النماذج واستخدامها حقًا. بالإضافة إلى ذلك، فإن إتمام البرنامج يبدو رائعًا في السيرة الذاتية.
Source:
https://www.datacamp.com/tutorial/variance-inflation-factor