الإحصاء الحيويبايثونتعلم الآلةعلم البيانات

كيفية رسم منحنى ROC في بايثون (خطوة بخطوة)

دليل أكاديمي شامل يشرح خطوة بخطوة كيفية رسم وتفسير منحنى خصائص تشغيل المستقبِل (ROC Curve) وحساب قيمة AUC في لغة بايثون باستخدام Scikit-Learn وMatplotlib.

تاريخ النشر

يُمثّل تقييم أداء خوارزميات التعلّم الآلي والنماذج الإحصائية التنبؤية أحد أكثر التحديات المنهجية دقة وأهمية في مجالات علوم البيانات والذكاء الاصطناعي التطبيقي. فعند التعامل مع مهام التصنيف الثنائي (Binary Classification)، تفقد المقاييس الإحصائية البسيطة والتقليدية—وعلى رأسها مقياس الدقة العامة (Accuracy)—فاعليتها وجدواها التحليلية بصورة حادة، ولا سيما عند مواجهة مجموعات بيانات غير متوازنة (Imbalanced Datasets) أو عندما تتباين التكاليف المترتبة على ارتكاب أخطاء التصنيف النوعية تبايناً جذرياً. في مثل هذه البيئات المعقدة، تبرز الحاجة الماسة إلى أدوات تقييمية معيارية متعددة الأبعاد تستطيع سبر أغوار القدرة التمييزية للمصنف بصورة مستقلة تماماً عن عتبات اتخاذ القرار الثابتة.

يبرز منحنى خصائص تشغيل المستقبِل (Receiver Operating Characteristic Curve)، المعروف اختصاراً بـ منحنى ROC، بوصفه الأداة الذهبية والمعيار الرياضي الأكثر رصانة لتقييم وفهم وتصوير سلوك مصنفات التعلم الآلي عبر مختلف مجالات الاحتمال وعتبات الفصل. لا يقتصر دور هذا المنحنى البياني على مجرد رسم بصري مجرد لأداء الخوارزمية، بل يمتد ليكون إطاراً تكاملياً يتيح للمحللين والباحثين قياس التوازن والمقايضة الجوهرية بين رصد الحالات الإيجابية الحقيقية وتجنب الوقوع في فخ الإنذارات الكاذبة، فضلاً عن تقديم مقياس كمي موحد يُعرف بالمساحة تحت المنحنى (AUC-ROC) لتقييم الكفاءة العامة للمصنف.

يهدف هذا الدليل المرجعي الموسع إلى تقديم معالجة نظرية وتطبيقية شاملة لكيفية بناء، وتوليد، وحساب، ورسم منحنيات ROC وتفسير مقاييس AUC المرتبطة بها في لغة البرمجة بايثون (Python) خطوة بخطوة. سنستعرض الأسس الرياضية والنظرية الكامنة وراء هذا المنحنى، مروراً بكتابة الشيفرات البرمجية التفصيلية باستخدام مكتبات الحوسبة العلمية مثل Scikit-Learn وMatplotlib، وصولاً إلى استراتيجيات تحديد عتبات القطع المثلى سريرياً وإحصائياً، ومقارنة النماذج المتعددة، والتعامل مع التصنيفات متعددة الفئات وتطبيقات القياس النفسي والتشخيص السريري المتقدم.

1. مقدمة نظرية: ما هو منحنى خصائص تشغيل المستقبِل (ROC Curve)؟

1.1 المفهوم الرياضي والتاريخي لمنحنى ROC

تعود الجذور التاريخية لتطوير منحنى خصائص تشغيل المستقبِل (ROC) إلى ذروة الحرب العالمية الثانية، وتحديداً في أعقاب الهجوم على بيرل هاربر في أوائل أربعينيات القرن العشرين. في ذلك الوقت، واجه مهندسو الرادار والاتصالات البريطانيون والأمريكيون معضلة تقنية بالغة الخطورة تمثلت في صعوبة التمييز بين إشارات الرادار المنعكسة عن طائرات العدو الحربية وتلك الناتجة عن التشويش والضوضاء الطبيعية، كأسراب الطيور أو الاضطرابات الجوية. طُوّرت نظرية كشف الإشارة (Signal Detection Theory) لمعايرة قدرة مشغلي أجهزة الرادار على اتخاذ قرارات دقيقة؛ ومن هنا صُمم المنحنى لتقييم “خصائص تشغيل المستقبِل” البشري أو التقني تحت ظروف عدم اليقين والتشويش المكثف.

مع تطور مناهج البحث العلمي والإحصاء الاستدلالي في العقود اللاحقة، انتقلت هذه المنهجية الرياضية الرصينة من نطاق الهندسة اللاسلكية العسكرية إلى مجالات الإحصاء الحيوي والتشخيص الطبي في سبعينيات القرن العشرين، حيث استخدمها باحثو الأوبئة لتقييم مدى دقة التحاليل المخبرية والأشعة السينية. وسرعان ما تبناها علماء النفس والقياس النفسي السريري لتقييم الاختبارات السلوكية والتشخيصية، إلى أن أصبحت في تسعينيات القرن الماضي وحاضرنا الراهن حجر الزاوية الأساسي في تقييم نماذج تعلم الآلة والتعلم العميق، ولا سيما بعد الأبحاث التأسيسية التي نشرها باحثون بارزون مثل توم فوسيت (Tom Fawcett).

من الناحية الرياضية المجردة، يُعرَّف منحنى ROC بأنه دالة هندسية ثنائية الأبعاد تصوّر علاقة المقايضة المستمرة (Trade-off) بين معدل الإيجابيات الحقيقية المُمثل على المحور الرأسي (Y-axis) ومعدل الإيجابيات الكاذبة المُمثل على المحور الأفقي (X-axis)، وذلك عبر توليد نقاط إحداثية متتابعة تنتج عن التغيير التدريجي والمستمر لعتبة اتخاذ القرار التمييزية (Decision Threshold) عبر كامل المجال الاحتمالي المغلق [0, 1]. يتيح هذا التمثيل الرياضي عزل الأداء الجوهري لنظام الكشف عن تأثير العتبة التقديرية المفروضة عليه مسبقاً.

1.2 الحساسية (Sensitivity) ومعدل الإيجابيات الحقيقية (TPR)

تُعد الحساسية الإحصائية (Sensitivity)، والتي تتطابق تماماً في سياق تعلم الآلة مع مقياس الاستدعاء (Recall) ومعدل الإيجابيات الحقيقية (True Positive Rate – TPR)، المقياس الأساسي لقدرة المصنف على الرصد والتقاط العينات المنتمية إلى الفئة الإيجابية المستهدفة دون إغفالها. يتم التعبير عن هذا المقياس رياضياً من خلال المعادلة التالية:

TPR = Sensitivity = TP / (TP + FN)

حيث تُمثل TP عدد الحالات الإيجابية الحقيقية (True Positives) التي صنفها النموذج بنجاح كحالات إيجابية، بينما تُمثل FN عدد الحالات السلبية الكاذبة (False Negatives)، وهي الحالات الإيجابية في الواقع ولكن النموذج أخطأ وصنفها كحالات سلبية. يعكس هذا الكسر النسبة المئوية من مجمل الحالات الإيجابية الكلية الموجودة فعلياً في مجتمع الدراسة التي تمكن النموذج من تشخيصها والتنبؤ بها بصورة صائبة.

يكتسب مقياس الحساسية أهمية محورية واستثنائية في التطبيقات السريرية والتشخيصية الطبية والنفسية؛ ففي تشخيص الأمراض الخطيرة، مثل الأورام السرطانية الخبيثة أو تقدير مخاطر الانتحار والاضطرابات السلوكية الحادة، يكون الهدف الأسمى لمنظومة الرعاية الصحية هو رفع الحساسية إلى أقصى حد ممكن لتقليل السلبيات الكاذبة (FN) إلى الصفر أو ما يقاربه. إن تفويت تشخيص مريض مصاب بمرض عضال يترتب عليه تكلفة بشرية وصحية كارثية لا يمكن مقارنتها بتكلفة إجراء فحص تأكيدي إضافي ناتج عن إنذار كاذب.

1.3 النوعية (Specificity) ومعدل الإيجابيات الكاذبة (FPR)

في المقابل التناظري للحساسية، تُعبر النوعية (Specificity)، أو ما يُعرف بمعدل السلبيات الحقيقية (True Negative Rate – TNR)، عن كفاءة النموذج التنبؤي في التعرف الدقيق على العينات المنتمية إلى الفئة السلبية واستبعادها بشكل صحيح. تُحسب النوعية وفق المعادلة الرياضية:

Specificity = TNR = TN / (TN + FP)

حيث تُشير TN إلى السلبيات الحقيقية (True Negatives) المصنفة بدقة، وتُشير FP إلى الإيجابيات الكاذبة (False Positives)، وهي العينات السلبية فعلياً والتي اعتبرها النموذج إيجابية عن طريق الخطأ. ومن هذا المنطلق، يُعرَّف معدل الإيجابيات الكاذبة (False Positive Rate – FPR)، والذي يُشكل الإحداثي الأفقي لمنحنى ROC، بأنه المكمل الحسابي للنوعية:

