انتقل إلى المحتوى الرئيسي

الوحدة 9 — اختيار المتغيّرات: المرشّحات والأغلفة والأهمّية

كانت الوحدات السابقة تُضيف المتغيّرات في الأغلب. فبتفكيك التواريخ وترميز الفئات وتجميع التواريخ تجد نفسك أمام مئات الأعمدة، كثيرٌ منها لا يضيف شيئًا. وتقوم هذه الوحدة بالفرز — والمسألة ليست جمالية فحسب.

لماذا نقلّص

أربعة أسباب، اثنان منها يُبخَس تقديرهما غالبًا:

  • الأداء: فالمتغيّرات غير النافعة تضيف ضجيجًا قد يُفرِط النموذج في ملاءمته، خاصّةً عندما تكون الأرصاد قليلة بالنسبة إلى عدد الأعمدة؛
  • السرعة: تدريبٌ وتنبّؤٌ أسرع، وهذا يهمّ تحت قيد الزمن الحقيقي؛
  • قابلية التفسير: فنموذجٌ بخمسة عشر متغيّرًا يُشرَح لصاحب قرار، ونموذجٌ بأربعمئة لا يُشرَح؛
  • كلفة التشغيل، وهي الأكثر إهمالًا: فكلّ متغيّر حسابٌ يجب صيانته في الإنتاج، ومصدر بيانات قد يسقط، وتَبعيّةٌ قد تنحرف. فمتغيّرٌ يعطي عُشر نقطة من الأداء مقابل خطّ معالجة ليليّ إضافيّ صفقةٌ خاسرة.

الشرط المسبق: إقصاء ما هو غير نافع بيّنًا

قبل أيّ أسلوب مُحكَم، تنقيتان مجّانيتان. فالمتغيّرات شبه الثابتة (قيمة واحدة في 99 % من الحالات) لا تستطيع تمييز شيء. والمتغيّرات شبه المكرّرة (ارتباط يتجاوز 0,95 مع غيرها) تعدّ المعلومة نفسها مرّتَين؛ فيُحفَظ أحدها، مع تفضيل الأسهل إنتاجًا وشرحًا.

from sklearn.feature_selection import VarianceThreshold
VarianceThreshold(threshold=0.01) # يُقصي المتغيّرات شبه الثابتة

أساليب المرشّحات: سريعة ومستقلّة عن النموذج

يقيّم المرشّح كلّ متغيّر بمقياس إحصائيّ للصلة بالهدف، من دون تدريب نموذج. وهذا سريع جدًّا، فيتيح تشذيب مجموعة من آلاف الأعمدة.

from sklearn.feature_selection import SelectKBest, f_classif, mutual_info_classif

SelectKBest(f_classif, k=50) # اختبار إحصائي: صلة خطية
SelectKBest(mutual_info_classif, k=50) # المعلومة المتبادلة: أي صلة

والمعلومة المتبادلة أفضل من اختبار F في معظم الحالات، لأنّها تلتقط كذلك العلاقات غير الخطّية التي يتجاهلها اختبار F.

لكن للمرشّحات ضعفٌ مبدئيّ لا بدّ من معرفته: فهي تحكم على كلّ متغيّر منفردًا. فمتغيّران غير نافعَين على انفراد قد يكونان حاسمَين معًا، وسيُقصي المرشّح كليهما. وبالمقابل، سيحفظ عشرة متغيّرات ممتازة لكنّها مكرّرة.

أساليب الأغلفة: أعدل وأغلى

يقيّم الغلاف مجموعات فرعية بتدريب النموذج فعلًا. وأشهرها الإقصاء التكراري: تدريبٌ، ثمّ حذف أقلّ المتغيّرات أهمّية، ثمّ إعادة.

from sklearn.feature_selection import RFECV

RFECV(estimator=النموذج, step=1, cv=5, scoring="roc_auc")

