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