FPR = 1 – Specificity = FP / (TN + FP)

يُمثل معدل الإيجابيات الكاذبة النسبة المئوية للحالات السلبية التي صُنفت خطأً على أنها إيجابية من إجمالي كافة الحالات السلبية الفعلية. يؤدي انخفاض النوعية وارتفاع FPR إلى توليد “إنذارات كاذبة” متكررة، مما ينتج عنه أعباء مادية وتشغيلية باهظة في سياقات الأعمال (مثل تجميد الحسابات البنكية لعملاء أبرياء في أنظمة كشف الاحتيال المالي)، فضلاً عن إثارة القلق النفسي والاضطراب العاطفي لدى المرضى الأصحاء الذين يتلقون نتائج تشخيصية إيجابية خاطئة تفرض عليهم الخضوع لإجراءات علاجية تداخلية غير ضرورية.

1.4 أهمية منحنى ROC في تقييم نماذج التصنيف الثنائي

تتضح الأهمية الاستراتيجية لمنحنى ROC عند مقارنته بالمقاييس السطحية أحادية البعد مثل مقياس الدقة الكلية (Accuracy). تعاني الدقة الكلية من خلل بنيوي قاتل يُعرف باسم “مفارقة الدقة” (Accuracy Paradox)؛ فعلى سبيل المثال، إذا كانت مجموعة البيانات تحتوي على 99% من العينات السلبية و1% فقط من العينات الإيجابية (كما هو شائع في الكشف عن الاختراقات السيبرانية أو الأمراض النادرة)، فإن النموذج الساذج الذي يتنبأ بالسلبية لجميع العينات دون استثناء سيحقق دقة ظاهرية تبلغ 99%، على الرغم من فشله التام في التعرف على أي حالة إيجابية واحدة، مما يجعله نموذجاً عديماً للقيمة التطبيقية.

يتجاوز منحنى ROC هذا القصور الجوهري من خلال فحص أداء المصنف عبر نطاق كامل ومستمر من عتبات اتخاذ القرار يمتد من 0.0 إلى 1.0، بدلاً من الارتهان لعتبة تصنيف افتراضية واحدة جامدة (غالباً ما تكون 0.5). يتيح ذلك للمهندسين والباحثين معاينة السلوك الديناميكي للنموذج واختيار نقطة التشغيل المثالية التي توازن بدقة بين المخاطر والأرباح وفقاً لمتطلبات التطبيق الواقعي المحدد.

علاوة على ذلك، يتميز منحنى ROC بخاصية رياضية بالغة الأهمية وهي استقلاليته التامة عن معدل انتشار الفئة (Class Prevalence) في عينات الدراسة؛ فالإحداثيان اللذان يعتمد عليهما المنحنى (TPR و FPR) يُحسبان بصورة معزولة ومستقلة داخل مجتمع الفئة الإيجابية ومجتمع الفئة السلبية على التوالي. تضمن هذه الخاصية بقاء شكل المنحنى ثابتاً وموثوقاً حتى لو تغيرت نسبة الحالات الإيجابية إلى السلبية بين بيئة التطوير وبيئة الإنتاج الواقعية، مما يمنحه تفوقاً منهجياً على مقاييس أخرى تتأثر مباشرة بنسب الفئات.

2. إعداد بيئة العمل البرمجية واستيراد المكتبات الأساسية في بايثون

2.1 تثبيت وإعداد حزم بايثون الأساسية للبيانات والتعلم الآلي

لبناء بيئة تطوير متكاملة وقوية قادرة على معالجة البيانات وتدريب النماذج وتوليد الرسوم البيانية بدقة فائقة، يتعين تثبيت مجموعة الحزم العلمية القياسية في لغة بايثون. يُوصى بشدة بإنشاء بيئة عمل افتراضية معزولة (Virtual Environment) باستخدام أدوات مثل venv أو conda، وذلك لتجنب تعارض إصدارات المكتبات وضمان قابلية تكرار التجارب العلمية بدقة متناهية.

يمكن تثبيت المكتبات الأساسية المطلوبة من خلال تنفيذ الأمر التالي عبر موجه الأوامر:

pip install numpy pandas scikit-learn matplotlib seaborn jupyterlab

تتولى مكتبة NumPy إجراء العمليات الحسابية المصفوفية السريعة والتحويلات الرياضية، في حين توفر حزمة Pandas هياكل بيانات متقدمة للتعامل مع الجداول والمتغيرات الإحصائية. وتُعد مكتبة Scikit-Learn الحزمة البرمجية الرائدة عالمياً في تطبيق خوارزميات التعلم الآلي واستخراج مقاييس التقييم الإحصائية، بينما تتكامل مكتبتا Matplotlib و Seaborn لإنتاج التصورات البيانية التفاعلية والنقية بجودة النشر الأكاديمي.

2.2 استيراد الدوال البرمجية المحددة للتحليل

بعد اكتمال التثبيت، ننتقل إلى مرحلة استيراد الفئات والدوال المتخصصة من الوحدات الفرعية للحزم المعنية داخل بيئة الشيفرة المصدرية. يتطلب تحليل منحنيات ROC استدعاء وحدات تدريب النماذج ووحدات قياس الأداء الرياضي:

من مكتبة sklearn.model_selection، نستورد دالة train_test_split المسؤولة عن تجزئة البيانات إلى عينات تدريب واختبار متوازنة. ومن وحدة sklearn.linear_model، نستورد مصنف LogisticRegression لبناء النموذج الأساسي، كما نستورد StandardScaler من sklearn.preprocessing لتوحيد المقاييس الإحصائية للبيانات.

أما من وحدة المقاييس sklearn.metrics، فإننا نحتاج إلى استيراد حزمة من الأدوات الجوهرية تشمل دالة حساب الإحداثيات roc_curve، ودالة حساب المساحة الإجمالية roc_auc_score و auc، بالإضافة إلى الواجهات الرسومية الحديثة مثل RocCurveDisplay. كما نستورد وحدة الرسم الأساسية matplotlib.pyplot تحت الاسم البرمجي الشائع plt للتحكم الدقيق في خصائص المخطط الهندسي.

2.3 ضبط التنسيقات الرسومية ودفاتر جوبيتر

لضمان عرض المخططات البيانية بوضوح بصري فائق داخل دفاتر جوبيتر (Jupyter Notebooks)، يُنصح بتضمين الأمر السحري التالي في الخلية الأولى من الدفتر:

%matplotlib inline

يضمن هذا الإيعاز تصيير وطباعة كافة الرسومات والمخططات بصورة مدمجة مباشرة أسفل خلايا التنفيذ البرمجية. بالإضافة إلى ذلك، ينبغي ضبط المعايير الجمالية والفنية لبيئة الرسم من خلال تعديل إعدادات plt.rcParams البرمجية، وتحديد حجم الشكل الافتراضي (Figure Size) وكثافة النقاط في البوصة الواحدة (DPI) لضمان وضوح الخطوط ودقة تمثيل المنحنيات في التقارير الأكاديمية.

ومن الركائز المنهجية الحاسمة في الأبحاث التطبيقية تحديد البذور العشوائية (Random Seeds) عبر تهيئة الدالة np.random.seed() وتثبيت وسيط random_state في كافة الدوال التوليدية؛ يضمن هذا الإجراء إمكانية إعادة إنتاج نفس النتائج الإحصائية وتوليد ذات المنحنيات البيانية بدقة متطابقة عند إعادة تشغيل الشيفرة في أوقات أو على أجهزة أخرى.

3. تجهيز واستكشاف مجموعة البيانات وبناء نموذج الانحدار اللوجستي

3.1 تحميل البيانات وتنسيق المتغيرات التابعة والمستقلة

تبدأ الخطوة العملية الأولى بتجهيز مجموعة بيانات ثنائية التصنيف تمتاز بوجود علاقات غير خطية وتوزيعات معقدة لاختبار قدرة المنحنى على تصوير الأداء بدقة. يمكن استخدام مجموعات بيانات سريرية واقعية (مثل بيانات الكشف عن سرطان الثدي من معهد ويسكونسن المتاحة في Scikit-Learn)، أو توليد مجموعة بيانات اصطناعية مضبوطة الخصائص عبر دالة make_classification.

يتم فصل البيانات بدقة إلى مصفوفة الميزات التفسيرية المستقلة (Feature Matrix) والتي نرمز لها رياضياً بـ X، ومتجه المتغير التابع الثنائي المستهدف (Target Vector) ونرمز له بـ y، بحيث يأخذ المتغير المستهدف القيمة 1 لتمثيل الفئة الإيجابية، والقيمة 0 لتمثيل الفئة السلبية. تتطلب الممارسة المنهجية فحص مصفوفة البيانات للتأكد من خلوها من القيم المفقودة (Missing Values)، وتطبيق المعايرة الإحصائية (Standardization) للمتغيرات الرقمية باستخدام StandardScaler لطرح المتوسط الحسابي وقسمة الميزات على انحرافها المعياري، مما يضمن تقارب خوارزميات التحسين العددي بكفاءة وسرعة.

