ميزاتك مهمة؟ هذا لا يعني أنهم جيدون - KDnuggets

ميزاتك مهمة؟ هذا لا يعني أنهم جيدون – KDnuggets

عقدة المصدر: 2893531

ميزاتك مهمة؟ هذا لا يعني أنهم جيدون
[الصورة للمؤلف]

 

يُستخدم مفهوم "أهمية الميزة" على نطاق واسع في التعلم الآلي باعتباره النوع الأساسي لتفسير النموذج. على سبيل المثال، يتم استخدامه في إزالة الميزات العودية (RFE)، لإسقاط الميزة الأقل أهمية في النموذج بشكل متكرر.

ومع ذلك، هناك فكرة خاطئة حول هذا الموضوع.

حقيقة أن الميزة مهمة لا تعني أنها مفيدة للنموذج!

في الواقع، عندما نقول أن الميزة مهمة، فهذا يعني ببساطة أن الميزة تقدم مساهمة كبيرة في التنبؤات التي يقدمها النموذج. ولكن ينبغي لنا أن نأخذ في الاعتبار ذلك قد تكون هذه المساهمة خاطئة.

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

ولكي تصبح الأمور أكثر وضوحا، لا بد لنا من التمييز بين مفهومين:

  • مساهمة التنبؤ: أي جزء من التوقعات يرجع إلى الميزة؛ وهذا يعادل أهمية الميزة.
  • مساهمة الخطأ: أي جزء من أخطاء التنبؤ يرجع إلى وجود الميزة في النموذج.

في هذه المقالة، سنرى كيفية حساب هذه الكميات وكيفية استخدامها للحصول على رؤى قيمة حول النموذج التنبؤي (وتحسينه).

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

لنفترض أننا بنينا نموذجًا للتنبؤ بدخل الأشخاص بناءً على وظائفهم وأعمارهم وجنسياتهم. نستخدم الآن النموذج للتنبؤ بثلاثة أشخاص.

وبالتالي، لدينا الحقيقة الأساسية، والتنبؤ بالنموذج، والخطأ الناتج:

 

ميزاتك مهمة؟ هذا لا يعني أنهم جيدون
الحقيقة الأساسية والتنبؤ بالنموذج والخطأ المطلق (بآلاف الدولارات). [الصورة للمؤلف]

 

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

لذلك، لنفترض أن هذه هي قيم SHAP المتعلقة بنموذجنا للأفراد الثلاثة.

 

ميزاتك مهمة؟ هذا لا يعني أنهم جيدون
قيم SHAP لتنبؤات نموذجنا (بآلاف الدولارات). [الصورة للمؤلف]

 

الخاصية الرئيسية لقيم SHAP هي أنها مضافة. وهذا يعني أنه – من خلال جمع مجموع كل صف – سوف نحصل على تنبؤات نموذجنا لهذا الفرد. على سبيل المثال، إذا أخذنا الصف الثاني: 72k $ +3k $ -22k $ = 53k $، وهو بالضبط توقع النموذج للفرد الثاني.

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

ولذلك، مساهمة التنبؤ للميزة تساوي متوسط ​​قيم SHAP المطلقة لتلك الميزة. إذا كانت لديك قيم SHAP مخزنة في إطار بيانات Pandas، فالأمر بسيط مثل:

prediction_contribution = shap_values.abs().mean()

وفي مثالنا هذه هي النتيجة:

 

ميزاتك مهمة؟ هذا لا يعني أنهم جيدون
مساهمة التنبؤ. [الصورة للمؤلف]

 

كما ترون، من الواضح أن الوظيفة هي الميزة الأكثر أهمية لأنها تمثل، في المتوسط، 71.67 ألف دولار من التنبؤ النهائي. الجنسية والعمر هما على التوالي الميزة الثانية والثالثة الأكثر أهمية.

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