ويحدّد صنف RFECV زيادةً على ذلك العدد الأمثل للمتغيّرات بالتحقّق المتقاطع، فيُجنّب تحديده تعسّفًا. ويأخذ الأسلوب التفاعلات في الحسبان ويلائم النموذج المقصود؛ أمّا كلفته الحسابية فلا تُقارَن بكلفة مرشّح.

الأساليب المدمجة: النموذج يختار بنفسه

بعض النماذج تختار أثناء التدريب. فـLasso يُصفّر المعاملات الأقلّ نفعًا كما رأينا في الدورة 04: فالمتغيّرات الباقية هي المختارة. وتوفّر النماذج القائمة على الأشجار أهمّية للمتغيّرات قابلة للاستخدام مباشرةً.

from sklearn.feature_selection import SelectFromModel
from sklearn.linear_model import LassoCV

SelectFromModel(LassoCV(cv=5)) # المتغيّرات ذات المعامل غير الصفري
SelectFromModel(نموذج_الأشجار, threshold="median") # فوق الأهمّية الوسيطة

وهذه أفضل نسبة كلفة إلى عائد: فالاختيار متماسك مع النموذج النهائي ولا يقتضي إلّا تدريبًا واحدًا.

الأهمّية بالتبديل: أوثق المقاييس

لأهمّيات الأشجار تحيّزان معلومان أُشير إليهما في الدورة 04: فهي تفضّل المتغيّرات كثيرة الفئات، وتتوزّع تعسّفًا بين المتغيّرات المترابطة.

وتتجاوز الأهمّية بالتبديل هذَين التحيّزَين بفكرة مباشرة: خلطُ قيم متغيّر خلطًا عشوائيًّا وقياسُ تدهور الأداء. فإن لم يغيّر خلطُ متغيّرٍ شيئًا، فهو لم يكن مستخدمًا.

from sklearn.inspection import permutation_importance
r = permutation_importance(النموذج, X_val, y_val, n_repeats=10, scoring="roc_auc")

وله خصلتان حاسمتان: فالمقياس يعمل على أيّ نموذج، ويُحسَب على بيانات التحقّق، فيقيس النفع الحقيقيّ في التعميم لا المساهمة في الملاءمة. أمّا الأهمّية السالبة فتشير إلى متغيّر يضرّ — فيُحذَف دون تردّد.

منهج عمليّ

الأنفع في الممارسة يجمع المقاربات: تنقية المتغيّرات شبه الثابتة وشبه المكرّرة، ثمّ التشذيب بـالمعلومة المتبادلة إن كان عدد الأعمدة مرتفعًا، ثمّ التدقيق بـالأهمّية بالتبديل على النموذج المختار. وحدِّد العتبة بالأداء في التحقّق المتقاطع لا بقاعدة تعسّفية: فيُحفَظ أصغر مجموعة يبقى أداؤها داخل ضجيج الأداء الأقصى. فيتجاوز عائد التشغيل حينئذٍ عُشر النقطة المضحّى به بفارق واسع.

الخلاصة

  • نقلّص من أجل الأداء والسرعة وقابلية التفسير وكلفة تشغيل كلّ متغيّر في الإنتاج قبل كلّ شيء.
  • المرشّحات (والمعلومة المتبادلة أفضلها) سريعة لكنّها تحكم على كلّ متغيّر منفردًا فتفوتها التفاعلات.
  • الأغلفة (الإقصاء التكراري وRFECV) تأخذ التفاعلات في الحسبان بكلفة حسابية ثقيلة؛ أمّا المدمجة (Lasso وأهمّيات الأشجار) فتقدّم أفضل توازن.
  • الأهمّية بالتبديل أوثق المقاييس: مستقلّة عن النموذج، ومحسوبة على التحقّق، والقيمة السالبة تشير إلى متغيّر ضارّ.

الوحدة التالية: خطوط معالجة scikit-learn، التي تجعل هذه الدورة كلّها قابلة للتكرار وحصينة على التسرّب.