كما يتعين استكشاف التوزيع النسبي للفئات (Class Distribution) لتحديد ما إذا كانت مجموعة البيانات متوازنة أو تعاني من خلل تركيبي، حيث يُلقي هذا التوزيع بظلاله المباشرة على مرحلة التقسيم المنهجي وتفسير النتائج اللاحقة.

3.2 تقسيم البيانات إلى مجموعات تدريب واختبار

لتجنب ظاهرة فرط التخصيص (Overfitting) وضمان تقييم النموذج بناءً على قدرته على التعميم على بيانات غير مرئية مسبقاً، يجب تجزئة مجموعة البيانات الكلية إلى مجموعتين فرعيتين منفصلتين تماماً: مجموعة التدريب (Training Set) لضبط معاملات النموذج الإحصائي، ومجموعة الاختبار (Testing Set) المخصصة حصرياً لتقييم الأداء ورسم منحنى ROC.

يتم تطبيق التقسيم بنسب معيارية شائعة، مثل تخصيص 70% أو 80% للتدريب مقابل 30% أو 20% للاختبار، مع التأكيد الصارم على تفعيل خيار التقسيم الطبقي الموزون عبر تمرير الوسيط stratify=y داخل دالة train_test_split. يضمن التقسيم الطبقي الحفاظ على نفس النسبة المئوية الدقيقة لتوزيع الحالات الإيجابية والسلبية عبر مصفوفتي التدريب والاختبار، مما يمنع حدوث انحياز في التقييم نتيجة تركز الفئات النادرة في إحدى المجموعتين دون الأخرى.

عقب عملية التقسيم، يُنصح بطباعة وفحص أبعاد المصفوفات الناتجة (عبر خاصية shape) للتحقق من سلامة البنية الهيكلية للبيانات قبل الانتقال إلى مرحلة النمذجة الإحصائية.

3.3 تدريب نموذج الانحدار اللوجستي (Model Fitting)

يُعد نموذج الانحدار اللوجستي (Logistic Regression) النموذج المعياري المفضل لشرح وتطبيق منحنيات ROC، نظراً لطبيعته الاحتمالية الأصيلة وقدرته الرياضية على توليد تقديرات احتمالية ناعمة ومستمرة بدلاً من الاقتصار على المخرجات الثنائية الحدية. يقوم النموذج بربط التركيبة الخطية للميزات المستقلة بالدالة اللوجستية السيجمويدية (Sigmoid Function) لحساب احتمال انتماء العينة للفئة الإيجابية.

تتم تهيئة كائن المصنف عبر استدعاء LogisticRegression() مع تحديد خوارزمية التحسين العددي المناسبة (مثل solver='lbfgs') وضبط معامل التنظيم الإحصائي (Regularization Parameter C)، مع تثبيت البذرة العشوائية random_state=42. بعد ذلك، يتم تدريب النموذج عبر تمرير مصفوفات التدريب إلى الدالة البرمجية:

model.fit(X_train, y_train)

تقوم الخوارزمية بحساب المعاملات التقديرية (Beta Weights) التي تعظم دالة الأرجحية القصوى (Maximum Likelihood Estimation). ويجب التحقق من تقارب النموذج وعدم ظهور تحذيرات تفيد بعدم بلوغ نقطة الحل الأمثل، مما يؤكد جاهزية النموذج لإنتاج تنبؤات احتمالية موثوقة لمجموعة الاختبار المستقلة.

4. استخراج الاحتمالات التنبؤية (Predicting Probabilities)

4.1 الفرق الجوهري بين predict و predict_proba

يقع الكثير من المبتدئين في خطأ منهجي فادح عند محاولة تقييم مصنفات التعلم الآلي، وهو الخلط بين الدالتين البرمجيتين الأساسيتين: predict() و predict_proba() في Scikit-Learn. يعتمد فهم هذا الفارق على إدراك آليات عمل المصنفات الإحصائية الاحتمالية.

تقوم الدالة predict() بإرجاع مخرجات تصنيفية قطعية متقطعة (Discrete Class Labels مثل 0 أو 1). تفترض هذه الدالة ضمناً وجود عتبة قرار حتمية ثابتة ومحددة سلفاً عند القيمة 0.5؛ فإذا كان الاحتمال المحسوب للعينة 0.501 يُصنف مباشرة كـ 1، وإذا كان 0.499 يُصنف كـ 0. يؤدي الاعتماد على هذه المخرجات القطعية إلى تدمير كافة المعلومات المتعلقة بدرجة يقين النموذج، ويجعل من المستحيل حساب تغير الحساسية والنوعية عبر العتبات المختلفة.

في المقابل، تقوم دالة predict_proba() بتوليد مصفوفة احتمالية مستمرة ثنائية الأبعاد، تتضمن درجات الثقة أو الاحتمالات المقدرة لكل فئة من الفئات المستهدفة والتي تنحصر قيمها رياضياً داخل النطاق المستمر [0.0, 1.0]. ونظراً لأن منحنى ROC يعتمد في جوهره على تتبع التغيرات التدريجية في الإيجابيات الحقيقية والكاذبة عند مسح مئات العتبات التمييزية المحتملة، فإن استخدام مصفوفة الاحتمالات المستمرة الناتجة عن predict_proba() يُعد شرطاً رياضياً وإجرائياً لا غنى عنه لتوليد المنحنى.

4.2 استخراج احتمالات الفئة الإيجابية وتحليل توزيعها

عند تنفيذ الأمر البرمجي probabilities = model.predict_proba(X_test)، تُرجع الدالة مصفوفة ذات عمودين لكل عينة في مجموعة الاختبار؛ يحتوي العمود الأول (الفهرس 0) على الاحتمال المقدر لانتماء العينة للفئة السلبية P(Y=0|X)، بينما يحتوي العمود الثاني (الفهرس 1) على الاحتمال المقدر لانتماء العينة للفئة الإيجابية P(Y=1|X). وبما أن مجموع الاحتمالين لعينة واحدة يساوي دائماً 1.0، فإننا نعزل ونستخرج العمود الثاني فقط لاستخدامه كمدخل أساسي لحساب المنحنى:

y_pred_proba = model.predict_proba(X_test)[:, 1]

تقتضي الممارسة التحليلية الرصينة فحص التوزيع التكراري لهذه الاحتمالات المستخرجة بصرياً باستخدام المدرجات التكرارية (Histograms) أو منحنيات كثافة النواة (KDE Plots). يتيح هذا الفحص التقييمي للباحث مراقبة مدى قدرة النموذج على الفصل بين الفئات؛ فالنموذج عالي الجودة يولد احتمالات متكتلة بالقرب من الصفر للحالات السلبية الحقيقية وتوزيعات متكتلة بالقرب من الواحد الصحيح للحالات الإيجابية الحقيقية، بينما يتسم النموذج الضعيف بوجود تداخل وتراكم واسع للاحتمالات في المنطقة الوسطى الحرجة حول 0.5.

4.3 تأثير عتبات اتخاذ القرار (Decision Thresholds) على التصنيف

تُعد عتبة اتخاذ القرار (Decision Threshold) النقطة الفاصلة التي تحول الاحتمال المستمر إلى قرار تصنيفي نهائي. إذا تم ضبط العتبة عند قيمة منخفضة للغاية وليكن 0.1، فإن النموذج سيعتبر أي عينة يتجاوز احتمالها 10% حالة إيجابية؛ ينتج عن هذا التوجه الليبرالي والمتساهل رصد الغالبية الساحقة من الحالات الإيجابية الحقيقية مما يرفع الحساسية (TPR) إلى مستويات تقارب 100%، ولكنه في الوقت ذاته يفتح الباب واسعاً أمام دخول عدد هائل من الحالات السلبية بالخطأ، مما يرفع معدل الإيجابيات الكاذبة (FPR) ويدمر نوعية المصنف.

وعلى العكس من ذلك، إذا تم رفع العتبة إلى قيمة محافظة وصارمة مثل 0.9، فإن النموذج لن يصنف العينة كإيجابية إلا إذا كان شديد التيقن منها، مما يؤدي إلى هبوط معدل الإيجابيات الكاذبة إلى الصفر تقريباً وتحقيق نوعية فائقة، غير أن ذلك يأتي على حساب إغفال وتفويت أعداد كبيرة من الحالات الإيجابية الحقيقية، مما يؤدي إلى هبوط حاد في الحساسية وزيادة السلبيات الكاذبة.

تتحرك مصفوفة الارتباك (Confusion Matrix) ديناميكياً مع كل تغيير يطرأ على قيمة هذه العتبة بين 0 و 1؛ وتتغير قيم عناصرها الأربعة (TP, FP, TN, FN) بصورة مستمرة. ويكمن الإنجاز التحليلي لمنحنى ROC في كونه الإطار الرياضي المتكامل الذي يتتبع بدقة ويسجل هذه المقايضة المتبادلة عبر كافة العتبات الممكنة دفعة واحدة.

5. حساب إحداثيات منحنى ROC باستخدام مكتبة Scikit-Learn

5.1 استدعاء وتطبيق دالة metrics.roc_curve