لنفترض أننا نريد الإجابة على السؤال التالي: "ما هي التوقعات التي سيقدمها النموذج إذا لم تكن لديه الميزة وظيفة؟" تسمح لنا قيم SHAP بالإجابة على هذا السؤال. في الواقع، نظرًا لأنها مضافة، فإنه يكفي طرح قيم SHAP المتعلقة بالميزة وظيفة من التنبؤات التي قدمها النموذج.

بالطبع، يمكننا تكرار هذا الإجراء لكل ميزة. في الباندا:

y_pred_wo_feature = shap_values.apply(lambda feature: y_pred - feature)

هذه هي النتيجة:

 

ميزاتك مهمة؟ هذا لا يعني أنهم جيدون
التوقعات التي سنحصل عليها إذا قمنا بإزالة الميزة المعنية. [الصورة للمؤلف]

 

هذا يعني أنه إذا لم تكن لدينا هذه الميزة وظيفة، فإن النموذج يتوقع 20 ألف دولار للفرد الأول، و-19 ألف دولار للفرد الثاني، و-8 آلاف دولار للفرد الثالث. بدلا من ذلك، إذا لم يكن لدينا هذه الميزة السن، سيتوقع النموذج 73 ألف دولار للفرد الأول، و50 ألف دولار للفرد الثاني، وهكذا.

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

abs_error_wo_feature = y_pred_wo_feature.apply(lambda feature: (y_true - feature).abs())

والنتيجة هي ما يلي:

 

ميزاتك مهمة؟ هذا لا يعني أنهم جيدون
الأخطاء المطلقة التي قد نحصل عليها إذا قمنا بإزالة الميزة المعنية. [الصورة للمؤلف]

 

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

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

error_diff = abs_error_wo_feature.apply(lambda feature: abs_error - feature)

الذي:

 

ميزاتك مهمة؟ هذا لا يعني أنهم جيدون
الفرق بين أخطاء النموذج والأخطاء التي سنحصل عليها بدون الميزة. [الصورة للمؤلف]

 

إذا كان هذا الرقم:

  • سلبية، فإن وجود الميزة يؤدي إلى تقليل خطأ التنبؤ، وبالتالي فإن الميزة تعمل بشكل جيد لتلك الملاحظة!
  • إيجابية، فإن وجود الخاصية يؤدي إلى زيادة خطأ التنبؤ، وبالتالي فإن الخاصية سيئة لتلك الملاحظة.

يمكننا حساب "مساهمة الخطأ" كوسيلة لهذه القيم لكل ميزة. في الباندا:

error_contribution = error_diff.mean()

هذه هي النتيجة:

 

ميزاتك مهمة؟ هذا لا يعني أنهم جيدون
مساهمة الخطأ. [الصورة للمؤلف]

 

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

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

دعونا نحاول استخدام هذه المفاهيم على مجموعة بيانات حقيقية.

فيما بعد، سأستخدم مجموعة بيانات مأخوذة من بيكاريت (مكتبة بايثون تحت رخصة MIT). تسمى مجموعة البيانات "الذهب" وتحتوي على سلسلة زمنية من البيانات المالية.

 

ميزاتك مهمة؟ هذا لا يعني أنهم جيدون
عينة من مجموعة البيانات. يتم التعبير عن جميع الميزات بالنسبة المئوية، لذا فإن -4.07 يعني عائدًا قدره -4.07%. [الصورة للمؤلف]

 

وتتكون الميزات من عوائد الأصول المالية على التوالي 22 و 14 و 7 و 1 يوم قبل لحظة المراقبة ("T-22"، "T-14"، "T-7"، "T-1"). فيما يلي قائمة شاملة بجميع الأصول المالية المستخدمة كميزات تنبؤية:

 

ميزاتك مهمة؟ هذا لا يعني أنهم جيدون
قائمة الأصول المتاحة. تتم ملاحظة كل أصل في الوقت -22، -14، -7، و-1. [الصورة للمؤلف]

 

في المجموع، لدينا 120 ميزة.

الهدف هو التنبؤ بسعر الذهب (العائد) قبل 22 يومًا (“Gold_T+22”). دعونا نلقي نظرة على المتغير المستهدف.

 

