Receiver Operating Characteristic (ROC) Curve
يمثّل منحنى خصائص تشغيل المستقبل (ROC) معدل الإيجابيات الحقيقية مقابل معدل الإيجابيات الكاذبة عند كل عتبة. تعرّف إلى كيفية قراءته وAUC، مع أمثلة برمجية.
منحنى خاصية تشغيل المستقبل (ROC) رسم بياني يوضح مدى قدرة مُصنِّف ثنائي على الفصل بين فئتين عبر جميع عتبات القرار الممكنة. يرسم معدل الإيجابيات الحقيقية على المحور y مقابل معدل الإيجابيات الكاذبة على المحور x، مع نقطة لكل عتبة مطبّقة على درجات النموذج، بحيث تغطي صورة واحدة جميع المفاضلات بين اكتشاف الإيجابيات وإطلاق الإنذارات الكاذبة. وتختزل مساحته، أي المساحة تحت المنحنى (AUC)، ذلك الرسم في رقم واحد مستقل عن العتبة. ويعود الاسم إلى هندسة الرادار في الحرب العالمية الثانية، حيث قاس مدى قدرة مشغّلي أجهزة استقبال الرادار على تمييز طائرات العدو من الضوضاء، ثم انتشرت الطريقة إلى الطب وعلم النفس والتعلم الآلي (ML).
كيفية إنشاء منحنى ROC#
تأتي كل نقطة على المنحنى من مصفوفة الالتباس المحسوبة عند عتبة واحدة:
- معدل الإيجابيات الحقيقية (TPR)، ويُسمى أيضًا الاستدعاء أو الحساسية: TP / (TP + FN)، أي نسبة الإيجابيات الفعلية التي يحددها النموذج.
- معدل الإيجابيات الكاذبة (FPR): FP / (FP + TN)، أي نسبة السلبيات الفعلية التي يصنفها النموذج خطأً على أنها إيجابية. ويساوي FPR واحدًا ناقص النوعية.
يؤدي خفض العتبة تدريجيًا من قيمة مرتفعة إلى تتبع المنحنى من (0, 0)، حيث لا يُصنَّف شيء، إلى (1, 1)، حيث يُصنَّف كل شيء. يمر المصنّف الذي يرتب كل إيجابي فوق كل سلبي بالزاوية العلوية اليسرى، بينما يتبع النموذج الذي يخمّن عشوائيًا القطر، ويعني وقوع المنحنى أسفل القطر أن الدرجات معكوسة. تساوي AUC احتمال حصول إيجابي مختار عشوائيًا على درجة أعلى من سلبي مختار عشوائيًا، لذا تعني القيمة 0.5 أداءً عشوائيًا، وتعني 1.0 فصلًا مثاليًا. يتطلب إنشاء المنحنى درجات مستمرة، مثل الاحتمالات المتوقعة أو قيم الثقة، لأن التسميات الثنائية 0/1 لا تعطي سوى نقطة واحدة. يدرّب المثال التالي مُصنِّف الانحدار اللوجستي على مجموعة بيانات غير متوازنة، ويحسب منحناه باستخدام الدالة roc_curve في scikit-learn:
import numpy as np
from sklearn.datasets import make_classification
from sklearn.linear_model import LogisticRegression
from sklearn.metrics import roc_auc_score, roc_curve
from sklearn.model_selection import train_test_split
# Binary task where 10% of samples are positive
X, y = make_classification(n_samples=5000, weights=[0.9], class_sep=0.8, random_state=0)
X_train, X_test, y_train, y_test = train_test_split(X, y, stratify=y, random_state=0)
# ROC analysis needs continuous scores, not hard 0/1 predictions
scores = LogisticRegression().fit(X_train, y_train).predict_proba(X_test)[:, 1]
fpr, tpr, thresholds = roc_curve(y_test, scores)
print(f"AUC: {roc_auc_score(y_test, scores):.3f}")
# Each threshold is one point on the curve: higher recall costs more false alarms
for target in (0.80, 0.95):
i = np.argmax(tpr >= target) # first point that reaches the target TPR
print(f"Threshold {thresholds[i]:.2f}: TPR {tpr[i]:.2f}, FPR {fpr[i]:.2f}")يحقق النموذج قيمة AUC تبلغ 0.963. عند عتبة 0.44، يكتشف 82% من الإيجابيات مع FPR قدره 0.01، بينما يتطلب الوصول إلى استدعاء بنسبة 95% خفض العتبة إلى 0.02، حيث يقفز FPR إلى 0.26. وفي هذه العينة الاختبارية التي تضم 130 حالة إيجابية و1,120 حالة سلبية، يكلف اكتشاف 18 حالة إيجابية إضافية 279 إنذارًا كاذبًا إضافيًا.
اختيار نقطة التشغيل#
يوضح المنحنى كلفة كل عتبة، ويحدد التطبيق الكلفة المقبولة:
- الفحص الطبي: تفويت ورم أعلى كلفة بكثير من إجراء فحص متابعة، لذا تعمل أدوات الفحص عند نقطة مرتفعة لمعدل الإيجابيات الحقيقية، وتقبل مزيدًا من الإيجابيات الكاذبة ليراجعها أطباء الأشعة.
- كشف الاحتيال: كل دفعة مشروعة تُحظر تسبب إحباطًا للعميل، لذا تختار البنوك نقطة تكشف معظم حالات الاحتيال مع إبقاء FPR عند مستوى تستطيع فرق المراجعة والعملاء تحمّله.
- تساوي التكاليف: عندما تتساوى كلفة الخطأين، تحدد إحصائية J ليوودن، أي TPR ناقص FPR، النقطة الأبعد فوق القطر.
تعيد نماذج التصنيف في Ultralytics YOLO26 احتمالًا لكل فئة عبر results[0].probs.data، وهي الدرجات المستمرة التي يتطلبها تحليل ROC؛ لذا فإن جمع احتمالات فئة واحدة على مجموعة تحقق موسومة ينتج منحنى ROC لتلك الفئة مقابل باقي الفئات، مع عتبة مختارة وفق تكاليف النشر.
منحنى ROC مقارنةً بالأدوات ذات الصلة#
يرسم منحنى الدقة-الاستدعاء الدقة مقابل الاستدعاء بدلًا من TPR مقابل FPR. ولأن TPR وFPR يُحسبان كلٌّ ضمن فئة واحدة، يبقى منحنى ROC كما هو عندما تصبح الإيجابيات أندر، بينما تنخفض الدقة. وعندما تكون الإيجابيات نادرة، كما في فحص الاحتيال أو اكتشاف الحالات الشاذة، قد يؤدي FPR منخفض إلى إنذارات كاذبة أكثر من الاكتشافات الصحيحة، وقد وجدت دراسة في PLOS ONE حول مجموعات البيانات غير المتوازنة أن مخططات الدقة والاستدعاء أكثر إفادة في هذه الحالة. يُقيَّم اكتشاف الكائنات باستخدام منحنيات الدقة والاستدعاء ومتوسط الدقة (mAP) لسبب مشابه: مناطق الخلفية التي كان يمكن أن تُحسب سلبيات حقيقية غير محدودة، لذا لا يملك FPR مقامًا ثابتًا.
- الدقة ودرجة F1: رقمان منفردان يُقاسان عند عتبة واحدة، بينما يلخص منحنى ROC وقيمة AUC جميع العتبات.
- تصنيف الصور متعدد الفئات: تحصل كل فئة على منحنى ROC لها مقابل باقي الفئات، ويُحسب متوسط قيم AUC لكل فئة في درجة كلية أو موزونة بحسب الانتشار، وتحسبها الدالة
roc_auc_scoreفي scikit-learn باستخدامmulti_class="ovr".










