معامل تضخيم التباين (VIF): التعامل مع الاصطناعية في تحليل الانحدار

في تحليل الانحدار، يحدث التعدد الخطي المتعدد عندما تكون المتغيرات المستقلة مرتبطة ببعضها البعض. وهذا يجعل من الصعب تحديد التأثير الفريد لكل متغير تنبؤي على المتغير التابع. ونتيجة لذلك، تكون لديك أخطاء معيارية مضخمة، مما يؤثر بدوره على دلالة المعاملات.

عامل تضخم التباين (VIF) هو أداة رائعة لاكتشاف التعدد الخطي المتعدد، حيث يقدم رؤى تتجاوز الارتباطات الزوجية البسيطة. يوضح هذا الدليل كيفية عمل VIF، وكيفية حسابه وتفسيره، وماذا تفعل إذا وجدت قيم VIF مرتفعة. ستساعدك هذه الخطوات كمتخصصين في البيانات وعلماء البيانات على تحسين استقرار نموذجك.

الآن، بينما يُعتبر VIF أداة تشخيصية مهمة ويستحق التعلم، إلا أنه يمثل جزءًا صغيرًا فقط من مجموعة المهارات الأوسع التي ستطورها في مسارنا المهني عالم تعلم الآلة في بايثون، لذا قم بالتسجيل اليوم.

ما هو عامل تضخم التباين (VIF)؟

تم تطويره بواسطة الإحصائي كاثبرت دانيال، يعتبر عامل التضخم في التباين (VIF) أداة تشخيصية مستخدمة على نطاق واسع في تحليل الانحدار لكشف التعدد الخطي، والذي يُعرف بتأثيره على استقرار وقابلية تفسير معاملات الانحدار. من الناحية التقنية، يعمل VIF من خلال قياس مدى تضخم تباين معامل الانحدار بسبب الارتباطات بين المتغيرات المستقلة.

كل هذا مهم لأن هذه الارتباطات تجعل من الصعب عزل التأثير الفريد لكل متغير مستقل على المتغير المستهدف، مما يؤدي إلى تقديرات نموذج أقل موثوقية. يجب أن أقول أيضًا أنه، من أجل سرد القصة الصحيحة، يتم دائمًا حساب VIF لكل متغير مستقل في النموذج.

صيغة عامل التضخم في التباين

يتم حساب معامل التباين التضاعفي VIF للمتنبئ X على النحو التالي:

حيث:

  • R2 هو معامل التحديد الذي يتم الحصول عليه عند تحويل X إلى متنبئ على جميع المتنبئين الآخرين.

عملية الحساب خطوة بخطوة

يتضمن حساب VIF عملية تتكون من ثلاث خطوات. الخطوة الأولى هي تناسب نموذج انحدار خطي منفصل لكل متنبئ مقابل جميع المتنبئين الآخرين. الخطوة الثانية هي الحصول على قيمة R2 لكل نموذج. الخطوة النهائية هي حساب VIF باستخدام الصيغة أعلاه.

تفسير قيم VIF

ها هي كيفية تفسير قيم VIF لفهم مستوى التعددية:

  • VIF = 1: هذا يشير إلى عدم وجود تعددية. المتنبئ ليس مرتبطًا بالمتنبئين الآخرين، لذا لا يتضخم الخطأ القياسي أو يؤثر على استقرار النموذج.
  • VIF بين 1 و 5: هذا يشير إلى وجود تعددية معتدلة. هناك بعض الترابط مع المتنبئين الآخرين، ولكن عادة ما لا يكون خطيرًا. ومع ذلك، من الجدير بالاهتمام متابعة هؤلاء المتنبئين لمعرفة ما إذا كانت التعددية تصبح مشكلة، خاصة إذا كانت قيم VIF الأخرى عالية.
  • VIF > 5: يوجد تعددية متعددة. يمكن أن يكون خطأ التنبؤ مضخمًا بشكل ملحوظ ، مما يجعل معامله أقل موثوقية. يجب التفكير في اتخاذ خطوات لتقليل التعددية المتعددة ، مثل إزالة أو دمج العوامل التنبؤية المترابطة.
  • VIF > 10: هذا يدل على وجود تعددية متعددة خطيرة. يتم تضخيم خطأ التنبؤ بشكل كبير ، ومن المحتمل أن تكون تقديرات معامله غير مستقرة. عادة ما يكون هناك حاجة لاتخاذ إجراءات تصحيحية ، مثل إزالة العامل التنبؤي أو استخدام تقنيات التنظيم.

