تخطَّ إلى المحتوى

🤖 شرح الذكاء الاصطناعي وتعلّم الآلة

مقاييس التصنيف

الدرس 20 من 50· ⏱ 7 دقائق قراءة· 🗓 آخر تحديث: ١٨ سبتمبر ٢٠٢٦

بعد اختيار النموذج وضبطه عبر Cross-Validation، تحتاج مقاييس دقيقة لتقييمه. Accuracy وحدها مضلّلة في كثير من الحالات. هذه الصفحة تشرح المقاييس الأساسية مع أمثلة عملية.

المشكلة الأساسية: Accuracy غير كافية

مثال

لديك 1000 بريد، 990 عادي و 10 مزعج. نموذج "غبي" يقول "كل شيء عادي":

y_true = [0]*990 + [1]*10     # 0 = عادي, 1 = مزعج
y_pred = [0]*1000              # النموذج يتنبأ دائمًا بـ "عادي"

from sklearn.metrics import accuracy_score
print(accuracy_score(y_true, y_pred))   # 0.99 — يبدو ممتازًا!
# لكن النموذج فشل تمامًا في كشف الـ 10 رسائل مزعج!

99% Accuracy مع 0% كشف للبريد المزعج. هذا كارثي.

لهذا نحتاج مقاييس أدقّ تأخذ بعين الاعتبار نوع الخطأ.

مصطلحات أساسية

لتنبؤ تصنيف ثنائي (0 = سالب، 1 = موجب)، هناك 4 احتمالات:

فعلي سالب (0)فعلي موجب (1)
تنبؤ سالب (0)True Negative (TN) — صحFalse Negative (FN) — خطأ
تنبؤ موجب (1)False Positive (FP) — خطأTrue Positive (TP) — صح
  • True Positive (TP): تنبّأتَ بالموجب وكان فعلًا موجبًا. ✅
  • True Negative (TN): تنبّأتَ بالسالب وكان فعلًا سالبًا. ✅
  • False Positive (FP): تنبّأتَ بالموجب لكنّه سالب. خطأ من النوع الأول، أو "إنذار كاذب".
  • False Negative (FN): تنبّأتَ بالسالب لكنّه موجب. خطأ من النوع الثاني، أو "فرصة ضائعة".

مثال ملموس

فحص طبي لكشف مرض:

  • TP: مريض، الاختبار قال مصاب → صح.
  • TN: سليم، الاختبار قال سليم → صح.
  • FP: سليم، الاختبار قال مصاب → قلق زائد، فحوصات إضافية.
  • FN: مريض، الاختبار قال سليم → مرض لم يُكتشف. خطير!

Accuracy (الدقّة)

Accuracy = (TP + TN) / (TP + TN + FP + FN)

نسبة التنبؤات الصحيحة من الكل.

متى يعمل جيدًا: عندما تكون الفئات متوازنة تقريبًا.

متى يفشل: كما في مثال البريد أعلاه — عندما تكون فئة نادرة.

Precision (الدقّة الإيجابية)

Precision = TP / (TP + FP)

من بين كل ما تنبّأتَ بأنه موجب، كم كان فعلًا موجبًا؟

سؤال يجيب عنه: "إذا قلتُ إن هذا مزعج، كم فرصة أنني مصيب؟"

مثال: مصنّف بريد مزعج بدقة (Precision) = 0.95 → من بين كل ما صنّفته كمزعج، 95% فعلًا مزعج.

متى يهمّ Precision:

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

Recall (الاستدعاء / الحساسية)

Recall = TP / (TP + FN)

من بين كل الحالات الموجبة الفعلية، كم اكتشفها النموذج؟

سؤال يجيب عنه: "من كل الموجب الفعلي، كم رصدتُ؟"

مثال: مصنّف بريد مزعج باستدعاء (Recall) = 0.85 → من بين كل البريد المزعج فعلًا، رصدتُ 85%.

متى يهمّ Recall:

  • فقد الحالة مكلّف: كشف السرطان. لا تريد أن يفوتك مريض.
  • كشف الاحتيال: لا تريد أن يمرّ محتال.
  • الأمن: لا تريد أن يدخل متسلّل.

F1 Score

F1 = 2 × (Precision × Recall) / (Precision + Recall)

المتوسّط التوافقي بين Precision و Recall. رقم واحد يلخّص الاثنين.

  • F1 = 1 → Precision و Recall كلاهما 1 (مثالي).
  • F1 = 0 → واحد منهم على الأقل 0.
  • يصلح للتصنيف غير المتوازن.
from sklearn.metrics import f1_score
print(f1_score(y_true, y_pred))

Confusion Matrix (مصفوفة الارتباك)

تمثيل بصري للأخطاء:

from sklearn.metrics import confusion_matrix
import seaborn as sns
import matplotlib.pyplot as plt

cm = confusion_matrix(y_true, y_pred)
print(cm)
# [[TN  FP]
#  [FN  TP]]

sns.heatmap(cm, annot=True, fmt='d')
plt.xlabel("Predicted")
plt.ylabel("Actual")
plt.show()