ميزاتك مهمة؟ هذا لا يعني أنهم جيدون
الرسم البياني للمتغير. [الصورة للمؤلف]

 

بعد أن قمت بتحميل مجموعة البيانات، هذه هي الخطوات التي قمت بها:

  1. قم بتقسيم مجموعة البيانات الكاملة بشكل عشوائي: 33% من الصفوف في مجموعة بيانات التدريب، و33% أخرى في مجموعة بيانات التحقق من الصحة، و33% المتبقية في مجموعة بيانات الاختبار.
  2. تدريب LightGBM Regressor على مجموعة بيانات التدريب.
  3. قم بعمل تنبؤات بشأن مجموعات بيانات التدريب والتحقق من الصحة والاختبار، باستخدام النموذج الذي تم تدريبه في الخطوة السابقة.
  4. حساب قيم SHAP للتدريب والتحقق من الصحة ومجموعات بيانات الاختبار، باستخدام مكتبة Python "shap".
  5. قم بحساب مساهمة التنبؤ ومساهمة الخطأ لكل ميزة في كل مجموعة بيانات (التدريب والتحقق والاختبار)، باستخدام الكود الذي رأيناه في الفقرة السابقة.

دعونا نقارن مساهمة الخطأ ومساهمة التنبؤ في مجموعة بيانات التدريب. سوف نستخدم مخططًا مبعثرًا، بحيث تحدد النقاط 120 سمة للنموذج.

 

ميزاتك مهمة؟ هذا لا يعني أنهم جيدون
مساهمة التنبؤ مقابل مساهمة الخطأ (في مجموعة بيانات التدريب). [الصورة للمؤلف]

 

هناك علاقة سلبية للغاية بين مساهمة التنبؤ ومساهمة الخطأ في مجموعة التدريب.

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

لكن هذا لا يضيف الكثير إلى معرفتنا، أليس كذلك؟

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

 

ميزاتك مهمة؟ هذا لا يعني أنهم جيدون
مساهمة التنبؤ مقابل مساهمة الخطأ (في مجموعة بيانات التحقق من الصحة). [الصورة للمؤلف]

 

من هذه المؤامرة، يمكننا استخراج بعض المعلومات الأكثر إثارة للاهتمام.

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

لاحظ أيضًا أن "Gold_T-22" (عودة الذهب قبل 22 يومًا من فترة المراقبة) يعمل بشكل جيد مقارنة بالأهمية التي يوليها النموذج له. هذا يعني ذاك ربما تكون هذه الميزة غير ملائمة. وهذه المعلومة مثيرة للاهتمام بشكل خاص نظرًا لأن الذهب هو الأصل الذي نحاول التنبؤ به ("Gold_T+22").

من ناحية أخرى، الميزات التي تحتوي على مساهمة خطأ أعلى من 0 تجعل توقعاتنا أسوأ. على سبيل المثال، يغير "السندات الأمريكية ETF_T-1" في المتوسط ​​تنبؤ النموذج بنسبة 0.092% (مساهمة التنبؤ)، ولكنه يقود النموذج إلى جعل التنبؤ في المتوسط ​​0.013% (مساهمة الخطأ) أسوأ مما كان يمكن أن يكون بدون هذه الميزة .

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

دعونا نرى ما هي الميزات التي لها أكبر مساهمة في الخطأ.

 

ميزاتك مهمة؟ هذا لا يعني أنهم جيدون
الميزات مرتبة حسب تقليل مساهمة الأخطاء. [الصورة للمؤلف]

 

والآن الميزات ذات أقل نسبة خطأ:

 

ميزاتك مهمة؟ هذا لا يعني أنهم جيدون
الميزات مرتبة حسب زيادة مساهمة الأخطاء. [الصورة للمؤلف]

 

