طَبِّقْهاتعلّم المبدأ، وطبّقه بيدكمقرر 244 · علم البيانات للويب
الدرس 23 · الوحدة 11: استخدام نماذج تعلم الآلة للتحليل

تقييم النموذج: الدقة ومصفوفة الالتباس

كم نموذجك جيّد حقًّا؟ ولماذا الدقّة وحدها قد تكذب؟ ⏱ نحو 50 دقيقة.

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

١الدقّة وحدها تخدع

بنيت مصنّفًا؛ كم هو جيّد؟ أبسط مقياسٍ الدقّة Accuracy: نسبة التنبؤات الصحيحة. لكنها تخدع مع الفئات غير المتوازنة: لو 95% من الزوّار لا يشترون، فمصنّفٌ يقول «لا أحد يشتري» دقّته 95% — وهو عديم الفائدة!

main.py
from sklearn.metrics import accuracy_score y_true = [0, 0, 1, 1, 0, 1, 0, 0]   # الحقيقةy_pred = [0, 0, 1, 0, 0, 1, 0, 1]   # تنبّؤ النموذجprint("الدقّة:", round(accuracy_score(y_true, y_pred), 3))
Shell×
>>> %Run main.py
الدقّة: 0.75
>>>

ستّ تنبّؤاتٍ صحيحة من ثمانٍ ← دقّة 0.75. لكن الدقّة لا تخبرنا أين أخطأ النموذج. لذلك نحتاج مصفوفة الالتباس.

٢مصفوفة الالتباس: أين الخطأ؟

تفصّل التنبؤات إلى أربع خانات: صوابٌ وخطأٌ لكل فئة. منها نعرف نوع الخطأ:

تنبّأ: لاتنبّأ: نعم
الحقيقة: لاسلبيّ صحيح TNموجب كاذب FP (إنذار كاذب)
الحقيقة: نعمسالب كاذب FN (فوّتناه)موجب صحيح TP
main.py
from sklearn.metrics import confusion_matrix y_true = [0, 0, 1, 1, 0, 1, 0, 0]y_pred = [0, 0, 1, 0, 0, 1, 0, 1]cm = confusion_matrix(y_true, y_pred)print(cm)tn, fp, fn, tp = cm.ravel()print(f"TN={tn} FP={fp} FN={fn} TP={tp}")
Shell×
>>> %Run main.py
[[4 1]
[1 2]]
TN=4 FP=1 FN=1 TP=2
>>>

٣الدقّة والاستدعاء precision & recall

من المصفوفة يُشتقّ مقياسان أدقّ، اختر بينهما حسب الأهمّ:

المقياسيجيب عنيهمّ حين
الضبط Precisionمن قلنا «نعم»، كم صحّ؟الإنذار الكاذب مكلف
الاستدعاء Recallمن الفعلي «نعم»، كم أمسكنا؟تفويت الحالة مكلف
main.py
from sklearn.metrics import precision_score, recall_score, classification_report y_true = [0, 0, 1, 1, 0, 1, 0, 0]y_pred = [0, 0, 1, 0, 0, 1, 0, 1]print("الضبط:", round(precision_score(y_true, y_pred), 3))print("الاستدعاء:", round(recall_score(y_true, y_pred), 3))
Shell×
>>> %Run main.py
الضبط: 0.667
الاستدعاء: 0.667
>>>

توقّع وتحقّق

نسبة التنبؤات الصحيحة هي:

الدقّة تخدع مع:

«من الفعلي نعم، كم أمسكنا» هو:

الإنذار الكاذب يقابل:

الخلاصة

تحدٍّ برمجي: قيّم التنبؤات

متقدم

للمصفوفتين المعطاتين احسب: الدقّة مقرّبة لمنزلتين، وعدد الموجبات الكاذبة FP.

المطلوب:
  • اطبع accuracy_score مقرّبًا لمنزلتين.
  • اطبع قيمة FP من مصفوفة الالتباس.

ابدأ من هذا الكود، واضغط ▶ شغّل هنا لتكتب حلّك وتجرّبه مباشرة:

main.py
from sklearn.metrics import accuracy_score, confusion_matrixy_true = [1, 0, 1, 1, 0, 0, 1, 0, 1, 0]y_pred = [1, 0, 0, 1, 1, 0, 1, 0, 1, 1]# اطبع الدقّة (منزلتين) ثم عدد الموجبات الكاذبة FP
المطلوب×
0.7
2
💡 تلميح 1
الدقّة: accuracy_score(y_true, y_pred).
💡 تلميح 2
FP: confusion_matrix(...).ravel() يعطي tn, fp, fn, tp.

حاول بنفسك أولًا؛ للمسألة أكثر من حلّ صحيح.

main.py
from sklearn.metrics import accuracy_score, confusion_matrixy_true = [1, 0, 1, 1, 0, 0, 1, 0, 1, 0]y_pred = [1, 0, 0, 1, 1, 0, 1, 0, 1, 1]print(round(accuracy_score(y_true, y_pred), 2))tn, fp, fn, tp = confusion_matrix(y_true, y_pred).ravel()print(int(fp))
انتقل إلى تقييم الدرساختيار من متعدد، وصح وخطأ، وأكمل الفراغ، وتتبّع الناتج.ابدأ التقييم ←

📝 معلم؟ أرسل ملاحظة للمؤلف عن هذا الدرس