توفر مكتبة Scikit-Learn خوارزمية عالية التحسين والكفاءة الحسابية لحساب كافة النقاط الهندسية اللازمة لتشكيل المنحنى عبر الدالة المتخصصة roc_curve الموجودة داخل الوحدة sklearn.metrics. يتم استدعاء الدالة بتمرير متجه القيم الحقيقية الفعلية y_test ومتجه الاحتمالات التنبؤية للفئة الإيجابية y_pred_proba:

fpr, tpr, thresholds = roc_curve(y_test, y_pred_proba)

تقوم الدالة بتنفيذ خوارزمية فرز فعالة تعتمد على ترتيب مصفوفة الاحتمالات التنبؤية تنازلياً، ثم تقييم التغيرات في الإيجابيات الحقيقية والكاذبة عند كل انتقال بين قيم الاحتمالات، مما يضمن سرعة المعالجة حتى عند التعامل مع ملايين العينات التنبؤية.

كما تتيح الدالة وسيطاً اختيارياً مهماً وهو pos_label لتحديد القيمة الصريحة للفئة الإيجابية في حال لم تكن البيانات مرمزّة بالأرقام الثنائية القياسية (0 و 1)، مما يوفر مرونة تشغيلية عالية للمحلل في التعامل مع المتغيرات النصية أو الفئوية دون الحاجة إلى معالجة مسبقة معقدة.

5.2 هيكل وفهم مصفوفات FPR و TPR وسلسلة العتبات المحسوبة

تُرجع دالة roc_curve ثلاثة مصفوفات رقمية متطابقة في البعد الهندسي والتناسق الرياضي، وهي:

  • مصفوفة معدل الإيجابيات الكاذبة (fpr): مصفوفة أحادية البعد تحتوي على قيم الإحداثي الأفقي المحسوبة عند كل عتبة، وتبدأ قيمها دائماً من الصفر وتتزايد بشكل رتيب حتى تصل إلى الواحد الصحيح.
  • مصفوفة معدل الإيجابيات الحقيقية (tpr): مصفوفة أحادية البعد تحتوي على قيم الإحداثي الرأسي المقابلة لكل نقطة، وتبدأ كذلك من الصفر وتتصاعد تدريجياً نحو الواحد الصحيح.
  • مصفوفة عتبات اتخاذ القرار (thresholds): مصفوفة رقمية تتضمن قيم الاحتمالات الحرجة التي استُخدمت لتقسيم التنبؤات وتوليد الإحداثيات السابقة، حيث تُرتّب هذه القيم ترتيباً تنازلياً من أعلى احتمال مقدر إلى أدنى قيمة. تجدر الإشارة إلى أن الدالة تضيف قيمة عتبة اصطناعية أولى تفوق أقصى احتمال (مثل max(y_pred_proba) + 1) لتمثيل نقطة البداية الصفرية للمنحنى.

يمكن دمج هذه المصفوفات الثلاث برمجياً في جدول بيانات منظم باستخدام pandas.DataFrame لمعاينة القيم وتدقيق سلوك النموذج عند كل عتبة رقمية بدقة رياضية متناهية.

5.3 تفسير العلاقة التبادلية الرياضية بين النقاط المحسوبة

تبدأ الرحلة الهندسية للمنحنى دائماً عند النقطة الأصلية المتموضعة في الزاوية السفلية اليسرى ذات الإحداثيات (0, 0). تمثل هذه النقطة عتبة اتخاذ قرار قصوى تتجاوز 1.0، حيث يفشل أي احتمال في تجاوزها؛ وبالتالي، يصنف النموذج كافة العينات دون استثناء على أنها حالات سلبية، مما يعني انعدام الإيجابيات الكاذبة تماماً (FPR = 0)، ولكن في المقابل تنعدم الإيجابيات الحقيقية أيضاً (TPR = 0).

مع خفض قيمة العتبة تدريجياً، تبدأ العينات ذات الاحتمالات العالية في التحول إلى تصنيفات إيجابية؛ فإذا كان المصنف يمتلك قدرة تمييزية فائقة، فإن الحالات الإيجابية الحقيقية ستتجاوز العتبة أولاً، مما يدفع المنحنى للصعود عمودياً وحاداً نحو الأعلى رافعاً قيمة TPR بسرعة فائقة دون تحريك يذكر لقيمة FPR نحو اليمين.

وعندما تنخفض العتبة إلى الصفر تماماً، نصل حتماً إلى النقطة النهائية المستقرة في الزاوية العلوية اليمنى ذات الإحداثيات (1, 1)، حيث تصبح العتبة متساهلة للغاية وتعتبر كافة العينات حالات إيجابية حتماً، مما يجعل TPR يصل إلى حده الأقصى 1.0 مع وصول FPR بالتوازي إلى أسوأ مستوياته عند 1.0. يعكس المسار الهندسي الذي يسلكه المنحنى بين هاتين النقطتين الطرفيتين الجودة الشاملة للقدرة التمييزية للنموذج الإحصائي.

6. رسم منحنى ROC خطوة بخطوة باستخدام مكتبة Matplotlib

6.1 إنشاء المخطط الأساسي وتحديد المحاور

لبناء التمثيل المرئي لمنحنى ROC بصورة احترافية وبجودة رسومية فائقة، نستخدم واجهة الكائنات الموجهة (Object-Oriented Interface) في مكتبة Matplotlib. تبدأ العملية بتهيئة كائن الشكل (Figure) وكائن المحاور (Axes) وضبط مساحة الرسم بما يحقق التوازن البصري الأمثل:

يتم استدعاء الدالة fig, ax = plt.subplots(figsize=(8, 6), dpi=100)، والتي تُهيئ مساحة رسم مستطيلة بأبعاد دقيقة ووضوح فوتوغرافي متقدم. بعد ذلك، يتم رسم المنحنى الفعلي عن طريق تمرير مصفوفتي الإحداثيات إلى أمر الرسم:

ax.plot(fpr, tpr, color='#1f77b4', lw=2.5, label='Logistic Regression')

يجب تثبيت حدود المحاور الهندسية بدقة داخل المجال المغلق [0.0, 1.0] باستخدام الدالتين ax.set_xlim([0.0, 1.0]) و ax.set_ylim([0.0, 1.05]) لمنع التمدد التلقائي للمحاور وضمان اتساق المقاييس الهندسية وتماثلها التام، مما يتيح إجراء مقارنات بصرية موضوعية وصحيحة بين مختلف النماذج.

6.2 إضافة خط التخمين العشوائي (Baseline Reference Line)

من العناصر التصميمية والمنهجية التي لا غنى عنها في رسم منحنى ROC هو إدراج “خط الأساس المرجعي” (Baseline) أو ما يُعرف بخط التخمين العشوائي الصرف (Random Classifier). يُرسم هذا الخط كوتر قطري يمتد بزاوية 45 درجة من النقطة السفلية اليسرى (0,0) إلى النقطة العلوية اليمنى (1,1):

ax.plot([0, 1], [0, 1], color='gray', lw=1.5, linestyle='--', label='Random Chance')

يُمثل هذا الخط الرياضي أداء مصنف افتراضي ساذج لا يمتلك أي قدرة تمييزية أو ذكاء تحليلي، حيث يقوم بتخمين الفئات عشوائياً (مثل رمي قطعة نقود غير منحازة)؛ وفي ظل هذا المصنف العشوائي، تتساوى احتمالية إصابة الهدف مع احتمالية ارتكاب إنذار كاذب عند أي عتبة كانت، مما يجعل الحساسية مطابقة تماماً لمعدل الإيجابيات الكاذبة (TPR = FPR) على امتداد الخط بأكمله.

يُعد هذا الخط المرجعي الحد الأدنى الفاصل للأداء المقبول؛ وأي نموذج تنبؤي رصين يجب أن ينحني مساره البياني بشكل ملحوظ نحو الزاوية العلوية اليسرى مبتعداً عن هذا الخط القطري. وإذا انحدر منحنى نموذج ما تحت هذا الخط المرجعي، فإن ذلك يُعد دليلاً قاطعاً على وجود خلل منهجي في ترميز الفئات أو عكس قطبية الاحتمالات التنبؤية.

6.3 تخصيص التصميم الجمالي، التسميات، ووسيلة الإيضاح

يكتمل بناء المخطط البياني بإضافة التفاصيل الإيضاحية والتنسيقات الجمالية الضرورية لتحويل الرسم إلى وثيقة علمية قابلة للنشر والاعتماد الأكاديمي. يتضمن ذلك صياغة تسميات واضحة وكاملة للمحاور الإحداثية لتسهيل القراءة وتجنب الغموض:

ax.set_xlabel('False Positive Rate (1 - Specificity)', fontsize=12, labelpad=10)
ax.set_ylabel('True Positive Rate (Sensitivity)', fontsize=12, labelpad=10)

ويُضاف عنوان رئيسي شامل يصف ماهية النموذج والبيانات المُقيّمة بدقة، مثل ax.set_title('Receiver Operating Characteristic (ROC) Curve', fontsize=14, fontweight='bold', pad=15). كما يتم تفعيل شبكة الخلفية المتقاطعة باستخدام ax.grid(True, linestyle=':', alpha=0.6) لتمكين القارئ من إسقاط وتتبع الإحداثيات الرقمية بسهولة بالغة عبر المحاور.