القراءة:

  • الخلية (0,0) = TN (صحيح سليم).
  • الخلية (0,1) = FP (إنذار كاذب).
  • الخلية (1,0) = FN (فائت).
  • الخلية (1,1) = TP (صحيح موجب).

مثال تطبيقي شامل

سيناريو: كشف الاحتيال

  • 10,000 معاملة.
  • 9,950 عادية، 50 احتيال.
فعلي عاديفعلي احتيال
تنبّأ عاديTN = 9,940FN = 10
تنبّأ احتيالFP = 10TP = 40
  • Accuracy = (9940 + 40) / 10000 = 0.998 (ممتاز ظاهريًا).
  • Precision = 40 / (40 + 10) = 0.80 (من الإنذارات، 80% احتيال فعلًا).
  • Recall = 40 / (40 + 10) = 0.80 (رصدنا 80% من الاحتيال).
  • F1 = 0.80.

الآن الصورة أوضح: رغم Accuracy 99.8%، فاتنا 20% من الاحتيال. Recall منخفض.

كيف نرفع Recall؟

نخفّض عتبة التنبؤ (مثلًا من 0.5 إلى 0.3):

  • نتنبّأ بـ "احتيال" حتى لو النموذج أقل ثقة.
  • ↑ FP، ↓ FN → ↑ Recall، ↓ Precision.

هذا Trade-off — رفع واحد يخفض الآخر. يعتمد اختيارك على السياق (هل خطأ FP أسوأ أم FN؟).

ROC Curve و AUC

ROC Curve = منحنى يربط Recall (y-axis) بـ False Positive Rate (x-axis) عند عتبات مختلفة.

AUC (Area Under Curve) = المساحة تحت المنحنى. بين 0 و 1.

  • AUC = 1 → نموذج مثالي.
  • AUC = 0.5 → نموذج عشوائي.
  • AUC < 0.5 → أسوأ من العشوائي (خطأ في الإعداد).
from sklearn.metrics import roc_curve, auc

# الحصول على احتمالات (وليس فئات)
y_proba = model.predict_proba(X_test)[:, 1]

fpr, tpr, thresholds = roc_curve(y_test, y_proba)
roc_auc = auc(fpr, tpr)

import matplotlib.pyplot as plt
plt.plot(fpr, tpr, label=f'ROC (AUC = {roc_auc:.2f})')
plt.plot([0, 1], [0, 1], 'k--')   # خط العشوائي
plt.xlabel('False Positive Rate')
plt.ylabel('True Positive Rate')
plt.legend()
plt.show()

Multi-class: ماذا يتغيّر؟

في التصنيف متعدد الفئات، المقاييس تُطبَّق لكل فئة ثم تُجمَع:

from sklearn.metrics import classification_report

print(classification_report(y_test, y_pred))
              precision    recall  f1-score   support

     class_0       0.95      0.98      0.96       100
     class_1       0.92      0.88      0.90        50
     class_2       0.85      0.90      0.87        50

    accuracy                           0.93       200
   macro avg       0.91      0.92      0.91       200
weighted avg       0.93      0.93      0.93       200
  • Macro avg: متوسّط بسيط (كل فئة متساوية).
  • Weighted avg: متوسّط مرجّح بحجم كل فئة.

أيّ مقياس أختار؟

الحالةالمقياس الأنسب
فئات متوازنة، اهتمام متساوٍAccuracy
فئة نادرة مهمّة جدًاRecall
الإنذار الكاذب مكلّفPrecision
ملخّص واحد للاختيار بين النماذجF1
التصنيف غير المتوازن بشكل كبيرROC-AUC
التصنيف متعدد الفئاتMacro/Weighted F1

نصائح عملية

  • دائمًا اطبع confusion matrix — يعطيك صورة فورية لأنواع الأخطاء.
  • اختر المقياس حسب السياق — لا تقل "Accuracy 95%!" دون فحص ما يعنيه ذلك.
  • في التصنيف غير المتوازن، Accuracy وحدها لا تكفي أبدًا.
  • استخدم ROC-AUC لمقارنة النماذج بشكل مستقل عن العتبة.

أخطاء شائعة

  • "Accuracy 99% يعني النموذج ممتاز": كما في مثال البريد — يمكن أن يكون كارثيًا مع فئة نادرة.
  • "Precision + Recall = F1": خطأ. F1 هو متوسّط توافقي، ليس جمعًا.
  • "AUC = 0.8 يعني 80% من التنبؤات صحيحة": لا — AUC مقياس الترتيب، ليس الدقّة.
  • "العتبة 0.5 عالمية": تختلف حسب توزيع الفئات. اخترها بناءً على validation set.

الخطوات التالية

📊 لاحقًا في المسار: تقييم نماذج اللغة الكبيرة (LLMs) — له مقاييس مختلفة لأنواع مختلفة من المهام.

شرح مقاييس التصنيف — الذكاء الاصطناعي وتعلّم الآلة بالعربي
مقاييس التصنيفالذكاء الاصطناعي وتعلّم الآلة بالعربي · The Code Fix

📚 لمزيد من التعمّق في الذكاء الاصطناعي وتعلّم الآلة، راجِع توثيق scikit-learn الرسمي.

هل كان هذا الدرس مفيدًا؟