ومن المثير للاهتمام، أننا قد نلاحظ أن جميع الميزات ذات مساهمة الأخطاء الأعلى تتعلق بـ T-1 (قبل يوم واحد من لحظة المراقبة)، في حين أن جميع الميزات ذات مساهمة الخطأ الأصغر تقريبًا ترتبط بـ T-1 (قبل 22 يومًا من لحظة المراقبة) ).

ويبدو أن هذا يشير إلى ذلك أحدث الميزات عرضة للتركيب الزائد، في حين أن الميزات الأبعد زمنيًا تميل إلى التعميم بشكل أفضل.

لاحظ أنه بدون مساهمة الأخطاء، لم نكن لنعرف هذه الرؤية أبدًا.

تعتمد طرق إزالة الميزات العودية التقليدية (RFE) على إزالة الميزات غير المهمة. وهذا يعادل إزالة الميزات بمساهمة تنبؤية صغيرة أولاً.

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

للتحقق مما إذا كان حدسنا قد تم التحقق منه، دعونا نقارن بين الطريقتين:

  • RFE التقليدي: إزالة الميزات غير المفيدة أولاً (أدنى مساهمة التنبؤ).
  • RFE الخاص بنا: إزالة الميزات الضارة أول (أعلى مساهمة خطأ).

دعونا نرى النتائج على مجموعة التحقق من الصحة:

 

ميزاتك مهمة؟ هذا لا يعني أنهم جيدون
يعني الخطأ المطلق للاستراتيجيتين في مجموعة التحقق من الصحة. [الصورة للمؤلف]

 

تم وضع دائرة حول أفضل تكرار لكل طريقة: إنه النموذج الذي يحتوي على 19 ميزة لـ RFE التقليدي (الخط الأزرق) والنموذج الذي يحتوي على 17 ميزة لـ RFE (الخط البرتقالي).

بشكل عام، يبدو أن طريقتنا تعمل بشكل جيد: إزالة الميزة ذات أعلى مساهمة في الخطأ تؤدي إلى MAE أصغر باستمرار مقارنة بإزالة الميزة ذات أعلى مساهمة في التنبؤ.

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

لذلك دعونا نرى نفس المقارنة في مجموعة الاختبار.

 

ميزاتك مهمة؟ هذا لا يعني أنهم جيدون
يعني الخطأ المطلق للاستراتيجيتين في مجموعة الاختبار. [الصورة للمؤلف]

 

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

وبما أننا اخترنا النماذج التي تؤدي إلى أصغر MAE في مجموعة التحقق، فلنرى نتائجها في مجموعة الاختبار:

  • مساهمة التنبؤ RFE (19 ميزة). MAE في مجموعة الاختبار: 2.04.
  • مساهمة خطأ RFE (17 ميزة). MAE في مجموعة الاختبار: 1.94.

لذا فإن أفضل MAE باستخدام طريقتنا أفضل بنسبة 5% مقارنةً بـ RFE التقليدي!

يلعب مفهوم أهمية الميزة دورًا أساسيًا في التعلم الآلي. ومع ذلك، غالبًا ما يتم الخلط بين مفهوم "الأهمية" و"الخير".

ومن أجل التمييز بين هذين الجانبين قدمنا ​​مفهومين: مساهمة التنبؤ ومساهمة الخطأ. يعتمد كلا المفهومين على قيم SHAP لمجموعة بيانات التحقق من الصحة، وقد رأينا في المقالة كود Python لحسابها.

لقد جربناها أيضًا على مجموعة بيانات مالية حقيقية (تتمثل المهمة فيها في التنبؤ بسعر الذهب) وأثبتنا أن إزالة الميزات المتكررة بناءً على مساهمة الخطأ يؤدي إلى متوسط ​​خطأ مطلق أفضل بنسبة 5% مقارنةً بـ RFE التقليدي استنادًا إلى مساهمة التنبؤ.

يمكن العثور على جميع التعليمات البرمجية المستخدمة في هذه المقالة في هذا الكمبيوتر المحمول.

شكرا لقرائتك!

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

 
أصلي. تم إعادة النشر بإذن.
 

الطابع الزمني:

اكثر من KD nuggets