تُثبت وسيلة الإيضاح (Legend) في موضع استراتيجي لا يحجب البيانات، وعادة ما تُوضع في الزاوية السفلية اليمنى عبر ax.legend(loc='lower right', frameon=True). وأخيراً، يمكن تصدير الشكل بدقة وضوح فائقة بصيغة موجهة أو نقطية عبر الأمر plt.savefig('roc_curve.png', dpi=300, bbox_inches='tight') تمهيداً لإدراجه في التقارير الفنية أو الدوريات الأكاديمية المحكمة.

7. حساب وتفسير المساحة تحت المنحنى (AUC – Area Under Curve)

7.1 المفهوم الرياضي والدلالة الإحصائية لمقياس ROC-AUC

تُعد المساحة المحصورة تحت منحنى خصائص تشغيل المستقبِل (Area Under the ROC Curve)، والمشار إليها اختصاراً بـ AUC أو ROC-AUC، المقياس العددي التلخيصي الأكثر شمولاً لكفاءة المصنف الإحصائي. فبينما يمثل المنحنى سجلاً بيانياً كاملاً لتغير الأداء عبر العتبات، يقوم مقياس AUC بدمج واختزال هذا الأداء الكلي في قيمة رقمية قياسية واحدة تتراوح قيمتها النظرية والرياضية حصراً بين 0.0 و 1.0.

يرتبط مقياس AUC بدلالة احتمالية وإحصائية عميقة ذات صلة وثيقة بنظرية الرتب؛ فهو يطابق رياضياً مقياس اختبار مان-ويتني (Wilcoxon-Mann-Whitney U Statistic). يُمثل AUC الاحتمال الدقيق القائل بأنه إذا اخترنا عشوائياً حالة إيجابية حقيقية وحالة سلبية حقيقية من مجتمع البيانات، فإن النموذج التنبؤي سيمنح الحالة الإيجابية درجة احتمالية أو ترتيباً أعلى من الحالة السلبية:

AUC = P(Score(X_positive) > Score(X_negative))

تُشير قيمة AUC البالغة 0.5 إلى أن النموذج لا يتجاوز كفاءة التخمين العشوائي الأعمى، حيث تتساوى المساحة الواقعة تحت الخط القطري تماماً مع نصف المساحة الإجمالية للمربع الهندسي. في المقابل، تُعبر القيمة 1.0 عن نموذج تصنيفي مثالي وخالٍ تماماً من الأخطاء التمييزية، حيث يستطيع فصل الفئتين فصلاً مطلقاً دون أي تداخل احتمالي.

7.2 حساب AUC برمجياً في بايثون

توفر منظومة Scikit-Learn البرمجية طريقتين مباشرتين لحساب قيمة مقياس AUC بدقة عددية فائقة؛ تختلف كل منهما باختلاف مرحلة التحليل والمدخلات المتوفرة لدى المحلل الإحصائي:

تتمثل الطريقة الأولى، وهي الأكثر استخداماً، في استدعاء دالة roc_auc_score وحساب القيمة مباشرة من مصفوفة التسميات الحقيقية ومصفوفة الاحتمالات التنبؤية المتصلة دون الحاجة لحساب إحداثيات المنحنى مسبقاً:

roc_auc = roc_auc_score(y_test, y_pred_proba)

أما الطريقة الثانية، فتعتمد على الحساب التكاملي الهندسي عبر قاعدة شبه المنحرف (Trapezoidal Rule) لتكامل المساحة تحت النقاط الإحداثية التي تم حسابها بالفعل بواسطة دالة roc_curve، وذلك باستخدام دالة auc العامة:

roc_auc = auc(fpr, tpr)

تنتج كلتا الطريقتين نفس القيمة الرياضية المتطابقة. ومن أفضل الممارسات المنهجية دمج قيمة AUC المحسوبة تلقائياً داخل نص وسيلة الإيضاح (Legend) في المخطط البياني، مثل كتابة label=f'Logistic Regression (AUC = {roc_auc:.3f})'، مما يمنح القارئ فهماً فورياً يجمع بين المشهد البصري للمنحنى وقيمته التلخيصية القياسية.

7.3 المعايير القياسية الأكاديمية لتفسير جودة قيم AUC

اعتمدت الأدبيات الأكاديمية والإحصائية الحيوية تصنيفاً معيارياً عريضاً لتفسير وتقييم جودة النماذج التنبؤية بناءً على قيم مقياس ROC-AUC المحققة، ويُفصل هذا التصنيف الأداء وفق المستويات الإرشادية التالية:

  • أداء استثنائي وممتاز (0.90 – 1.00): يمتلك النموذج قدرة تمييزية فائقة ويفصل بين الفئات بدقة استثنائية ونادرة الخطأ، وهو المعيار الذهبي المطلوب في التشخيصات الطبية الحاسمة.
  • أداء جيد جداً (0.80 – 0.89): يعكس قدرة تصنيفية متقدمة وموثوقة ملائمة للغالبية الساحقة من التطبيقات الصناعية والأنظمة الذكية في بيئات الإنتاج.
  • أداء مقبول أو معتدل (0.70 – 0.79): يمتلك النموذج قدرة تمييزية لا بأس بها، لكنه يولد هامش خطأ ملموس يتطلب تدعيماً بمصادر بيانات أو ميزات تفسيرية إضافية.
  • أداء ضعيف وهش (0.60 – 0.69): قدرة الفصل لدى النموذج متواضعة ولا يعتمد عليها في اتخاذ قرارات مصيرية أو حساسة.
  • فشل تصنيفي كامل (0.50 – 0.59): يقترب أداء النموذج من حدود التخمين العشوائي الصرف ويعد عديم الجدوى العملية.

إلى جانب هذه المعايير الوصفية، تفرض المنهجية الأكاديمية الصارمة عدم الاكتفاء بتقديم تقدير نقطي وحيد لقيمة AUC، بل يجب تدعيمه بحساب فترات الثقة الإحصائية (Confidence Intervals – بنسبة 95%) باستخدام تقنيات إعادة التوليد الإحصائي المتقدمة (Bootstrapping). يتم ذلك عبر إعادة سحب عينات عشوائية من مجموعة الاختبار مع الإحلال لآلاف المرات وحساب تباين AUC، مما يضمن التأكد من أن تفوق النموذج ليس وليد الصدفة الإحصائية أو انحياز العينة المختبرة.

8. توليد منحنى ROC بالطريقة السريعة المدمجة (Scikit-Learn Visualizers)

8.1 تطبيق الدالة RocCurveDisplay.from_estimator

في الإصدارات الحديثة من مكتبة Scikit-Learn، تم إدخال واجهات بصرية موحدة تُعرف باسم المعارض الرسومية (Visualizers)، وعلى رأسها فئة RocCurveDisplay. تهدف هذه الأدوات إلى تبسيط سير العمل البرمجي واختزال الخطوات المتعددة في سطر برمجي واحد فائق الكفاءة والسرعة، مما يقلل من احتمالات الخطأ البشري أثناء استخراج المتغيرات وحساب الإحداثيات يدوياً.

تتيح الدالة المصنعية RocCurveDisplay.from_estimator() توليد منحنى ROC وحساب قيمة AUC ورسم المخطط البياني بصورة فورية متكاملة عبر تمرير كائن النموذج المدرب مباشرة متبوعاً بمصفوفة ميزات الاختبار والمتغير التابع الحقيقي:

RocCurveDisplay.from_estimator(model, X_test, y_test)
plt.show()

تقوم هذه الدالة خلف الكواليس باستدعاء دالة predict_proba تلقائياً، واستخراج احتمالات الفئة الإيجابية، وحساب إحداثيات fpr و tpr ومقياس AUC، وتمرير كافة هذه البيانات إلى كائن رسم Matplotlib وتسمية المحاور بدقة تامة. تُعد هذه الوسيلة الحل الأمثل أثناء مراحل الاستكشاف السريع وبناء النماذج الأولية (Prototyping) نظراً لاختصارها الكبير للوقت والجهد.

8.2 استخدام RocCurveDisplay.from_predictions

في العديد من السيناريوهات التطبيقية المتقدمة، قد لا يكون النموذج التنبؤي كائناً نمطياً يتبع واجهات Scikit-Learn البرمجية؛ كأن يكون شبكة عصبونية عميقة تم بناؤها باستخدام أطر عمل متقدمة مثل PyTorch أو TensorFlow، أو نموذج تعزيز تدرج مخصص مبني عبر XGBoost أو LightGBM. في مثل هذه الحالات، تبرز القوة الوظيفية للدالة البديلة RocCurveDisplay.from_predictions().

تستقبل هذه الدالة المخرجات التنبؤية المحسوبة مسبقاً بدلاً من كائن النموذج نفسه:

RocCurveDisplay.from_predictions(y_test, y_pred_proba, name='Deep Neural Net')

