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

Classification Metrics

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

Accuracy و F1 و ROC-AUC و Cohen's Kappa وغيرها — كل مقياس يجيب على سؤال مختلف، واختيار المقياس الخطأ لمشكلة غير متوازنة يعطي إحساسًا زائفًا بالأداء.

التصنيف ليس له مقياس واحد صالح لكل الحالات. Accuracy (الدقة الكلية) أبسطها: نسبة التنبؤات الصحيحة، لكنه يخدع في بيانات غير متوازنة (نموذج يقول دائمًا "سلبي" في بيانات 99% سلبية يحصل على 99% accuracy بلا فائدة عملية). Precision و Recall يركّزان على الفئة الإيجابية. F1 يوازن بينهما. ROC-AUC يقيس قدرة النموذج على ترتيب الإيجابي قبل السلبي بصرف النظر عن threshold. Cohen's Kappa يأخذ الصدفة بعين الاعتبار.

في مشاكل Multiclass (أكثر من فئتين)، أغلب المقاييس لها صيغتان: macro (متوسط بسيط لكل فئة — يعاقب الفئات الصغيرة) و weighted (مرجّح بعدد عيّنات كل فئة) و micro (متوسط تجميعي عبر كل التنبؤات). الاختيار يعكس ما إذا كانت الفئات الصغيرة مهمة بنفس القدر.

اختيار المقياس قرار تقني ومنتجي: ما الذي يكلّف أكثر — FP أم FN؟ هل الفئات غير المتوازنة جزء طبيعي من المشكلة أم خلل؟ الإجابة تحدد المقياس الأنسب.

الصياغة

from sklearn.metrics import (
    accuracy_score, f1_score, roc_auc_score,
    classification_report, confusion_matrix
)

print(classification_report(y_true, y_pred))
# يطبع Precision/Recall/F1 لكل فئة + macro avg + weighted avg

📄 مثال

from sklearn.datasets import load_breast_cancer
from sklearn.model_selection import train_test_split
from sklearn.linear_model import LogisticRegression
from sklearn.metrics import classification_report

X, y = load_breast_cancer(return_X_y=True)
X_train, X_test, y_train, y_test = train_test_split(X, y, random_state=42, stratify=y)

model = LogisticRegression(max_iter=1000)
model.fit(X_train, y_train)
y_pred = model.predict(X_test)

print(classification_report(y_test, y_pred, target_names=["سليم", "ورم"]))

أهم النقاط

النقطةالوظيفة
Accuracyنسبة التنبؤات الصحيحة — يخدع في بيانات غير متوازنة
F1 / F-betaمتوسط توافقي موزون بين Precision و Recall
ROC-AUCمساحة تحت منحنى ROC — يقيس جودة الترتيب بصرف النظر عن threshold
Cohen's Kappaدقة معدّلة بالصدفة — مفيد حين baseline مرتفع

💡 نصائح عملية

  • في بيانات غير متوازنة، Accuracy وحدها مضللة — أضف F1 و ROC-AUC و/أو Cohen's Kappa
  • classification_report يعطيك كل المقاييس لكل فئة في تمريرة واحدة — استخدمه للتحقق السريع

⚠️ أخطاء شائعة

  • الإبلاغ عن Accuracy = 99% لمشكلة غير متوازنة 99% فئة واحدة — النموذج "متوسط" لكنه يبدو "ممتازًا"
  • استخدام macro avg حين الفئات الصغيرة لا تهم — weighted avg أنسب في تلك الحالة

خصائص ذات صلة

🎓 تريد فهم الصورة الكاملة خطوة بخطوة؟ ابدأ من مسار AI-ML الكامل بالعربي.

📚 للتعمق التقني الكامل بالإنجليزية: scikit-learn Documentation