الكاتب: Norman Niemer ترجمة: د. محمد الحامد مراجعة: هيا الداوود
[ رابط المقال الأصلي هنا ]عالم البيانات هو “شخص أفضل في الإحصاء من أي مهندس برمجيات وأفضل في هندسة البرمجيات من أي إحصائي”. في مقالة سابقة: أهم عشرة أخطاء برمجية قام بها علماء البيانات، ناقشنا كيف يمكن للإحصائيين أن يصبحوا مُبرمجين بشكل أفضل. نناقش هنا كيف يمكن للمبرمجين أن يكونوا إحصائيين بشكل أفضل.
المخرجات التفصيلية والأكواد البرمجية لكل من الأمثلة المستخدمة في المقال متاحة في مستودع Github ومكتوبة على شكل ملاحظات تفاعلية. الأكواد تستخدم مكتبة d6tflow (مكتبة لادارة سير العمل) و البيانات تمت مشاركتها عبر مكتبة d6tpipe (مكتبة لإدارة ملفات البيانات).
١- عدم الفهم الشامل لدالة “الهدف”
يريد علماء البيانات بناء النموذج “الأفضل”. لكن الجمال في عين ناظره. إذا كنت لا تعرف ماهية الهدف ودالة الهدف (objective function) وكيف تتصرف، فمن غير المحتمل أن تكون قادراً على بناء النموذج “الأفضل”. في رأيي المتواضع، الهدف قد لا يكون وظيفة رياضية ولكن ربما تحسين معيار تجاري بحت.
الحل: يقضي معظم الفائزين في منصة Kaggle وقتاً طويلاً في فهم دالة الهدف ومدى ارتباط البيانات والنموذج بهذه الدالة. إذا كنت تقوم بتحسين مقياس يتعلق بطبيعة العمل، فقم بتمثيله في شكل دالة رياضية مناسبة.
مثال: يستخدم مقياس F1 عادة لتقييم نماذج التصنيف. لقد بنينا ذات مرة نموذج للتصنيف يعتمد نجاحه على النسبة المئوية للتنبؤات الصحيحة. كانت نتيجة F1 مضللة لأنها أظهرت أن النموذج كان صحيحاً بحوالي 60٪ من المحاولات، بينما في الحقيقة كان صحيح بنسبة 40٪ فقط.
f1 0.571 accuracy 0.4
٢. عدم وجود فرضية “لماذا يجب على النموذج أن يعمل؟”
ما يحدث بالعادة هو كالتالي: يريد علماء البيانات بناء “نماذج”. سمعوا عن XGBoost والغابات العشوائية (random forests) بأنها تعمل بشكل أفضل ولذلك قرروا استخدامها. قرأوا عن التعلم العميق، وربما سيؤدي ذلك إلى تحسين النتائج بشكل أكبر. هكذا ترمى النماذج على المشكلة دون النظر إلى البيانات ودون تشكيل فرضية لماذا من المرجح أن نموذج ما سيعطي نتائج أفضل. أيضاً سوف يجعل شرح عمل النماذج صعباً للغاية، نظراً لاستخدام النماذج بشكل عشوائي على البيانات.
الحل: إلقاء نظرة على البيانات! فهم خصائصها وبناء فرضية حول النموذج ولماذا من المرجح أن يتعلم تلك الخصائص.
مثال: بدون تشغيل أي نموذج وبرسم بيان تخطيطي لعينة من هذه البيانات، يمكنك بالفعل الحصول على رؤية قوية مفادها أن المتغير س١ مرتبط خطيًا بـ ص وس٢ ليس له علاقة كبيرة بـ ص (ص: هو المتغير المستهدف).
٣. عدم النظر إلى البيانات قبل تفسير النتائج
هناك مشكلة أخرى تتمثل في عدم النظر إلى البيانات وذلك لأن نتائجك يمكن أن تكون متأثرة بشدة بالقيم الشاذة أو ما يشابهها. ينطبق هذا بشكل خاص على النماذج التي تهدف لتقلبل المجاميع المربعة (squared sums). حتى من دون القيم الشاذة، يمكن أن تواجه مشكلات مع توازن البيانات والقيم المقطوعة أو المفقودة وجميع أنواع البيانات الأخرى الغريبة الموجودة في الحياة الواقعية التي لم نراها داخل الفصول الدراسية.
الحل: من المهم جداً أن نكرر: انظر إلى البيانات! افهم كيف تؤثر طبيعة البيانات على نتائج النموذج.
مثال: مع القيم الشاذة، تم تغيير الميل س١ من 0.906 إلى -0.375!
٤. عدم وجود نموذج أساسي ابتدائي
مكتبات تعلم الآلة الحديثة تجعل الأمور سهلة جداً … ما عليك سوى تغيير سطر من التعليمات البرمجية ويمكنك تشغيل نموذج جديد. ونموذج آخر، وآخر. تتناقص مقاييس الخطأ، ومع تغيير معاملات ضبط النموذج تتناقص مقاييس الخطأ بشكل أكبر … مع كل هذه التعديلات للنموذج، يمكنك نسيان طريقة التنبؤ بالبيانات. وبدون استخدام معيار مرجعي، ليس لديك مقارنة جيدة لمدى جودة النماذج الخاصة بك، فقد تكون كلها سيئة من حيث القيمة المطلقة.
الحل: ما هي أغبى طريقة يمكنك التنبؤ من خلالها؟ قم ببناء “نموذج” باستخدام آخر قيمة معروفة، إما باستخدام المتوسط أو بعض القيم الثابتة، على سبيل المثال صفر. قارن أداء النموذج الخاص بك مع أداء التنبؤ بذكاء صفري!
مثال: مع مجموعة بيانات السلسلة الزمنية، يجب أن يكون النموذج-١ أفضل من النموذج-٢ مع متوسط-الخطأ-التربيعي من 0.21 و 0.45 على التوالي. لكن انتظر! بمجرد أخذ القيمة الأخيرة المعروفة، تنخفض قيمة المتوسط إلى 0.003!
ols CV mse 0.215
rf CV mse 0.428
last out-sample mse 0.003
٥. اختبار خارج العينة غير صحيح
هذا الجزئية يمكن أن تؤثر على حياتك المهنية! بدأ النموذج الذي صنعته رائعاً في أثناء البحث والتطوير ولكن أداؤه كان فظيعاً في البيئة التشغيلية. النموذج الذي يُظن أنه سوف يفعل المعجزات يتسبب في نتائج سيئة للغاية، ويحتمل أن يكلف الشركة مبالغ كبيرة. من المهم جداً أن نمنع كل الأخطاء المتبقية التي ترتكز على ذلك.
الحل: تأكد من تشغيل النموذج الخاص بك في ظروف واقعية وافهم متى يعمل النموذج بشكل جيد ومتى لا يكون كذلك.
مثال: نماذج الغابة العشوائية أفضل بكثير من الانحدار الخطي حيث متوسط-الخطأ-التربيعي هو 0.048 مقابل 0.183 لنموذج الانحدار الخطي. ولكن أداء النموذج خارج العينة التدريبية أسوأ بكثير حيث متوسط الخطأ هو 0.259 مقابل الانحدار الخطي 0.187. الغابة العشوائية تعرضت للإفراط في تدريبها (overtrained) ولن تؤدي العمل بشكل جيد في البيئة التشغيلية!
in-sample
rf mse 0.04 – ols mse 0.183
out-sample
rf mse 0.261 – ols mse 0.187
٦. اختبار خارج العينة غير صحيح: تطبيق المعالجة المسبقة على كامل البيانات
ربما تعرف أن نماذج تعلم الآلة القوية يمكن أن تتعرض لفرط التدريب. فرط التدريب يعني أن النموذج يؤدي عمله بشكل جيد على عينة من البيانات ولكن يسوء أداؤه على بيانات من خارج العينة. لذلك عليك الانتباه لأي تسرب لبيانات التدريب في البيانات المستخدمة للاختبار. إذا لم تكن حريصاً، ففي أي وقت تقوم فيه بهندسة الخصائص أو التحقق من صحة النموذج، يمكن أن تتسلل بيانات التدريب إلى مرحلة الاختبار وعليها تقوم بتضخيم أداء النموذج.
الحل: تأكد من حصولك على مجموعة اختبار حقيقية خالية من أي تسرب من المجموعة التي استخدمتها لتدريب النموذج. احذر بشكل خاص من أي علاقات تعتمد على الوقت والتي يمكن أن تحدث عند الاستخدام في البيئة التشغيلية.
مثال: (يحدث كثيراً): تطبيق المعالجة المسبقة على مجموعة البيانات الكاملة قبل تقسيمها إلى بيانات للتدريب وأخرى للاختبار، مما يعني أنه ليس لديك مجموعة اختبار حقيقية. من المفترض أن أي معالجة مسبقة للبيانات يتم تطبيقها بشكل منفصل بعد تقسيم البيانات إلى مجموعات مما يجعل بيانات الاختبار حقيقية. وعليه حصلنا على متوسط-للخطأ-التربيعي 0.187 مقابل 0.181 لمجموعة الاختبار من خارج العينة). رغم عدم وجود اختلاف بسيط في هذه الحالة، نظراً لأن خصائص التوزيع بين بيانات التدريب و الاختبار لا تختلف كثيراً، إلا أننا لا نستطيع فرض ذلك دائماً.
mixed out-sample CV mse 0.187
true out-sample CV mse 0.181
٧. اختبار خارج العينة غير صحيح: بيانات مقطعية وبيانات مكانية
تم تدريسك أن كل ما تحتاج إليه هو التحقق-المتقاطع (cross-validation) للنموذج. توفر لك مكتبة sklearn بعض الراحة اللطيفة لتلك الوظيفة، لذلك تعتقد أنك قد تأكدت من أداء النموذج على جميع التقاطعات البيانية. لكن معظم أساليب التحقق من الصحة تقوم بأخذ عينات عشوائية، لذا قد ينتهي بك الأمر إلى تدريب النموذج ببيانات قد تظهر في مجموعة الاختبار الخاصة بك وتؤدي إلى تضخيم الأداء.
الحل: إنشاء بيانات اختبار بحيث تعكس بدقة البيانات التي يمكنك التنبؤ بها بشكل مباشر في البيئة التشغيلية. خاصةً مع السلاسل الزمنية والبيانات المكانية. من المحتمل أن تضطر إلى إنشاء بيانات مخصصة للتحقق من الصحة أو تستخدمها لإجراء اختبار تمهيدي.
مثال: لنفرض وجود بيانات لوحية لكيانين مختلفين (لنفترض أنهم شركات مختلفة) و التي ترتبط ارتباطًا كبيراً بين تقاطيع بيانية مختفلة. إذا قمت بتقسيم البيانات بشكل عشوائي، فربما تحصل على تنبؤات دقيقة باستخدام بيانات تدريبية لم تتوفر بالفعل أثناء الاختبار، مما يبالغ في تقدير أداء النموذج. ربما تعتقد أنك تجنبت الخطأ رقم ٥ لاستخدامك التحقق-المتقاطع ووجدت أن الغابة العشوائية تؤدي أداءً أفضل بكثير من الانحدار الخطي. ولكن عند إجراء اختبار تمهيدي للنموذج من خارج العينة يمنع أي تسرب للبيانات المستقبلية إلى مجموعة الاختبار، فإن أداء النموذج قد يكون سيء للغاية! (الغابة العشوائية متوسط-الخطأ-التربيعي ارتفع من 0.047 إلى 0.211 ، وهو أعلى من الانحدار الخطي!)
normal CV
ols 0.203 – rf 0.051
true out-sample error
ols 0.166 – rf 0.229
٨. عدم مراعاة البيانات المتاحة وقت اتخاذ القرار
عندما تقوم بتشغيل نموذج في البيئة التشغيلية، يتم تغذية النموذج بالبيانات المتوفرة عند تشغيل النموذج. قد تكون هذه البيانات مختلفة عما افترضت توفره أثناء التدريب. على سبيل المثال، قد يتم نشر البيانات متأخرة، وبحلول وقت تشغيل النموذج، تغيرت المدخلات وأصبح النموذج يتنبأ ببيانات خاطئة أو أن المتغير المستهدف (ص) غير صحيح.
الحل: قم بإجراء اختبار تمهيدي باستخدام بيانات من خارج العينة. إذا كنت قد استخدمت نموذج ما في البيئة التشغيلية، فما هو شكل بيانات التدريب المستخدمة، ماهية نوعية البيانات التي استخدمتها لإنتاج التنبؤات؟ أي تلك البيانات التدريبية التي تستخدمها لإجراء اختبار حقيقي للنموذج خارج العينة. علاوة على ذلك، فكر فيما إذا كنت قد تدخلت للحصول على التنبؤ، فما النتيجة التي تولدها عند اتخاذ القرار؟
٩. الإفراط في التدريب
كلما زاد الوقت الذي تقضيه في العمل على مجموعة بيانات معينة، كلما زاد احتمال أنك تقوم بالإفراط في التدريب. أكثرت من العمل على تغيير الخصائص وعوامل ضبط النموذج، استخدمت التحقق-المتقاطع. كل شيء من المفترض أن يكون جيدًا.
الحل: بعد الانتهاء من إنشاء النموذج، حاول العثور على “نسخة” مختلفة من مجموعات البيانات التي يمكن أن تكون مثالاً لمجموعة البيانات من خارج العينة. إذا كنت مديراً، فعليك حجب البيانات عن عمد حتى لا تعتاد على استخدامها للتدريب.
مثال: تطبيق النماذج التي تم تدريبها على مجموعة البيانات-١إلى مجموعة البيانات-٢ توضح أن خطأ معدل التربيع (Mean Squared Error) زاد عن الضعف. هل هذه النتيجة مقبولة …؟ هذه النقطة متروكة للتقدير لكن نتائجك من رقم ٤ قد تساعدك في اتخاذ القرار.
first datasetrf
mse 0.261 – ols mse 0.187
new dataset
rf mse 0.681 – ols mse 0.495
١٠- مغالطة “الحاجة إلى مزيد من البيانات”
على عكس الاعتقاد السائد، غالبًا ما تكون أفضل طريقة للبدء في تحليل البيانات هي العمل على عينة تمثيلية من البيانات. يتيح لك ذلك التعرف على البيانات وإنشاء خط سير عمل دون انتظار معالجة البيانات وتدريب النموذج. لكن يبدو أن علماء البيانات لا يحبون ذلك – فالحصول على مزيد من البيانات أفضل.
الحل: ابدأ العمل على عينة تمثيلية صغيرة وتعرف ما إذا كان بالامكان الحصول على شيء مفيد منها. أعدها إلى المستخدم النهائي، هل يمكنه استخدامها؟ هل يحل نقطة الضعف الحقيقية؟ إذا لم يكن الأمر كذلك، فالمشكلة من المحتمل ألا تكون لديك بيانات قليلة بل تكون مع الأسلوب المتبع.