تقوم الدالة بحساب الإحداثيات ورسم المنحنى وإدراج قيمة AUC في وسيلة الإيضاح بنفس الدرجة العالية من الأناقة والتناسق الرسومي. توفر هذه الآلية مرونة استثنائية تتيح للمحللين دمج مخرجات نماذج من بيئات برمجية متباينة ورسمها باستخدام واجهة موحدة وموثوقة.

8.3 تخصيص وتعديل المخططات المولدة عبر كائنات Matplotlib Axes

تتميز كائنات RocCurveDisplay في Scikit-Learn بتكاملها العميق والتام مع البنية التحتية لمكتبة Matplotlib؛ حيث يُرجع استدعاء هذه الدوال كائناً بيانياً يحتوي على خاصية المحاور display.ax_. يتيح الوصول المباشر إلى هذا المحور للمطورين إمكانية تطبيق كافة أشكال التخصيص الرسومي المتقدم التي توفرها بيئة بايثون.

يمكن للمحلل استخدام المحور المرتجع لإضافة خطوط مرجعية إضافية، أو تعديل نطاقات الألوان، أو إضافة نصوص توضيحية وأسهم إرشادية تشير إلى نقاط تشغيلية معينة على المنحنى، أو تراكب عدة منحنيات إضافية على نفس كائن الرسم عبر تمرير وسيط ax=display.ax_ في الاستدعاءات اللاحقة. كما يمكن التحكم في مستويات الشفافية (Alpha) وسمك الخطوط وأنماط التمييز البصري بما يلبي المتطلبات الصارمة للتنسيق المعتمد في المؤتمرات والدوريات الأكاديمية المصنفة.

9. تحديد عتبة التصنيف المثالية (Optimal Classification Threshold)

9.1 طريقة مؤشر يودن (Youden’s J Statistic)

في التطبيقات الواقعية، لا يقتصر الهدف على رسم المنحنى وحساب المساحة تحته فحسب، بل يمتد إلى اتخاذ قرار عملي حاسم: ما هي العتبة الاحتمالية المحددة التي يجب تطبيقها لتحويل التنبؤات إلى قرارات فعلية؟ يُعد مؤشر يودن (Youden’s J Statistic) أحد أعرق وأشهر المناهج الإحصائية المتبعة لتحديد نقطة القطع المثلى على منحنى ROC.

يُعرَّف مؤشر يودن رياضياً بأنه الفرق الرأسي الصافي بين منحنى ROC الفعلي وخط التخمين العشوائي، وتُحسب قيمته عند كل عتبة وفق المعادلة التالية:

J = Sensitivity + Specificity – 1 = TPR – FPR

تتراوح قيمة J النظرية بين 0 (في حالة النموذج العشوائي) و 1 (في حالة النموذج الكامل). وتتمثل استراتيجية التحسين في إيجاد العتبة الاحتمالية التي تُعظم قيمة مؤشر يودن (J_max)، حيث تمثل هذه النقطة التوازن الأقصى المتساوي بين رفع الحساسية وخفض معدل الإيجابيات الكاذبة في آن واحد:

يتم تطبيق ذلك برمجياً في بايثون عبر إجراء حساب مصفوفي بسيط:

j_scores = tpr - fpr
optimal_idx = np.argmax(j_scores)
optimal_threshold = thresholds[optimal_idx]

تحدد هذه المعادلة فهرس النقطة الهندسية التي تبتعد رأسياً بأكبر مسافة ممكنة عن الخط القطري العشوائي، مما يوفر عتبة موضوعية محايدة في حال عدم وجود أوزان ترجيحية مسبقة لتكاليف الأخطاء.

9.2 منهجية المسافة الأقصر إلى الزاوية العليا اليسرى (Top-Left Distance)

المنهجية الهندسية البديلة لتحديد العتبة المثلى هي طريقة “أقصر مسافة إقليدية إلى نقطة الكمال”، والمقصود بنقطة الكمال الزاوية العلوية اليسرى ذات الإحداثيات القياسية (FPR = 0, TPR = 1). تُمثل هذه النقطة الحالة النظرية للمصنف الخارق الذي يحقق حساسية ونوعية كاملتين بنسبة 100% في وقت واحد.

تعتمد هذه المنهجية على حساب المسافة الإقليدية (Euclidean Distance – d) بين كل نقطة (FPR, TPR) واقعة على المنحنى والنقطة المثالية (0, 1) وفق المعادلة الرياضية:

d^2 = (1 – TPR)^2 + (FPR)^2

وتكون العتبة المثلى هي العتبة المقابلة للنقطة التي تحقق أدنى قيمة للمسافة (Minimum Euclidean Distance). في بايثون، يُحسب ذلك بسهولة عبر الشيفرة التالية:

distances = (1 - tpr)**2 + fpr**2
optimal_idx_dist = np.argmin(distances)
optimal_threshold_dist = thresholds[optimal_idx_dist]

غالباً ما تتطابق العتبة الناتجة عن طريقة المسافة الإقليدية مع عتبة مؤشر يودن أو تقترب منها للغاية، مما يوفر تأكيداً هندسياً وإحصائياً مزدوجاً على موضع نقطة التوازن التشغيلي للمصنف.

9.3 موازنة تكلفة الأخطاء (Cost-Benefit Analysis) في اختيار العتبة

تفترض الطرق السابقة (مؤشر يودن والمسافة الإقليدية) افتراضاً ضمنياً بأن تكلفة ارتكاب خطأ إيجابي كاذب (FP) تتساوى تماماً مع تكلفة ارتكاب خطأ سلبي كاذب (FN). غير أن هذا الافتراض ينهار كلياً في العالم الحقيقي والتطبيقات الحساسة كالتشخيص السريري وإدارة المخاطر؛ حيث تختلف التكاليف باختلاف سياق المشكلة.

في التقييم النفسي والتشخيص السريري، على سبيل المثال، قد يؤدي الفشل في رصد علامات الاكتئاب الجسيم أو النزعات الانتحارية (خطأ سلبي كاذب FN) إلى عواقب بشرية فاجعة لا يمكن تداركها، في حين يقتصر أثر الإنذار الكاذب (FP) على توجيه المريض لمقابلة تشخيصية معمقة مع أخصائي نفسي. في مثل هذه الحالات، يجب تطويع العتبة الاحتمالية وخفضها عمداً لترجيح كفة الحساسية العالية حتى لو أدى ذلك لارتفاع طفيف في معدل الإيجابيات الكاذبة.

يمكن صياغة دالة خسارة إجمالية مرجحة بالتكاليف (Total Expected Cost Function) في بايثون لدمج التكاليف المالية أو الطبية الصريحة:

Total Cost = (Cost_FP * FP) + (Cost_FN * FN)

حيث يقوم الباحث بحساب الخسارة التقديرية عند كل عتبة تشغيلية واختيار العتبة الرقمية التي تحقق أدنى تكلفة إجمالية متوقعة، مما يربط النمذجة الإحصائية مباشرة بالاستراتيجية السريرية والاقتصادية للمؤسسة.

10. رسم ومقارنة منحنيات ROC لعدة نماذج تعلم آلي

10.1 تدريب خوارزميات تصنيف متنوعة

في المشاريع التطبيقية الرصينة، نادراً ما يكتفي الباحث بتقييم خوارزمية تصنيف واحدة؛ بل تقتضي الحكمة المنهجية تدريب حزمة متكاملة من خوارزميات التعلم الآلي ذات الخلفيات الرياضية المتنوعة ومقارنتها فوق نفس بيئة وبيانات الاختبار لفرز النموذج الأكثر جدارة وتفوقاً.

تشمل هذه النماذج المقارنة عادةً:

  • الانحدار اللوجستي (Logistic Regression): بوصفه النموذج الخطي المعياري عالي التفسيرية.
  • الغابات العشوائية (Random Forest Classifier): لتمثيل النماذج التجميعية الشجرية غير الخطية القادرة على رصد التفاعلات المعقدة بين الميزات.
  • آلات المتجهات الداعمة (Support Vector Machines – SVM): لتمثيل أساليب الفصل الهندسي في الفضاءات الإسقاطية ذات الأبعاد العالية.

عند استخدام خوارزمية آلات المتجهات الداعمة (SVC)، يجب الانتباه الشديد إلى ضرورة تفعيل وسيط التقدير الاحتمالي الصريح probability=True أثناء تهيئة النموذج في Scikit-Learn؛ حيث إن خوارزمية SVM القياسية تعتمد على المسافات الهندسية لمتجه الفصل (Decision Function) ولا تولد احتمالات معايرة بشكل افتراضي، ويتيح تفعيل هذا الخيار تطبيق معايرة بلات (Platt Scaling) لإنتاج مصفوفة الاحتمالات اللازمة لرسم المنحنى.

10.2 رسم منحنيات متعددة على مخطط بياني واحد

تتمثل الخطوة التحليلية الجوهرية في تجميع ومقارنة أداء هذه النماذج المتعددة بصرياً عبر تراكب منحنيات ROC الخاصة بكل منها على نفس لوحة الرسم البياني. يتم تنفيذ ذلك برمجياً بكفاءة وأناقة عبر استخدام حلقة تكرارية (For-Loop) داخل بايثون:

