تقييم النماذج والمقاييس
“الدقة كذبة — تعلّم اختيار المقياس الصحيح للمشكلة الحقيقية”
دليل شامل: الدقة والضبط والاستدعاء وF1 وROC-AUC ومصفوفة الالتباس والتحقق المتقاطع — واختيار المقياس الصحيح لمهمتك.
المتطلبات الأساسية
المفاهيم المغطاة
∑الصيغ الرئيسية
درجة F1
المتوسط التوافقي للدقة والاستدعاء — يعاقب الأداء السيئ في كلا الاتجاهين
AUC-ROC
احتمال أن يُرتَّب الإيجابي العشوائي أعلى من السلبي العشوائي — مستقل عن العتبة
MCC
معامل ارتباط ماثيوز — أفضل مقياس مفرد للبيانات غير المتوازنة
RMSE
جذر متوسط الخطأ المربع — يعاقب الأخطاء الكبيرة، بوحدات الهدف
درجة R²
نسبة التباين المُفسَّر؛ 1=مثالي، 0=يتنبأ بالمتوسط، <0=أسوأ من المتوسط
MAE
متوسط الخطأ المطلق — متين للشواذ، قابل للتفسير بوحدات الهدف
▶محاكاة تفاعلية
⬡هندسة النموذج
عندما تقتل الدقة
تخيل التنبؤ بالسرطان (انتشار 0.1%). نموذج يتنبأ بـ'لا سرطان' للجميع يحقق دقة 99.9% — ويقتل المرضى. في اكتشاف الاحتيال (0.5% احتيال)، الدقة العالية بلا معنى. اختيار المقياس قرار تجاري ليس تقنياً. الخطأ فيه قد يعني نشر نموذج يُحسّن الهدف الخاطئ تماماً.
في 2021، كان خوارزمية التوظيف في أمازون بدقة 98.4% — لكنها تُميّز ضد المرأة بشكل منهجي لأن الدقة كانت المقياس الوحيد المُحسَّن.
مصفوفة الالتباس كصورة كاملة
كل تنبؤ يقع في إحدى أربع فئات: إيجابي حقيقي (إيجابي صحيح)، إيجابي كاذب (تنبؤ إيجابي، فعلياً سلبي)، سلبي حقيقي (سلبي صحيح)، سلبي كاذب (تنبؤ سلبي، فعلياً إيجابي). FP = خطأ النوع الأول (إنذار كاذب). FN = خطأ النوع الثاني (تفويت). أيهما أكثر أهمية يعتمد كلياً على التطبيق.
منحنى ROC: تقييم مستقل عن العتبة
المصنف يُخرج نتيجة، ليس فقط تنبؤ ثنائي. منحنى ROC يُظهر جميع المقايضات الممكنة بمسح العتبة من 0 إلى 1: رسم TPR (الاستدعاء) مقابل FPR. AUC = 0.5 يعني التخمين العشوائي، AUC = 1.0 مثالي. للـAUC تفسير احتمالي جميل: P(نتيجة(إيجابي) > نتيجة(سلبي)).
K-Fold الطبقي: الطريقة الصحيحة للتحقق
التحقق بالاحتجاز يهدر البيانات ولديه تباين مرتفع. التحقق المتقاطع K-Fold يستخدم جميع البيانات. K-Fold الطبقي يضمن أن كل طية لها نفس توزيع الفئات. TimeSeriesSplit يمنع تسرب البيانات: البيانات المستقبلية لا تُعلم التنبؤات الماضية أبداً.
StratifiedKFold: يحافظ على نسب الفئات في كل طية
TimeSeriesSplit: جميع بيانات التدريب تأتي قبل بيانات التحقق زمنياً
GroupKFold: يضمن أن جميع عينات المجموعة (مريض، مستخدم) في نفس الطية
RepeatedStratifiedKFold: تكرار K-Fold N مرة ببذور عشوائية مختلفة → تقدير تباين أقل
خط أنابيب التقييم الكامل
from sklearn.metrics import ( classification_report, roc_auc_score, f1_score, average_precision_score, matthews_corrcoef, confusion_matrix ) from sklearn.model_selection import StratifiedKFold, train_test_split from sklearn.datasets import make_classification from sklearn.ensemble import GradientBoostingClassifier import numpy as np class="tok-comment"># ── Sample data + model ──────────────────────────────────────────────── X, y = make_classification(n_samples=class="tok-num">1000, n_features=class="tok-num">10, random_state=class="tok-num">42) X_train, X_test, y_train, y_test = train_test_split( X, y, test_size=class="tok-num">0.2, random_state=class="tok-num">42) model = GradientBoostingClassifier(n_estimators=class="tok-num">100, random_state=class="tok-num">42) skf = StratifiedKFold(n_splits=class="tok-num">5, shuffle=True, random_state=class="tok-num">42) oof_probs = np.zeros(len(y_train)) for fold, (tr_idx, val_idx) in enumerate(skf.split(X_train, y_train)): model.fit(X_train[tr_idx], y_train[tr_idx]) oof_probs[val_idx] = model.predict_proba(X_train[val_idx])[:, class="tok-num">1] print(fclass="tok-str">"Fold {fold+class="tok-num">1} AUC: {roc_auc_score(y_train[val_idx], oof_probs[val_idx]):.4f}") class="tok-comment"># Full OOF evaluation print(fclass="tok-str">"\nOOF AUC: {roc_auc_score(y_train, oof_probs):.4f}") print(fclass="tok-str">"OOF AUC-PR: {average_precision_score(y_train, oof_probs):.4f}") print(fclass="tok-str">"MCC: {matthews_corrcoef(y_train, oof_probs > class="tok-num">0.5):.4f}") class="tok-comment"># Optimal threshold by F1 thresholds = np.linspace(class="tok-num">0.01, class="tok-num">0.99, class="tok-num">200) f1s = [f1_score(y_train, oof_probs > t) for t in thresholds] best_threshold = thresholds[np.argmax(f1s)] print(fclass="tok-str">"Optimal threshold: {best_threshold:.3f}, F1: {max(f1s):.4f}")
مقاييس الانحدار: عندما لا يكفي MSE
التصنيف لديه الدقة وF1 وAUC. الانحدار لديه عائلة كاملة من المقاييس — كلٌّ منها حساس لأنواع مختلفة من الأخطاء. اختيار الخاطئ قد يُخفي إخفاقات كارثية في النموذج.
MAE (متوسط الخطأ المطلق): Σ|yᵢ−ŷᵢ|/n — متين للشواذ، بوحدات الهدف، سهل الفهم. أقل يعني أفضل.
MSE (متوسط الخطأ المربع): Σ(yᵢ−ŷᵢ)²/n — يعاقب الأخطاء الكبيرة بشدة. قابل للاشتقاق في كل مكان. أقل يعني أفضل.
RMSE: √MSE — بوحدات الهدف، يعاقب الأخطاء الكبيرة. المقياس الأكثر شيوعاً للانحدار في Kaggle.
R² (معامل التحديد): 1 − MSE/Var(y) — نسبة التباين المُفسَّر. 1=مثالي، 0=يتنبأ بالمتوسط، <0=أسوأ من المتوسط.
MAPE: Σ|yᵢ−ŷᵢ|/yᵢ/n — خطأ نسبي مئوي. سهل للأعمال. غير معرَّف عند yᵢ=0، متحيز للقيم الصغيرة.
RMSLE (RMSE اللوغاريتمي): √Σ(log(ŷ+1)−log(y+1))²/n — متين للشواذ، يعاقب التنبؤات المنخفضة. لبيانات العد.
خسارة هوبر: تربيعية للأخطاء الصغيرة، خطية للكبيرة — أفضل من MAE+MSE، متين وقابل للاشتقاق.
مقاييس الترتيب والمعايرة
بعيداً عن دقة التنبؤ النقطي، يجب على النماذج أحياناً الترتيب بشكل صحيح (توصية، بحث) أو إنتاج احتمالات معايَرة جيداً (مخاطر طبية، تمويل).
Spearman ρ: ارتباط رتب بين المتنبَّأ والفعلي — يقيس العلاقة المتزايدة، ليس الحجم.
NDCG (مكسب تراكمي مُخصَّم مُعيَّر): أهمية متدرجة، مخصَّمة بالموضع. يُستخدم في البحث/التوصية.
المعايرة (ECE): خطأ المعايرة المتوقع — هل تتحقق التنبؤات بثقة 80% في 80% من الأوقات؟
درجة بريير: MSE على الاحتمالات للتصنيف الثنائي — أقل يعني أفضل. جيد للتنبؤات الاحتمالية.
Log-Loss (الإنتروبيا التقاطعية): −Σyᵢ·log(pᵢ)+(1−yᵢ)·log(1−pᵢ) — يعاقب بشدة التنبؤات الخاطئة الواثقة.
اختيار المقياس قرار أعمال
قاعدة: اختر المقياس الذي يتطابق مع تكلفة الأخطاء في تطبيقك. RMSE لأسعار المنازل. MAE لأوقات التسليم. MAPE عندما يهم الخطأ النسبي. AUC عند تغير توازن الفئات. F1 عندما لكل من FP وFN تكاليف. MCC كأفضل مقياس مفرد للبيانات غير المتوازنة.
?اختبار المعرفة
يتم حفظ التقدم في متصفحك — لا حاجة لحساب.