على سبيل المثال ، إذا كانت تعددية عامل التنبؤ هي 10 ، فإن ذلك يشير إلى أن تباين معامل ذلك العامل التنبؤي هو 10 مرات ما سيكون عليه إذا لم يكن هناك تعددية متعددة.

كيفية شرح معامل التضخيم التكراري في التحليل الانحداري

تسبب التعددية في زيادة أخطاء القياس القياسية، مما يجعل من الصعب تقييم أهمية التنبؤ بالمتغيرات الفردية. يحدث هذا لأن المتغيرات المتعددة تحمل معلومات مماثلة، مما يجعل من الصعب فصل تأثيراتها الفردية الخاصة على المتغير الناتج.

على الرغم من أن التعددية لا تضر بالضرورة بقدرة النموذج على التنبؤ، إلا أنها تقلل من موثوقية ووضوح الضرايب. وهذا أمر مشكل خاصة عندما نريد فهم التأثير الفردي لكل تنبؤ.

يعمل عامل تضخم التباين (VIF) كمقياس تشخيصي دقيق لتحديد التعددية. على عكس الملاحظات العامة حول الارتباط، يعزل VIF التأثير المشترك لجميع المتنبؤات على كل متغير، مما يسلط الضوء على التفاعلات التي قد لا تكون واضحة من الارتباطات الزوجية.

عامل تضخم التباين في Python وR

لجعل هذا قابلاً للتنفيذ، دعونا نقوم بمثال في كل من Python و R باستخدام مجموعة بيانات فريدة. سنقوم بحساب قيمة VIF باستخدام حزم آلية وأيضًا باستخدام صيغة VIF لبناء الفهم. من أجل ممارسة جيدة، قمت بعمد إلى إنشاء مجموعة بيانات حيث سنكتشف قيمة VIF عالية لإحدى متغيراتنا حتى لو لم تكن هناك ترابطات زوجية عالية جدًا بين أي من المتغيرات – لذا أعتقد أنه مثال مقنع. لنبدأ بنظرة عامة على مجموعة البيانات التي سنستخدمها.

نظرة عامة على مجموعة البيانات:

تمثل هذه المجموعة الخيالية نتائج استطلاع من دراسة أجريت عبر 1,000 متجر لشركة تجزئة عملاقة. تم سؤال العملاء في كل متجر عن تقييم جوانب مختلفة من تجربتهم في التسوق على مقياس من -5 إلى +5، حيث يشير -5 إلى تجربة سلبية جدًا، و+5 يشير إلى تجربة إيجابية جدًا. وقد تم احتساب متوسط تقييمات العملاء في كل متجر عبر أربعة معايير رئيسية:

  • Ambience: تصور العميل لبيئة المتجر، مثل النظافة، التصميم، الإضاءة، والجو العام.

  • Customer_service: تقييم الخدمة المقدمة من قبل موظفي المتجر، بما في ذلك الاهتمام والودودية والاستجابة لاحتياجات العملاء.

  • العروض: التقييم للعروض الترويجية والخصومات والصفقات المتاحة للعملاء في المتجر.

  • نطاق_المنتجات: تقييم تنوع وجودة المنتجات المتاحة في المتجر.

المتغير المستهدف، الأداء، يقيس الأداء العام لكل متجر. ومع ذلك، فإنه ليس ذو صلة من وجهة نظر VIF. يمكنك تنزيل مجموعة البيانات هنا.

معامل تضخم التباين في بايثون

سنبدأ بحساب قيم VIF باستخدام حزم Python. الخطوة الأولى هي تحميل مجموعة البيانات والمكتبات المطلوبة.

from sklearn.linear_model import LinearRegression from sklearn.metrics import r2_score import pandas as pd import numpy as np import matplotlib.pyplot as plt import seaborn as sns from statsmodels.stats.outliers_influence import variance_inflation_factor from statsmodels.tools.tools import add_constant datacamp_retail_data = pd.read_csv(' vif_data.csv') datacamp_retail_data.head()