يتم تنظيم النماذج المدربة في قاموس برمجي (Dictionary)، ثم تمر الحلقة عبر كل مصنف لاستخراج احتمالاته التنبؤية predict_proba() لمجموعة الاختبار، وحساب إحداثيات fpr و tpr ومقياس roc_auc المقابل له، ثم رسم خط بياني مستقل لكل نموذج بلون مميز وسمك مناسب.

يتضمن وسيط التسمية label اسم الخوارزمية ملحقاً به قيمة المساحة المحسوبة AUC مقربة إلى ثلاث خانات عشرية. يتيح هذا التمثيل البصري المشترك إجراء تقييم مقارن فوري وشامل؛ حيث يسهل تحديد النموذج الذي يحقق أعلى تقوس نحو الزاوية العلوية اليسرى، فضلاً عن اكتشاف النماذج التي قد تتفوق في مناطق الحساسية العالية (العتبات المنخفضة) مقابل تلك التي تقدم أداءً أفضل في مناطق النوعية العالية (العتبات المرتفعة).

10.3 تقييم الفروق الإحصائية بين قيم AUC للنماذج

يقع العديد من ممارسي علم البيانات في فخ الاعتماد الساذج على الفروق العددية الظاهرية البسيطة بين قيم AUC لإعلان تفوق نموذج على آخر (كأن يُفضل نموذج حقق AUC = 0.86 على نموذج حقق 0.84 دون اختبار دلالة). غير أن المنهجية الأكاديمية الرصينة تفرض إخضاع هذه الفروق لاختبارات الدلالة الإحصائية للتحقق من كونها تعكس تفوقاً حقيقياً في بنية النموذج وليست ناتجة عن التباين العشوائي في عينة الاختبار.

يُعد اختبار ديلونغ (DeLong’s Test) المعيار الإحصائي غير البارامتري غير المتمايز الأكثر رسوخاً لمقارنة المساحات تحت منحنيات ROC لنماذج متعددة تم تقييمها على نفس مجموعة البيانات؛ حيث يقوم بحساب مصفوفة التباين المشترك للقيم المقدرة وتقدير القيمة الاحتمالية (P-value) للفرق بين المنحنيين.

بالإضافة إلى ذلك، يُنصح بشدة بدمج رسم منحنيات ROC مع تقنية التحقق المتقاطع متعدد الطيات (K-Fold Cross-Validation). يتم في هذا الأسلوب المتقدم حساب منحنى ROC لكل طية (Fold) وتوليد “منحنى ROC المتوسط” (Mean ROC) محاطاً بحزم تظليلية تمثل الانحراف المعياري لتباين المنحنى (+/- 1 Std Dev)؛ يقدم هذا التمثيل البصري المتطور دليلاً دامغاً على استقرار أداء المصنف وعدم حساسيته لتقلبات توزيع العينات.

11. التعامل مع منحنيات ROC للتصنيف متعدد الفئات (Multi-class ROC Curves)

11.1 استراتيجية فئة ضد الكل (One-vs-Rest / OvR)

صُمم منحنى ROC في الأصل لمعالجة مشاكل التصنيف الثنائي (موجب / سالب)، لكن الواقع العملي يزخر بمهام تصنيفية معقدة تتضمن ثلاثة فئات أو أكثر (Multi-class Classification)؛ مثل تصنيف الحالات النفسية إلى (اكتئاب، قلق، وسواس قهري، أصحاء). لتوسيع نطاق منحنى ROC وتطبيقه في هذه البيئات، يتم اللجوء إلى استراتيجيات التفكيك، وعلى رأسها استراتيجية “فئة ضد الكل” (One-vs-Rest أو One-vs-All).

تقوم هذه الاستراتيجية بتحويل مسألة التصنيف متعدد الفئات التي تضم K من الفئات إلى K من مسائل التصنيف الثنائي المستقلة؛ ففي كل تكرار، تُعتبر فئة معينة هي الفئة الإيجابية (Target = 1) بينما تُدمج كافة الفئات الأخرى المتبقية معاً لتشكل الفئة السلبية (Target = 0).

لتطبيق ذلك في بايثون، نستخدم أداة label_binarize من وحدة sklearn.preprocessing لتحويل متجه الفئات المتعددة إلى مصفوفة ثنائية مصفوفية بنمط (One-Hot Encoding)، ثم نقوم بحساب احتمالات النموذج لكل فئة وحساب إحداثيات fpr[i] و tpr[i] ومقياس roc_auc[i] لكل فئة i على حدة ورسم مسار بياني منفصل لكل فئة، مما يتيح فحص دقة النموذج في رصد كل فئة مرضية أو سلوكية على حدة وبصورة مستقلة.

11.2 استراتيجية فئة ضد فئة (One-vs-One / OvO)

الاستراتيجية البديلة لمعالجة الفئات المتعددة هي استراتيجية “فئة ضد فئة” (One-vs-One – OvO). تعتمد هذه المنهجية الرياضية على إنشاء مصنفات ثنائية تقارن بين كل زوج ممكن من الفئات مع استبعاد بقية الفئات تماماً أثناء الحساب؛ فإذا كان لدينا K من الفئات، فإن الاستراتيجية تقوم بتقييم عدد من الأزواج يساوي K * (K - 1) / 2.

تتميز استراتيجية OvO بمناعتها العالية ضد مشكلة عدم التوازن الحاد بين أحجام الفئات، والتي قد تظهر بصورة مصطنعة في استراتيجية OvR عند دمج عدة فئات لتشكيل الفئة السلبية. توفر مكتبة Scikit-Learn إمكانية حساب المتوسط الإجمالي لمقياس AUC متعدد الفئات وفق صيغة هاند وتيل (Hand & Till) الرياضية الشهيرة عبر تمرير المعامل multi_class='ovo' داخل دالة roc_auc_score:

ovo_auc = roc_auc_score(y_test_bin, y_pred_proba, multi_class='ovo', average='macro')

تُعد هذه المقارنة الثنائية البينية بالغة الأهمية في التشخيصات الفارقة السريرية التي تتطلب الفصل الدقيق بين اضطرابين نفسيين متقاربين في الأعراض الإكلينيكية.

11.3 حساب ورسم المتوسطات العامة (Micro-Average و Macro-Average)

لتلخيص الأداء الإجمالي للمصنف متعدد الفئات في مؤشر بياني واحد متكامل يُضاف إلى جانب منحنيات الفئات الفردية، يتم اللجوء إلى طريقتين إحصائيتين للتجميع:

  • متوسط الماكرو (Macro-Average ROC): يعتمد على حساب الإحداثيات وقيم AUC لكل فئة تصنيفية بصورة مستقلة تماماً، ثم جمع هذه القيم وحساب متوسطها الحسابي البسيط. تعامل هذه الطريقة كافة الفئات على قدم المساواة وبأوزان متكافئة بغض النظر عن حجم انتشار الفئة وعدد عيناتها في المجتمع، مما يجعله مقياساً صارماً يبرز أي ضعف في أداء الفئات النادرة.
  • متوسط الميكرو (Micro-Average ROC): يقوم بتجميع ومطابقة مصفوفات المؤشرات الحقيقية والاحتمالات التنبؤية عبر كافة الفئات في متجه عالمي ضخم واحد، ثم حساب مصفوفة ارتباك تراكمية عامة وإجراء تكامل ROC شامل بناءً عليها. يُعطي متوسط الميكرو وزناً مساوياً لكل عينة أو حالة اختبار بدلاً من كل فئة، مما يجعله أكثر تأثراً بالفئات ذات الأحجام التكرارية الأكبر في البيانات.

يتم رسم خطي متوسط الماكرو ومتوسط الميكرو عادة باستخدام خطوط متقطعة ومميزة (Dotted/Dashed lines) بألوان متباينة فوق المنحنيات الفرعية داخل المخطط المتعدد، مما يوفر رؤية بانورامية شاملة تلخص دقة المصنف على المستوى الكلي والجزئي في آن واحد.

12. أفضل الممارسات، التحديات، وحالات الاستخدام في التقييم النفسي والتشخيصي

12.1 التعامل مع البيانات غير المتوازنة ومحدودية منحنى ROC

على الرغم من القوة الرياضية لمنحنى ROC، إلا أن نقطة ضعفه المنهجية الكبرى تظهر بوضوح عند تطبيقه على مجموعات بيانات تعاني من عدم توازن شديد وحاد في توزيع الفئات (Extreme Class Imbalance)؛ كأن تمثل الفئة الإيجابية المستهدفة نسبة 0.1% فقط من البيانات (مثل الكشف عن نوبات الأمراض النادرة أو الاحتيال المالي الاستثنائي).

