عندما تجعل ميزاتك "الأفضل" نموذجك أسوأ

عندما تجعل ميزاتك "الأفضل" نموذجك أسوأ

هل مررت بهذا الشعور؟ تقضي أيامًا في هندسة ميزة جميلة. تلتقط الإشارة التي أردتها بالضبط. تدرب النموذج وتقيّمه، فتقفز درجة F1 للفئة الثانية من 0.72 إلى 0.78. تبتسم. ثم ترفع النتيجة إلى لوحة المتصدرين لتكتشف أن مجموعك انخفض. ماذا حدث؟ أنت وقعت للتو في مفاضلة هندسة الميزات.

إنه فخ يقع فيه كل عالم بيانات تقريبًا مرة واحدة على الأقل. أنا شخصيًا وقعت فيه قبل بضعة أشهر، وكلفني أسبوعًا كاملًا من التنقيح. دعني أوضح لك ما يحدث تحت السطح. لماذا قد تنعكس ميزاتك اليدوية الذكية عليك؟ وكيف تبني سير عمل لتقييم الميزات لا يكذب عليك؟

الفخ الكلاسيكي: مكسب مقياس واحد هو خسارة مقياس آخر

دعني أرسم لك السيناريو بالضبط. كنت أبني نموذج تصنيف متعدد الفئات لعميل. النموذج الأساسي كان مقبولًا. ثم أضفت ميزتين يدويتين: **خطورة التأثير** و**نسبة الطاقة**. كلاهما مشتق من بيانات الاستشعار الخام، ومصمم لالتقاط فئة عطل نادرة. كانت الميزتان منطقيتين فيزيائيًا. في التحقق، ارتفعت F1 للفئة الثانية من 0.72 إلى 0.78. جميل، صحيح؟

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

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

لماذا تنعكس الميزات اليدوية عليك؟

التعددية الخطية قاتل صامت

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

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

المفاضلة بين الدقة والاستدعاء

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

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

مقاييس لوحة المتصدرين عادةً ما تكون مجمّعة

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

لهذا أول ما أفعله الآن هو قراءة مقياس المسابقة أو المشروع بتركيز شديد. إذا كان F1 مرجحًا، فتحسين فئة نادرة سيكون أثره ضئيلًا. إذا كان F1 كليًا (Macro-F1)، فكل فئة مهمة بالتساوي، حتى تلك التي لا تهتم بها.

مثال واقعي: حالة بيانات الاستشعار

دعني أعطيك مثالًا ملموسًا. تخيّل مصنعًا به مستشعرات تقيس الحرارة والاهتزاز والضغط. النموذج الأساسي: 0.85 كمتوسط F1 كلي عبر ثلاث فئات أعطال.

أنشأت **نسبة الطاقة** = سعة الاهتزاز / تباين الضغط. كانت منطقية فيزيائيًا. الاهتزاز عالي الطاقة يجب أن يشير إلى أعطال قاسية. في مجموعة التدريب، قفزت F1 للفئة الثانية إلى 0.81. لكن في التحقق المتقاطع، لم يصمد المكسب. لماذا؟ لأن نسبة الطاقة كانت مرتبطة بشدة بالاهتزاز الخام والضغط—التعددية الخطية مرة أخرى. في بيانات الاختبار، ضوضاء المستشعر عند الضغط المنخفض جعلت النسبة تنفجر، مما دفع النموذج إلى تنبؤات خاطئة بالفئة الثانية.

الحل كان غير بديهي: بدلًا من إضافة النسبة الخام، استخدمت ميزة متبقية—الجزء من الاهتزاز الذي *لا* يفسره الضغط. هذه الإشارة المتعامدة أضافت معلومات جديدة فعلًا، وتحسّن أداء لوحة المتصدرين عبر كل الفئات. الدرس: لا تسأل "هل ميزتي منطقية؟" بل اسأل "هل تضيف ميزتي معلومات لا يمتلكها نموذجي الحالي بالفعل؟"

مثال آخر: التنبؤ بتوقف المشتركين في التجارة الإلكترونية

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

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

كيف تقيّم الميزات دون أن ينخدع عقلك؟

1. أنشئ بطاقة نتائج متعددة المقاييس

لا تتابع F1 للفئة الثانية فقط. أنشئ بطاقة نتائج تشمل:

- متوسط F1 الكلي والمرجح
- الدقة والاستدعاء لكل فئة
- الخسارة اللوغاريتمية أو درجة Brier (للمعايرة)
- ملاحظة حول ما إذا كانت مقاييس الفئات تحركت في الاتجاه نفسه

هذا ما أطبعه عادةً بعد كل تجربة:

| المقياس | النموذج الأساسي | الميزة الجديدة | الحكم |
|---|---|---|---|
| F1 الفئة 0 | 0.88 | 0.84 | سيئ |
| F1 الفئة 1 | 0.82 | 0.79 | سيئ |
| F1 الفئة 2 | 0.72 | 0.78 | جيد |
| Macro-F1 | 0.81 | 0.80 | سيئ |

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

2. نفّذ تدقيق ارتباط

قبل إضافة ميزة يدوية، افحص ارتباطها بالميزات الموجودة. استخدم `df.corr()` في pandas وابحث عن القيم المطلقة الأعلى من 0.7. إذا كانت ميزتك الجديدة قريبة جدًا من ميزات موجودة، فكر في:

- حذف واحدة من الميزات المكررة
- استخدام التبقية (residualization): انحدار الميزة الجديدة على الميزات القديمة، ثم أخذ الباقي
- استخدام اختيار الميزات عبر `SelectKBest` أو `RFECV` من scikit-learn

دليل اختيار الميزات الرسمي من scikit-learn مليء بالطرق العملية: https://scikit-learn.org/stable/modules/feature_selection.html

3. استخدم SHAP لفهم الاتجاهات

بعد التدريب، احسب قيم SHAP لترى بالضبط كيف تؤثر ميزتك الجديدة على كل فئة. أحيانًا تكون الميزة مفيدة للفئة الثانية لكنها ضارة بالفئة الأولى. مخطط ملخص SHAP سيُظهر لك هذا فورًا. المكتبة مفتوحة المصدر وتُصان جيدًا على https://github.com/shap/shap.

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

4. جرّب الحذف (Ablation)

الحذف يعني إزالة ميزة وتشغيل التجربة لترى ماذا يحدث. من الغريب أن هذا نادر في هندسة الميزات اليدوية. أنا دائمًا أشغّل ثلاث تجارب:

- النموذج الأساسي بالميزات القديمة
- الأساسي + الميزة الجديدة
- الأساسي + الميزة الجديدة، مع حذف ميزة قديمة واحدة مرتبطة بها

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

مثال ثالث: تصنيف الفرز الطبي

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

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

الدرس الأكبر: الميزات ليست مجانية

كل ميزة تضيفها تزيد تعقيد النموذج، ووقت التدريب، وفرصة التجهيز الزائد. التنظيم يمكن أن يساعد لكنه لا يصلح ميزة مكررة في جوهرها. عليك أن تتعامل مع كل ميزة كرهان: يجب أن تبرر مكانها بإضافة إشارة جديدة ومستقرة عبر عدة مقاييس.

تعلمت أيضًا أنه عندما تنخفض لوحة المتصدرين بعد إضافة ميزة، فالسبب الجذري ليس أبدًا "المقياس خاطئ". بل أنني كنت أطارد حدًا محليًا. النموذج ليس غبيًا—إنه يفعل بالضبط ما طلبته منه. أنا فقط طلبت الشيء الخطأ.

الأسئلة الشائعة

لماذا ارتفعت F1 لفئة واحدة بينما انخفض مجموعي في لوحة المتصدرين؟

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

ما أفضل طريقة للتعامل مع الميزات متعددة الخطية؟

افحص الارتباط أولًا. إذا كانت ميزتان مرتبطتين بشدة، احذف واحدة أو استخدم نسخة متبقية من الميزة الجديدة. التنظيم مثل L1 أو L2 يمكن أن يساعد في استقرار النموذج، لكن إزالة التكرار عادة أكثر فعالية من محاولة إصلاحه بالعقوبات.

هل ما تزال هندسة الميزات اليدوية مفيدة في تعلم الآلة الحديث؟

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

كيف أعرف إن كانت الميزة تساعد فعلًا؟

قارن النموذج الأساسي والنموذج مع الميزة باستخدام عدة مقاييس وتحقق متقاطع. نفّذ تجربة حذف. انظر إلى أهمية الميزات وقيم SHAP. إذا كان التحسن غير متناسق عبر الطيات أو المقاييس، فالأغلب أنك تلائم الضوضاء.

خواطر أخيرة

أعرف نشوة بناء الميزة المثالية. تشعر أنك فككت الشفرة. لكن لوحة المتصدرين هي الحكم النهائي. كلما أسرعت في بناء تقييم متعدد المقاييس داخل سير عملك، قلّ الوقت الذي تهدره على ميزات لا تساعد إلا شريحة واحدة من المشكلة.

في المرة القادمة التي تفكر فيها في إضافة ميزة "خطورة التأثير" الذكية، توقف. اسأل نفسك: "هل تضيف هذه الميزة معلومات جديدة، أم تضخّم إشارة أمتلكها بالفعل؟" مستقبلك—وترتيبك في لوحة المتصدرين—سوف يشكرانك.

Comments (0)

No comments yet. Be the first to comment!

Leave a Comment