سيقوم الكود أعلاه بتحميل البيانات وعرض أولى خمس سجلات.

كخطوة تالية، يمكننا تشغيل مصفوفة الارتباط للتحقق من الارتباط بين الأزواج.

الشيفرة أدناه تحدد أربعة أعمدة وتخزنها في إطار بيانات جديد يسمى correl_data. ثم يقوم بحساب مصفوفة التباين الزوجية باستخدام وظيفة .corr(). يتم تخزين النتيجة في الكائن، corr_matrix، والذي هو جدول يُظهر معاملات الارتباط بين كل زوج من الأعمدة المحددة.

ثم يتم تصوير المصفوفة باستخدام وظيفة heatmap() في Seaborn، حيث يُعرض كل معامل ارتباط كخلية ملونة، حيث يمثل اللون الأزرق الارتباطات السالبة واللون الأحمر الارتباطات الإيجابية، بناءً على خريطة الألوان coolwarm.

correl_data = datacamp_retail_data[['Ambience', 'Customer_service', 'Offers', 'Product_range']] # حساب مصفوفة التباين الزوجية corr_matrix = correl_data.corr() # تصوير مصفوفة التباين plt.figure(figsize=(10, 8)) sns.heatmap(corr_matrix, annot=True, cmap='coolwarm', vmin=-1, vmax=1) plt.title('Pairwise Correlation Matrix') plt.show()

الناتج:

  الترابط بين المتغيرات. صورة بواسطة المؤلف

الرسم البياني يوفر ملخصًا بصريًا للعلاقات بين المتغيرات في 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 تشير إلى وجود تعدد الانحدار العالي، وكنت لا ترغب بالضرورة في إزالة المتغير، فهناك بعض الاستراتيجيات الأخرى المتقدمة للتخفيف من تعدد الانحدار:

  1. اختيار الميزات: قم بإزالة أحد المتنبئات المترابطة بشكل كبير، وأعد حساب VIF لمعرفة ما إذا كان ذلك يساعد في تبسيط النموذج وتحسين الاستقرار.
  2. تحليل المكونات الرئيسية (PCA): استخدم PCA لدمج المتنبئات الخاصة بك في مجموعة أصغر من المكونات غير المرتبطة. يقوم ذلك بتحويل المتغيرات الأصلية إلى متغيرات جديدة ومستقلة وغير مرتبطة تلتقط معظم تباين البيانات، مما يساعد في التعامل مع التعددية التبادلية دون فقدان المعلومات القيمة.
  3. تقنيات التنظيم: قم بتطبيق تقنية الانحدار الريجي أو الانحدار اللأسو، والتي تضيف مصطلحات عقوبة إلى النموذج. تساعد هذه التقنيات في تقليل التعددية بشكلٍ يقلل من تأثير المتغيرات المترابطة، مما يجعل النموذج أكثر استقرارًا وموثوقية.

الاستنتاج

معرفة كيفية استخدام معامل الانكسار الاصطناعي أمر أساسي لتحديد وإصلاح التعددية المتعلقة، مما يحسن دقة ووضوح نماذج الانحدار. يساعد فحص قيم VIF بانتظام وتطبيق تدابير تصحيحية عند الحاجة المحترفين في مجال البيانات والمحللين على بناء نماذج يمكنهم الثقة فيها. تضمن هذا النهج أن تكون تأثيرات كل متنبئ واضحة، مما يجعل من السهل استخلاص استنتاجات موثوقة من النموذج واتخاذ قرارات أفضل بناءً على النتائج. خذ مسارنا المهني عالم تعلم الآلة في لغة Python لفهم كيفية بناء النماذج واستخدامها حقًا. بالإضافة إلى ذلك، فإن إتمام البرنامج يبدو رائعًا في السيرة الذاتية.

أيضًا، للمزيد من التعلم، يُنصح باستكشاف الموارد التالية من مدونة DataCamp وأقسام البرامج التعليمية:

Source:
https://www.datacamp.com/tutorial/variance-inflation-factor