ينشأ هذا القصور من طريقة حساب معدل الإيجابيات الكاذبة FPR = FP / (TN + FP)؛ ففي البيئات غير المتوازنة، يكون عدد السلبيات الحقيقية (TN) في المقام ضخماً وفلكياً. ونتيجة لذلك، حتى لو ارتكب النموذج مئات الأخطاء وصنف مئات الحالات السلبية على أنها إيجابية بالخطأ (ارتفاع FP)، فإن القيمة الناتجة لـ FPR ستظل شديدة الصغر وقريبة من الصفر نظراً لضخامة المقام. يعطي هذا الوضع انطباعاً مضللاً وخادعاً بأن النموذج يحقق أداءً بطولياً ومنحنى ROC متجهاً نحو الكمال، بينما يغرق المستخدم في الواقع العملي بسيل عارم من الإنذارات الكاذبة التي تفوق الحالات الإيجابية الحقيقية بأضعاف مضاعفة.

تتطلب الممارسة المنهجية الواعية معالجة هذا الخلل عبر تطبيق أساليب إعادة التوازن الإحصائي (مثل تقنيات الإفراط في أخذ العينات SMOTE أو التقليل العشوائي للعينات السلبية)، والتنبه دوماً لسياق انتشار الفئة قبل اتخاذ قرارات مصيرية بناءً على منحنى ROC بمفرده.

12.2 المقارنة المنهجية مع منحنى الدقة والاسترجاع (Precision-Recall Curve)

لمواجهة تضليل منحنى ROC في بيئات البيانات غير المتوازنة، يبرز منحنى الدقة والاسترجاع (Precision-Recall Curve – PR Curve) كبديل منهجي متفوق وأكثر صرامة ومصداقية. يركز منحنى PR على قياس العلاقة بين مقياس الدقة (Precision = TP / (TP + FP)) على المحور الرأسي ومقياس الاسترجاع أو الحساسية (Recall/TPR) على المحور الأفقي.

يكمن السر في تفوق منحنى PR في سياقات الفئات النادرة في استبعاده التام لمكون السلبيات الحقيقية (TN) من معادلاته الرياضية؛ حيث يركز حصرياً على رصد جودة التنبؤات الإيجابية. وإذا بدأ النموذج في توليد إنذارات كاذبة (FP)، فإن مقياس الدقة سينهار فورياً وبشدة، مما يؤدي إلى هبوط حاد في منحنى PR ومقياس المساحة تحته (PR-AUC أو Average Precision)، كاشفاً بوضوح عن عيوب النموذج التنبؤي التي قد يخفيها منحنى ROC.

تتمثل أفضل الممارسات القياسية في بايثون في رسم منحنى ROC ومنحنى PR جنباً إلى جنب (Side-by-Side Plots) باستخدام لوحات متعددة plt.subplots(1, 2)؛ حيث يقدم الجمع التحليلي بين المنحنيين صورة متكاملة ومحصنة إحصائياً تكشف عن قدرة المصنف على الفصل العام وتفضح في الوقت ذاته مدى تأثره بالإنذارات الكاذبة في البيئات غير المتوازنة.

12.3 تطبيقات منحنيات ROC في التحليلات النفسية والأدوات التشخيصية السريرية

يحتل منحنى ROC مكانة بارزة في مجالات القياس النفسي (Psychometrics) والتشخيص السريري المعتمد على خوارزميات الذكاء الاصطناعي؛ حيث يُستخدم على نطاق واسع لمعايرة المقاييس والاستبيانات النفسية وتحديد درجات القطع السريرية (Clinical Cutoff Scores) المثلى للاختبارات التشخيصية للاضطرابات النفسية المعقدة (مثل مقياس بيك للاكتئاب أو مقاييس التوحد وفرط الحركة وتشتت الانتباه).

عند بناء نماذج تعلم آلي للتنبؤ المبكر بالاضطرابات السلوكية أو تقييم الاستجابة للعلاجات الدوائية والنفسية، يوفر منحنى ROC إطاراً لتقييم الحساسية التشخيصية للأداة التنبؤية والتأكد من ملاءمتها للأهداف السريرية. علاوة على ذلك، تفرض معايير النشر الأكاديمي الصارمة في المجلات النفسية والطبية الرائدة (مثل دوريات APA والطب النفسي السريري) اتباع إرشادات توثيق دقيقة عند الإبلاغ عن نتائج ROC و AUC، تتضمن:

  • ذكر قيمة AUC النقطية مقترنة بفترة ثقة 95% (95% CI) محسوبة بطرق إعادة التوليد.
  • التصريح عن دالة الاحتمال المستخدمة وعتبة اتخاذ القرار المختارة، مع تبريرها بالاعتماد على مؤشر يودن أو تحليل التكلفة والفائدة.
  • إرفاق مصفوفة الارتباك المفصلة عند العتبة المختارة لتوضيح الحساسية والنوعية والقيمة التنبؤية الإيجابية والسلبية بصورة لا لبس فيها.

خاتمة

يمثل منحنى خصائص تشغيل المستقبِل (ROC Curve) والمساحة المحصورة تحته (AUC) حجر الزاوية والركيزة الرياضية الأهم في تقييم نماذج ومصنفات التعلم الآلي عبر كافة مجالات العلوم التطبيقية والتحليلات المتقدمة. لقد وفر هذا الدليل الشامل مساراً معرفياً متكاملاً يبدأ من النظريات التأسيسية لكشف الإشارة، مروراً بالبناء البرمجي التفصيلي باستخدام مكتبات بايثون القياسية، وصولاً إلى أدق التفاصيل المتعلقة باختيار عتبات القرار المثلى وإجراء الاختبارات الإحصائية المقارنة والتعامل مع التصنيفات المتعددة والبيانات غير المتوازنة.

إن إتقان رسم وتفسير وتطويع منحنيات ROC في بايثون يتجاوز مجرد كونه مهارة برمجية لكتابة بضعة أسطر من الشيفرات؛ بل هو منهجية تفكير تحليلي تمكّن علماء البيانات والباحثين من اتخاذ قرارات تقييمية مستنيرة ومسؤولة أخلاقياً وعلمياً، تضمن بناء نماذج تنبؤية متينة وموثوقة قادرة على تقديم قيمة حقيقية في التطبيقات السريرية والعملية المعقدة.

المراجع (References)

  • Fawcett, T. (2006). An introduction to ROC analysis. Pattern Recognition Letters, 27(8), 861–874. https://doi.org/10.1016/j.patrec.2005.10.010
  • Hanley, J. A., & McNeil, B. J. (1982). The meaning and use of the area under a receiver operating characteristic (ROC) curve. Radiology, 143(1), 29–36. https://doi.org/10.1148/radiology.143.1.7063747
  • Pedregosa, F., Varoquaux, G., Gramfort, A., Michel, V., Thirion, B., Grisel, O., Blondel, M., Prettenhofer, P., Weiss, R., Dubourg, V., Vanderplas, J., Passos, A., Cournapeau, D., Brucher, M., Perrot, M., & Duchesnay, E. (2011). Scikit-learn: Machine learning in Python. Journal of Machine Learning Research, 12, 2825–2830. https://scikit-learn.org
  • Hunter, J. D. (2007). Matplotlib: A 2D graphics environment. Computing in Science & Engineering, 9(3), 90–95. https://doi.org/10.1109/MCSE.2007.55
  • Youden, W. J. (1950). Index for rating diagnostic tests. Cancer, 3(1), 32–35. <a href="https://doi.org/10.1002/1097-0142(1950)3:13.0.CO;2-3″ target=”_blank” rel=”noopener noreferrer”>https://doi.org/10.1002/1097-0142(1950)3:1<32::AID-CNCR2820030106>3.0.CO;2-3
  • DeLong, E. R., DeLong, D. M., & Clarke-Pearson, D. L. (1988). Comparing the areas under two or more correlated receiver operating characteristic curves: A nonparametric approach. Biometrics, 44(3), 837–845. https://doi.org/10.2307/2531595
  • Saito, T., & Rehmsmeier, M. (2015). The precision-recall plot is more informative than the ROC plot when evaluating binary classifiers on imbalanced datasets. PLOS ONE, 10(3), e0118432. https://doi.org/10.1371/journal.pone.0118432
  • Hand, D. J., & Till, R. J. (2001). A simple generalisation of the area under the ROC curve for multi-class classification problems. Machine Learning, 45(2), 171–186. https://doi.org/10.1023/A:1010920819831
  • McKinney, W. (2010). Data structures for statistical computing in Python. Proceedings of the 9th Python in Science Conference, 51–56. https://doi.org/10.25080/Majora-92bf1924-003
  • Swets, J. A. (1988). Measuring the accuracy of diagnostic systems. Science, 240(4857), 1285–1293. https://doi.org/10.1126/science.3287615

اقتباس هذا المقال

looti, M. (2026, سبتمبر 1). كيفية رسم منحنى ROC في بايثون (خطوة بخطوة). عرب سايكلوجي. https://arabpsychology.com/statistics/how-to-plot-roc-curve-python-step-by-step/
looti, Mohammed. “كيفية رسم منحنى ROC في بايثون (خطوة بخطوة).” عرب سايكلوجي, 1 سبتمبر 2026, https://arabpsychology.com/statistics/how-to-plot-roc-curve-python-step-by-step/.
looti, Mohammed. “كيفية رسم منحنى ROC في بايثون (خطوة بخطوة).” عرب سايكلوجي. سبتمبر 1, 2026. https://arabpsychology.com/statistics/how-to-plot-roc-curve-python-step-by-step/.