هل نموذجك جيد فعلًا؟
تستطيع الآن أن تشرح ما هو النموذج، ومن أين يتعلّم، وكيف يتعلّم. وانتهى الدرس السابق عند تقسيم التدريب والاختبار — أول شيء صادق تفعله بنموذج مدرَّب. وهذا الدرس هو بقية القصة: الأرقام التي تخبرك أن النموذج يعمل، والأرقام التي ستخدعك إن وثقت بها وحدها.
وكل ما يأتي بعد هذا الدرس يفترض أنك قرأته. فحين يقول لك درس لاحق «اضبط C وgamma ببحث شبكي، وسجّل النتيجة بـF1»، أو يسألك: أتريد الدقة أم AUC-ROC أم RMSE؟ — فهذا هو الدرس الذي يجعل تلك الجملة تعني شيئًا.
المقياس ليس حكمًا، بل سؤالٌ اخترتَ أن تسأله. غيّر السؤال فيبدو النموذج نفسه عبقريًا أو بلا قيمة. اختيار المقياس قرار نمذجة، وهو قرارك أنت لا قرار المكتبة البرمجية.
النموذج نفسه، البيانات نفسها → دقة 98.7% | إحكام 0.40 | AUC 0.90ثلاث مجموعات، لا اثنتان
التقسيم الثنائي إلى تدريب واختبار يكفي لـكشف إفراط التعلم. لكنه لا يكفي لـتطوير نموذج، لأن التطوير يعني اتخاذ قرارات: أي خوارزمية، كم طبقة، كم تنظيم، وأي مميزات. وكل قرار من هذه القرارات يُضبط على البيانات التي تقيّم عليها.
لذلك تستخدم المسارات الحقيقية ثلاث مجموعات منفصلة. والتقسيم الشائع هو 60% تدريب، 20% تحقق، 20% اختبار، مع أن النسب الدقيقة أقل أهمية بكثير من الفصل نفسه:
| المجموعة | تُستخدم لـ | كم مرة تنظر إليها |
|---|---|---|
| مجموعة التدريب | ضبط المعاملات — الأوزان التي يعدّلها المحسّن | باستمرار، في كل تكرار |
| مجموعة التحقق | الاختيار بين النماذج والإعدادات — المعاملات الفائقة التي لا يحسّنها لك أحد | كثيرًا، مرة لكل مرشّح |
| مجموعة الاختبار | تقدير أداء النموذج النهائي على بيانات لم تؤثّر فيه أبدًا | مرة واحدة، في النهاية تمامًا |
مجموعة التحقق هي التي يتجاهلها المبتدئون أكثر من غيرها، وهي التي تجعل الأخريين صادقتين. مهمتها أن تتلقّى ضرر بحثك عنك. ستضبط عشرات النماذج على بيانات التدريب وترتّبها على التحقق؛ ونتيجة الفائز على التحقق متفائلة، لأنك اخترته من أجل تلك النتيجة. ومجموعة الاختبار موجودة تحديدًا لتعطيك تقديرًا لم يلوّثه أي اختيار من اختياراتك.
تسريب البيانات: الفشل الهادئ
التسريب هو أي معلومة تصل إلى النموذج ولن تكون متاحة عند نشره. وهو هادئ لأنه لا يُنتج خطأً أبدًا — بل يُنتج نتيجة أجمل، وهي بالضبط ما كنت تتمناه.
وله ثلاث صور شائعة. تسريب المعالجة المسبقة: تحسب المتوسط والانحراف المعياري للتوحيد على كامل البيانات ثم تقسّم، فتحمل صفوف التدريب أثرًا من صفوف الاختبار. تسريب التكرار: يظهر العميل أو الصورة أو القياس نفسه في التدريب والاختبار معًا، فيستطيع النموذج أن يتذكّر بدلًا من أن يعمّم. التسريب الزمني: تخلط بيانات سلسلة زمنية عشوائيًا، فيرى النموذج الأسبوع القادم قبل أن يتنبأ بالأسبوع الماضي.
وهناك صورة رابعة لا تكشفها أي مراجعة كود، وهي الأشيع منها جميعًا. تنظر إلى نتيجة الاختبار، فتقرر أن النموذج يحتاج تنظيمًا أكثر، فتدرّبه من جديد، ثم تنظر مرة أخرى. هذه الحلقة انحدار تدريجي بشري على مجموعة الاختبار. كرّرها ثلاثين مرة فتصبح نتيجة اختبارك نتيجة تحقق — ما زالت رقمًا، لكنها لم تعد تقديرًا لأي شيء.
قسّم أولًا، ثم افعل كل شيء آخر. اضبط المقاييس والمرمّزات ومنتقيات المميزات على جزء التدريب وحده، ثم طبّقها على البقية. اضبط الإعدادات على التحقق. وافتح مجموعة الاختبار مرة واحدة، وأعلن الرقم — وإن لم يعجبك، فالتصرف الصادق أن تعترف بذلك الرقم، لا أن تواصل المحاولة.
لماذا تكذب الدقة
الدقة هي نسبة التنبؤات الصحيحة. وهي أول مقياس يمدّ الجميع يدهم إليه، وعلى المسائل المتوازنة هي مقياس معقول تمامًا.
وإليك حالة ملموسة. تبني كاشف أعطال لشبكة من 10,000 موقع خلوي. في أي يوم، 100 موقع منها به عطل و9,900 سليمة — 1% إيجابي و99% سلبي. وهذا الشكل ليس استثناءً؛ فهو شكل كشف الغش وفحص الأمراض وكشف العيوب وأعطال المعدات جميعًا.
وهذا نموذج لا يحتاج تعلم آلة على الإطلاق:
def predict(site): return "healthy"
إنه محق 9,900 مرة من 10,000. دقة 99.0%. ولا يجد عطلًا واحدًا. سيهزمه رمي عملة في الشيء الوحيد الذي أردته منه.
أما الكاشف المفيد فعلًا على البيانات نفسها فيحقق 98.7% — أي أقل من الكاشف العديم الفائدة. لو كانت الدقة مقياسك الوحيد لأرسلت الثابت إلى الإنتاج وحذفت النموذج. وهذه ليست مصيدة إحصائية دقيقة؛ إنها قرار ستتخذه فعلًا، بناءً على دليل يبدو قاطعًا.
مصفوفة الالتباس
الدقة رقم واحد مُعتصَر من أربعة، والاثنان المهمان يضيعان في العصر. أما مصفوفة الالتباس فتحتفظ بالأربعة. وهي في المسألة الثنائية جدول 2×2 للفئة المتنبَّأ بها مقابل الفئة الحقيقية. والوحدة الرابعة تعود إليها في سياق آلات المتجهات الداعمة، حيث سترى confusion_matrix مطبوعة بجانب تقرير تصنيف — وهذا القسم هو حيث تحصل الخلايا الأربع على أسمائها.
وهذا كاشفنا الحقيقي، عند حدّ القطع الافتراضي:
| الخلية | الاسم | العدد | ما تكلّفه |
|---|---|---|---|
| TP | إيجابية صحيحة — معطل وأُنذر عنه | 60 | لا شيء. هذا هو المطلوب. |
| FN | سلبية كاذبة — معطل وفاته | 40 | موقع معطل لن يزوره أحد |
| FP | إيجابية كاذبة — سليم وأُنذر عنه | 90 | مهندس يقود إلى موقع لا مشكلة فيه |
| TN | سلبية صحيحة — سليم وبرّأه | 9,810 | لا شيء، وعددها هائل |
الدقة هي (60 + 9,810) / 10,000 = 98.7%. ولاحظ ما يحمل هذا الرقم: TN، وعددها 9,810، تُغرق كل ما عداها. الأربعون عطلًا الفائتة والتسعون زيارة المهدورة معًا تحرّكان الدقة بما يزيد قليلًا على نقطة مئوية واحدة. المقياس تسيطر عليه الفئة التي لم تكن تهمّك.
فتجاهل TN لحظةً واقرأ الخلايا الثلاث الأخرى مباشرة. وهذا بالضبط ما تفعله المقاييس الثلاثة التالية.
الإحكام: هل أثق بالإنذار؟
الإحكام (precision) ينظر فقط إلى التنبؤات التي جعلها النموذج إيجابية، ويسأل: كم منها كان صحيحًا؟ إنه مقياس الشخص الذي تصل إليه الإنذارات.
وليس للإحكام أي رأي في الأعطال التي فاتتك. كاشف ينذر عن موقع واحد بالضبط ويصيب فيه إحكامه 1.00 بينما 99 عطلًا جالسة بلا تقرير. وهذا ليس عيبًا في المقياس — بل هو السبب الذي يجعلك لا تذكر الإحكام وحده أبدًا.
الاستدعاء: كم عطلًا وجدت؟
الاستدعاء ينظر فقط إلى الحالات التي كانت إيجابية فعلًا، ويسأل: كم منها أمسك النموذج؟ إنه مقياس الشخص الذي يتحمّل نتائج الإخفاق. وستجده يُسمّى أيضًا الحساسية، أو معدل الإيجابيات الصحيحة — ثلاثة أسماء لكمية واحدة.
وليس للاستدعاء بدوره أي رأي في الإنذارات الكاذبة. «تنبّأ دائمًا بوجود عطل» يحقق استدعاء 1.00 بإحكام 0.01. والاثنان معًا يحصران طريقتي الخطأ كلتيهما، ولهذا يسافران كزوج.
F1: رقم واحد للاثنين
ترتيب عشرين نموذجًا مرشّحًا برقمين أمر مربك، فيدمجهما F1. والمهم أنه الوسط التوافقي لا الحسابي.
واختيار نوع الوسط يقوم بعمل حقيقي هنا. خذ إحكامًا 1.00 واستدعاءً 0.02 — كاشف ينذر عن موقعين ويصيب فيهما. الوسط الحسابي 0.51، وهو رقم محترم. أما الوسط التوافقي فهو 0.039. الوسط التوافقي لا يمكن إنقاذه بنصف قوي واحد؛ فهو يجلس قريبًا من الأضعف. وهذا بالضبط السلوك الذي تريده من ملخّص لمقايضة.
أيّها ينبغي أن تفضّل؟
لا يوجد افتراضي صحيح، وأي مصدر يعطيك واحدًا فهو يتجاوز الجزء الممتع. والسؤال دائمًا: أي خطأ أغلى هنا؟
فضّل الإحكام حين تكون الإيجابية الكاذبة مكلفة. مرشّح بريد يرسل عرض عمل حقيقيًا إلى مجلد المزعج أحدث ضررًا أكبر من مرشّح يسمح لرسالة مزعجة بالمرور، لأن المستخدم يدفع ثمن الإيجابية الكاذبة ولا يكاد يلاحظ السلبية الكاذبة. والأمر نفسه في الحجب التلقائي، والاسترجاع التلقائي للأموال، وكل ما يتصرف بلا إنسان في الحلقة.
وفضّل الاستدعاء حين تكون السلبية الكاذبة مكلفة. اختبار مسح يفوته حالة حقيقية فشل في مهمته الوحيدة؛ والإنذار الكاذب يكلّف اختبارًا إضافيًا. والأمر نفسه في مفاتيح السلامة، وفحص المنشآت، وكاشف المواقع الخلوي عندنا — زيارة مهندس مهدورة تكلّف صباحًا واحدًا، وعطل بلا تقرير يكلّف يومًا من انقطاع الخدمة.
وفضّل F1 حين يؤلمك الاثنان وتحتاج رقمًا واحدًا تحسّنه. وهذا هو الحال المعتاد أثناء اختيار النموذج، ولهذا يظهر f1_weighted كثيرًا كوسيط تسجيل. لكن تذكّر أنه راحة للترتيب لا إعلانٌ بأن الإحكام والاستدعاء متساويان في الأهمية في مسألتك — فإن كان أحدهما أهم فعلًا، فأعطه وزنًا، أو حسّن ما يهمّك مع وضع حدّ أدنى للآخر.
العتبة التي لم تخترها
وهنا شيء تخفيه الخلايا الأربع. معظم المصنّفات لا تُخرج فئة — بل تُخرج درجة بين 0 و1. ثم يقارن شيءٌ ما تلك الدرجة بـعتبة لينتج تسمية، وما لم تقل غير ذلك فتلك العتبة هي 0.5.
و0.5 قيمة افتراضية لا اكتشاف. لا شيء في مسألتك اختارها. وكل مصفوفة التباس وكل إحكام وكل استدعاء رأيته حتى الآن هو خاصية عتبة واحدة. حرّكها فتتحرك كلها.
ارفع العتبة إلى 0.8 فينذر كاشفنا عن 30 موقعًا هي الأكثر ثقة فقط — يصعد الإحكام إلى 1.00 تقريبًا ويهبط الاستدعاء إلى 0.30. وأنزلها إلى 0.2 فينذر عن أكثر من ألفي موقع: يرتفع الاستدعاء إلى 0.85 وينهار الإحكام إلى 0.04. نموذج واحد، ومجموعة أوزان واحدة، وسلوك مختلف تمامًا. والنسخة التفاعلية من هذا الدرس تتيح لك سحب تلك العتبة ومشاهدة الرقمين يتحركان معًا.
بناء منحنى ROC
إذا كانت العتبة الواحدة تعطي زوجًا واحدًا من (الإحكام، الاستدعاء)، فإن مسح العتبة على كامل مداها يرسم منحنى لسلوك النموذج. ارسمه بالمحورين الصحيحين فتحصل على منحنى ROC — خاصية تشغيل المستقبل، وهو اسم موروث من مشغّلي الرادار في أربعينيات القرن الماضي ولا يستحق انتباهًا أكثر من ذلك.
والبناء آلي، وأن تبنيه بيدك مرة واحدة أنفع من أن تقرأ عنه ثلاث مرات:
1. أعطِ درجة لكل مثال في مجموعة التحقق. 2. ابدأ بعتبة أعلى من كل الدرجات: لا شيء يُنذر عنه، فمعدل الإيجابيات الصحيحة = 0 ومعدل الإيجابيات الكاذبة = 0. هذه هي الزاوية السفلية اليسرى. 3. أنزل العتبة درجةً واحدة في كل مرة. كل خطوة تحوّل مثالًا واحدًا من متنبَّأ سلبي إلى متنبَّأ إيجابي: فإن كان إيجابيًا حقيقيًا صعد المحور الرأسي، وإن كان سلبيًا حقيقيًا تقدّم المحور الأفقي. 4. واصل حتى تنزل العتبة تحت كل الدرجات: كل شيء يُنذر عنه، والمعدلان يساويان 1، وهذه هي الزاوية العلوية اليمنى. ثم صِل النقاط.
واقرأ الشكل الهندسي فيشرح نفسه. النموذج الذي لا تحمل درجاته أي معلومة يصعد ويتقدّم بالقدر نفسه، فيرسم القطر. والنموذج الذي يرتّب كل إيجابي فوق كل سلبي يصعد على الحد الأيسر مباشرة ثم يمضي على الأعلى، عبر الزاوية عند (0، 1) — فصل تام. والنماذج الحقيقية تنحني في مكان بين الحالتين. والأعلى والأيسر أفضل.
AUC: تقييم كل العتبات مرة واحدة
المنحنى مفيد لكنه صورة، وأنت لا تستطيع ترتيب النماذج بالصور. وAUC — المساحة تحت منحنى ROC — تختزله في رقم واحد بين 0 و1. مساحة القطر 0.50، ومساحة الفصل التام 1.00. وكاشفنا يخرج عند 0.90.
ولـAUC تفسير أنفع بكثير من كلمة «مساحة»، ويستحق أن تحفظه: AUC هي احتمال أن يحصل مثال إيجابي مختار عشوائيًا على درجة أعلى من مثال سلبي مختار عشوائيًا. فـAUC تساوي 0.90 تعني أنك لو أخذت موقعًا معطلًا وموقعًا سليمًا عشوائيًا، لصنّف الكاشف المعطل أعلى في تسع مرات من عشر. إنها تقيس مدى جودة ترتيب النموذج، بعد إخراج العتبة من الصورة تمامًا.
وهذه الخاصية تجعل AUC المقياس الطبيعي حين لا تكون العتبة قد حُدّدت بعد، أو حين سيضبطها لاحقًا من يشغّل النظام. وهي أيضًا سبب اختلاف AUC وF1 حول أي النموذجين أفضل: F1 يحكم على نقطة تشغيل واحدة، وAUC يحكم على الترتيب.
كاشفنا AUC عنده 0.90 وإحكامه 0.40، والرقمان صحيحان. معدل الإيجابيات الكاذبة يقسم على 9,900 سلبية، فتُقرأ التسعون إيجابية كاذبة كمعدل 0.009 — أي شيء يكاد لا يُذكر. أما الإحكام فيقسم على 150 موقعًا أُنذر عنها، فتسيطر التسعون نفسها. وحين تكون الفئة السلبية هائلة، اذكر AUC بجانب الإحكام والاستدعاء، لا بدلًا منهما. ومنحنى الإحكام–الاستدعاء، الذي يستبدل الإحكام بمعدل الإيجابيات الكاذبة، أداة أحدّ على بيانات بهذا الاختلال.
مقاييس الانحدار: RMSE وMAE
لا شيء من كل ما سبق ينطبق حين يتنبأ النموذج برقم لا بفئة. لا توجد مصفوفة التباس لعبارة «سعة النقل ستكون 47.3 ميجابت في الثانية» — فالتنبؤ ليس صحيحًا أو خاطئًا، بل مُخطئًا بمقدار ما، ويصبح السؤال: كيف تريد تلخيص تلك المقادير؟
قابلت MSE في الدرس السابق كدالة خسارة. وله كمقياس معلَن خاصية محرجة: وحداته مربّع ما تنبأت به. و«MSE يساوي 10.9 ميجابت-في-الثانية-مربّعًا» ليست عبارة يستطيع أحد التصرف بناءً عليها. وأخذ الجذر التربيعي يحل ذلك، فيعطي RMSE.
أما MAE فيأخذ متوسط الأخطاء المطلقة بدلًا من المربّعة. وهو يجيب على أبسط سؤال ممكن — كم يبتعد هذا النموذج، عادةً؟
والفرق بينهما يخصّ القيم الشاذة بالكامل، ومثال واحد يجعله ملموسًا. تنبّأ بسعة النقل في عشرة مواقع. تسعة تنبؤات تخطئ كل منها بمقدار 1 ميجابت في الثانية؛ والعاشر يخطئ بمقدار 10.
MAE = (9 × 1 + 10) / 10 = 1.9 ميجابت في الثانية. وRMSE = √((9 × 1 + 100) / 10) = √10.9 = 3.3 ميجابت في الثانية. التنبؤ السيئ الواحد يساهم بـ100 من الخطأ المربّع الذي مجموعه 109 — أي 92% من RMSE يأتي من 10% من البيانات. أما MAE فيعطي التنبؤ نفسه عُشر ذلك الوزن.
R²: مقارنةً بماذا؟
RMSE وMAE مقياسان مطلقان. وRMSE يساوي 3.3 ميجابت في الثانية جيدٌ إن كانت سعة النقل تتغير بمئات، وسيئٌ إن كانت تتغير بخمسة، والرقم وحده لا يخبرك أيّهما. وR² — معامل التحديد — يوفّر المقارنة الناقصة بأن يقيسك مقابل أكسل نموذج ممكن: تنبّأ دائمًا بالمتوسط.
مواقعنا العشرة كان خطؤها المربّع 109 مقابل 1,000 للتنبؤ بالمتوسط دائمًا، فيكون R² = 1 − 109/1,000 = 0.89. اقرأها هكذا: النموذج يفسّر 89% من التغيّر الذي يتركه المتوسط بلا تفسير. وR² = 1 تعني الكمال، وR² = 0 تعني أنك ساويت المتوسط بالضبط، وR² يمكن أن تصبح سالبة — نموذج أسوأ من المتوسط، وهذا يحدث على مجموعة الاختبار أكثر مما تتوقع.
متى يكون MAE هو الخيار الصادق
RMSE هو الافتراضي في معظم الأوراق البحثية ومعظم الدروس، فيستحق أن نوضّح متى يكون التقرير الخطأ. اسأل سؤالًا واحدًا: هل الخطأ الكبير أسوأ فعلًا، بقدر مربّعه؟
أحيانًا نعم. إن كنت تحدّد حجم بطارية أو ميزانية وصلة أو ذاكرة مؤقتة، فالخطأ بمقدار 10 أسوأ بكثير من عشرة أخطاء بمقدار 1، لأن الإخفاق الكبير الواحد هو الذي يُعطِب النظام. والتربيع يعبّر عن هذا، وRMSE هو المقياس الصحيح.
وكثيرًا لا. إن كانت أخطاؤك المتطرفة تأتي من بيانات فاسدة لا من تنبؤات سيئة — مستشعر متوقف، أو صف بتسمية خاطئة، أو قياس أُخذ أثناء الصيانة — فـRMSE يخبرك عن جودة جمع بياناتك لا عن جودة نموذجك. وإن حسّنته التوى النموذج ليلحق ضوضاء كان ينبغي أن يتجاهلها.
والقاعدة العملية: اذكر الاثنين. حسابهما لا يكلّف شيئًا، والفارق بينهما معلومة بذاته — فـRMSE أكبر بكثير من MAE يقول إن أخطاءك تسيطر عليها قلة كبيرة، وعليك أن تذهب وتنظر إليها.
1. قسّم إلى تدريب وتحقق واختبار قبل أن تلمس أي شيء آخر. 2. تحقق من توازن الفئات — فإن كان مائلًا فالدقة خارج الحساب. 3. اطبع مصفوفة الالتباس لا رقمًا فقط. 4. اقرر أي خطأ أغلى، واختر مقياسك من ذلك. 5. تحقق من العتبة؛ فـ0.5 قيمة افتراضية لا جواب. 6. للانحدار، اذكر RMSE وMAE معًا، وR² للسياق. 7. افتح مجموعة الاختبار مرة واحدة.
- ثلاث مجموعات لا اثنتان: التدريب يضبط المعاملات، والتحقق يختار بين النماذج، والاختبار يُفتح مرة واحدة ويقدّر الأداء الحقيقي.
- التسريب هو أي معلومة تصل إلى النموذج ولن تكون موجودة عند النشر — بما فيها نظراتك المتكررة إلى نتيجة الاختبار.
- الدقة تسيطر عليها الفئة الأكثر. في مسألة 99% منها سلبي، يحقق «تنبّأ دائمًا بالسلبي» دقة 99.0% ولا يجد شيئًا.
- مصفوفة الالتباس تحتفظ بالأعداد الأربعة. الإحكام = TP/(TP+FP) هو مدى الثقة في الإنذار، والاستدعاء = TP/(TP+FN) هو نسبة الحالات الحقيقية التي وُجدت.
- فضّل الإحكام حين تكون الإنذارات الكاذبة مكلفة، والاستدعاء حين تكون الإخفاقات مكلفة، وF1 — الوسط التوافقي — حين تحتاج رقمًا واحدًا للترتيب.
- منحنى ROC يُبنى بمسح العتبة ورسم معدل الإيجابيات الصحيحة مقابل معدل الإيجابيات الكاذبة. وAUC هي احتمال أن يتجاوز إيجابي عشوائي سلبيًا عشوائيًا؛ و0.50 هي المصادفة.
- RMSE يعاقب الأخطاء الكبيرة تربيعيًا، وMAE يزن كل خطأ بقدر حجمه، وR² يقارنك بالتنبؤ بالمتوسط. اذكر RMSE وMAE معًا.