قراية
وضع الحكايات

تقييم الـ models (النماذج)

~18 دقيقة قراية الدرس 4 في الوحدة 1

هو الـ model بتاعك كويس فعلًا؟

دلوقتي تقدر تشرح الـ model (النموذج) يعني إيه، وبيتعلّم منين، وبيتعلّم إزاي. والدرس اللي فات خلص عند تقسيم الـ train/test — أول حاجة صادقة تعملها مع model متدرّب. والدرس ده هو باقي الحكاية: الأرقام اللي بتقولك إن الـ model شغّال، والأرقام اللي هتضحك عليك لو صدّقتها لوحدها.

وكل اللي جاي بعد الدرس ده بيفترض إنك قريته. فلما درس بعد كده يقولك «ظبط C وgamma بـ grid search، وسجّل النتيجة بـ F1»، أو يسألك: عايز الـ accuracy ولا AUC-ROC ولا RMSE؟ — ده الدرس اللي بيخلّي الجملة دي ليها معنى.

الفكرة الأساسية

الـ metric (المقياس) مش حكم، ده سؤال إنت اخترت تسأله. غيّر السؤال، ونفس الـ model يبان عبقري أو مالوش لازمة. اختيار الـ metric قرار modeling، وده قرارك إنت مش قرار الـ library.

نفس الـ model، نفس البيانات  →  accuracy 98.7%  |  precision 0.40  |  AUC 0.90

تلات مجموعات، مش اتنين

التقسيم لاتنين، train وtest، كفاية عشان تكشف الـ overfitting (إفراط التعلم). بس مش كفاية عشان تطوّر model، لأن التطوير معناه إنك بتاخد قرارات: أنهي algorithm، كام layer، كام regularization، وأنهي features. وكل قرار من دول بيتظبط على البيانات اللي بتقيّم عليها.

مكتب عليه رزمة ورق تمارين، ومجموعة امتحانات تجريبية متدبّسة، وظرف امتحان متختوم.
ورق التمارين للمذاكرة، والامتحانات التجريبية عشان تختار بيها طريقة مراجعتك، والامتحان المتختوم بيتفتح مرة واحدة بس. إنك تتقيّم على واجبات حافظها بيقيس ذاكرتك، مش اللي اتعلمته.

عشان كده الـ pipelines الحقيقية بتستخدم تلات مجموعات منفصلة. والتقسيم المعتاد 60% train، و20% validation، و20% test، مع إن النسب بالظبط أقل أهمية بكتير من الفصل نفسه:

المجموعة بتتستخدم في بتبص عليها كام مرة
الـ training set ظبط الـ parameters — الـ weights اللي الـ optimizer بيعدّلها على طول، في كل iteration
الـ validation set الاختيار بين الـ models والإعدادات — الـ hyperparameters اللي محدش بيحسّنها لك كتير، مرة لكل مرشّح
الـ test set تقدير أداء الـ model النهائي على بيانات عمرها ما أثّرت فيه مرة واحدة، في الآخر خالص

الـ validation set (مجموعة التحقق) هي اللي المبتدئين بيتجاهلوها أكتر حاجة، وهي اللي بتخلّي التانيين صادقين. شغلانتها إنها تشيل عنك ضرر البحث بتاعك. هتدرّب عشرات الـ models على بيانات التدريب وترتّبهم على الـ validation؛ ونتيجة الكسبان على الـ validation متفائلة، لأنك اخترته عشان النتيجة دي. والـ test set (مجموعة الاختبار) موجودة بالظبط عشان تدّيك تقدير مفيش أي اختيار من اختياراتك لوّثه.

الـ data leakage: الوقعة الساكتة

الـ leakage (التسريب) هو أي معلومة بتوصل للـ model ومش هتبقى موجودة لما ينزل الشغل الحقيقي. وهو ساكت لأنه عمره ما بيطلّع error — بيطلّع نتيجة أحلى، ودي بالظبط اللي كنت بتتمناها.

اتنين بيلعبوا كوتشينة على ترابيزة، وعلى الحيطة ورا واحد فيهم مراية بتكشف ورقه للتاني.
المراية بتكسب كل دور، لحد ما تقعد على ترابيزة من غير مراية. الـ leakage معلومة التقييم شايفها ومش هتكون موجودة وقت الـ deployment، وغالبًا بتحصل من غير قصد.

وليه تلات أشكال مشهورة. leakage في الـ preprocessing: بتحسب المتوسط والـ standard deviation بتوع الـ normalization على البيانات كلها وبعدين تقسم، فصفوف التدريب بتشيل أثر من صفوف الاختبار. leakage من التكرار: نفس العميل أو الصورة أو القياس بيظهر في التدريب والاختبار مع بعض، فالـ model يقدر يفتكر بدل ما يعمّم. leakage زمني: بتلخبط بيانات time series عشوائي، فالـ model بيشوف الأسبوع الجاي قبل ما يتنبأ بالأسبوع اللي فات.

وفيه شكل رابع مفيش code review بيكشفه، وهو الأشهر فيهم كلهم. بتبص على نتيجة الاختبار، فتقرر إن الـ model محتاج regularization أكتر، فتدرّبه تاني، وبعدين تبص تاني. اللفّة دي gradient descent بشري على الـ test set. عيدها تلاتين مرة ونتيجة الاختبار بتاعتك تبقى نتيجة validation — لسه رقم، بس مبقاش تقدير لأي حاجة.

الانضباط المطلوب

قسّم الأول، وبعدين اعمل أي حاجة تانية. ظبط الـ scalers والـ encoders والـ feature selectors على جزء التدريب لوحده، وبعدين طبّقها على الباقي. ظبط الإعدادات على الـ validation. وافتح الـ test set مرة واحدة، وقول الرقم — ولو معجبكش، التصرف الصادق إنك تعترف بالرقم ده، مش إنك تفضل تحاول.

ليه الـ accuracy بتكدب

الـ accuracy (الدقة) هي نسبة الـ predictions الصح. وهي أول metric أي حد بيمد إيده عليه، وعلى المسائل المتوازنة هي metric معقول جدًا.

الـ accuracy
\text{Accuracy}=\frac{TP+TN}{TP+TN+FP+FN}
TP وTN وFP وFN هم الأعداد الأربعة اللي الجزء الجاي بيعرّفها. الـ accuracy بتدّي الأربعة نفس الوزن، ودي أصل المشكلة.

خد حالة ملموسة. بتبني كاشف أعطال لشبكة فيها 10,000 موقع خلوي. في أي يوم، 100 موقع منهم فيهم عطل و9,900 سليمين — 1% positive و99% negative. والشكل ده مش استثناء؛ ده شكل كشف الغش وفحص الأمراض وكشف العيوب وأعطال المعدات كلهم.

وده model مش محتاج Machine Learning خالص:

الـ model بتاع الـ 99%

def predict(site): return "healthy"

صح 9,900 مرة من 10,000. accuracy 99.0%. ومش بيلاقي ولا عطل واحد. رمي عملة هيغلبه في الحاجة الوحيدة اللي كنت عايزها منه.

أما الكاشف المفيد فعلًا على نفس البيانات فبيجيب 98.7% — يعني أقل من الكاشف اللي مالوش لازمة. لو الـ accuracy كانت الـ metric الوحيد بتاعك، كنت هتبعت الثابت للإنتاج وتمسح الـ model. ودي مش فخ إحصائي دقيق؛ ده قرار هتاخده فعلًا، على أساس دليل باين إنه قاطع.

الـ confusion matrix

الـ accuracy رقم واحد معصور من أربعة، والاتنين المهمين بيضيعوا في العصر. أما الـ confusion matrix (مصفوفة الالتباس) فبتحتفظ بالأربعة. وهي في المسألة الثنائية جدول 2×2 للفئة المتوقعة قصاد الفئة الحقيقية. والوحدة الرابعة بترجعلها مع الـ support vector machines، وهناك هتشوف confusion_matrix مطبوعة جنب classification report — والجزء ده هو اللي الخانات الأربعة بتاخد فيه أساميها.

وده الكاشف الحقيقي بتاعنا، عند الـ threshold الافتراضي:

الخانة الاسم العدد بتكلّف إيه
TP true positive — عطلان واتنبّه عليه 60 ولا حاجة. ده المطلوب.
FN false negative — عطلان وفاته 40 موقع عطلان محدش هيروحله
FP false positive — سليم واتنبّه عليه 90 مهندس رايح لموقع مفيهوش مشكلة
TN true negative — سليم وبرّأه 9,810 ولا حاجة، وعددهم ضخم

الـ accuracy هي (60 + 9,810) / 10,000 = 98.7%. وخد بالك مين شايل الرقم ده: الـ TN، وعددها 9,810، بتغرّق كل اللي غيرها. الأربعين عطل اللي فاتوا والتسعين زيارة اللي راحت على الفاضي مع بعض بيحرّكوا الـ accuracy بحاجة أكتر شوية من نقطة مئوية واحدة. الـ metric مسيطرة عليه الفئة اللي مكانتش تهمّك.

فسيب الـ TN لحظة واقرا التلات خانات التانية على طول. ودي بالظبط اللي بتعمله التلات metrics الجايين.

الـ precision: أثق في الإنذار؟

الـ precision (الإحكام) بيبص بس على الـ predictions اللي الـ model خلّاها positive، ويسأل: كام منها كان صح؟ ده metric الشخص اللي الإنذارات بتوصله.

الـ precision
\text{Precision}=\frac{TP}{TP+FP}=\frac{60}{60+90}=0.40
من 150 موقع الكاشف نبّه عليهم، 60 كانوا عطلانين فعلًا. precision 0.40 — تلات زيارات من كل خمسة على الفاضي.

والـ precision مالوش أي رأي في الأعطال اللي فاتتك. كاشف بينبّه على موقع واحد بالظبط ويطلع صح فيه، الـ precision بتاعه 1.00 وفي نفس الوقت 99 عطل قاعدين محدش بلّغ عنهم. ودي مش عيب في الـ metric — ده السبب إنك عمرك ما تقول الـ precision لوحده.

الـ recall: لقيت كام عطل؟

الـ recall (الاستدعاء) بيبص بس على الحالات اللي كانت positive فعلًا، ويسأل: الـ model مسك كام منها؟ ده metric الشخص اللي بيشيل نتيجة الإخفاق. وهتلاقيه برضه بيتسمّى sensitivity، أو true positive rate — تلات أسامي لنفس الكمية.

الـ recall
\text{Recall}=\frac{TP}{TP+FN}=\frac{60}{60+40}=0.60
من 100 عطل حقيقي، الكاشف لقى 60. recall 0.60 — أربعين موقع عطلان ومحدش اتقاله.

والـ recall هو كمان مالوش أي رأي في الإنذارات الكدابة. «اتنبأ دايمًا إن فيه عطل» بيجيب recall 1.00 بـ precision 0.01. والاتنين مع بعض بيحاصروا طريقتين الغلط الاتنين، وعشان كده بيمشوا جوز.

الـ F1: رقم واحد للاتنين

إنك ترتّب عشرين model مرشّح برقمين حاجة تلخبط، فالـ F1 بيدمجهم. والمهم إنه الوسط التوافقي (harmonic mean) مش الحسابي.

الـ F1 score
F_1=2\cdot\frac{\text{Precision}\cdot\text{Recall}}{\text{Precision}+\text{Recall}}
بـ precision 0.40 وrecall 0.60، الـ F1 = 2 × 0.24 / 1.00 = 0.48.

واختيار نوع الوسط بيعمل شغل حقيقي هنا. خد precision 1.00 وrecall 0.02 — كاشف بينبّه على موقعين ويطلع صح فيهم. الوسط الحسابي 0.51، ورقم محترم. أما الوسط التوافقي فهو 0.039. الوسط التوافقي مينفعش ينقذه نص واحد قوي؛ بيقعد قريب من الأضعف. ودي بالظبط التصرفات اللي عايزها من ملخّص لـ trade-off.

تفضّل أنهي فيهم؟

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

فضّل الـ precision لما الـ false positive يبقى مكلّف. spam filter بيبعت عرض شغل حقيقي للـ spam folder عمل ضرر أكبر من filter بيعدّي رسالة مزعجة، لأن المستخدم بيدفع تمن الـ false positive وبالكاد بياخد باله من الـ false negative. ونفس الكلام في الحجب الأوتوماتيك، ورجوع الفلوس الأوتوماتيك، وأي حاجة بتتصرف من غير بني آدم في النص.

وفضّل الـ recall لما الـ false negative يبقى مكلّف. اختبار فحص فاته حالة حقيقية فشل في شغلانته الوحيدة؛ والإنذار الكداب بيكلّف اختبار زيادة. ونفس الكلام في مفاتيح الأمان، وفحص المنشآت، وكاشف المواقع الخلوية بتاعنا — زيارة مهندس على الفاضي بتكلّف صباحية واحدة، وعطل محدش بلّغ عنه بيكلّف يوم انقطاع خدمة.

وفضّل الـ F1 لما الاتنين يوجعوك ومحتاج رقم واحد تحسّنه. وده الحال المعتاد وإنت بتختار model، وعشان كده f1_weighted بيظهر كتير كـ scoring argument. بس افتكر إنه راحة للترتيب مش إعلان إن الـ precision والـ recall ليهم نفس الأهمية في مسألتك — لو واحد فيهم أهم فعلًا، ادّيله وزن، أو حسّن اللي يهمّك مع حد أدنى للتاني.

الـ threshold اللي مختارتهوش

وهنا حاجة الخانات الأربعة بتخبّيها. أغلب الـ classifiers مش بتطلّع فئة — بتطلّع score (درجة) بين 0 و1. وبعدين حاجة بتقارن الـ score ده بـ threshold (عتبة) عشان تطلّع label، ولو مقلتش غير كده فالـ threshold ده 0.5.

و0.5 قيمة افتراضية مش اكتشاف. مفيش حاجة في مسألتك اختارتها. وكل confusion matrix وكل precision وكل recall شفته لحد دلوقتي هو خاصية threshold واحد. حرّكه وكلهم يتحرّكوا.

علّي الـ threshold لـ 0.8 والكاشف بتاعنا ينبّه على 30 موقع بس هما الأكتر ثقة — الـ precision يطلع لـ 1.00 تقريبًا والـ recall ينزل لـ 0.30. ونزّله لـ 0.2 وينبّه على أكتر من ألفين موقع: الـ recall يطلع لـ 0.85 والـ precision ينهار لـ 0.04. model واحد، ومجموعة weights واحدة، وتصرّف مختلف خالص. والنسخة التفاعلية من الدرس ده بتخلّيك تسحب الـ threshold ده وتشوف الرقمين بيتحرّكوا مع بعض.

بناء الـ ROC curve

لو الـ threshold الواحد بيدّي جوز واحد (precision، recall)، فإنك تمسح الـ threshold على مداه كله بيرسم منحنى لتصرّف الـ model. ارسمه بالمحورين الصح وتطلعلك الـ ROC curve (منحنى ROC) — receiver operating characteristic، اسم ورثناه من مشغّلين الرادار في الأربعينات ومش مستاهل انتباه أكتر من كده.

المحورين
\text{TPR}=\frac{TP}{TP+FN}\qquad \text{FPR}=\frac{FP}{FP+TN}
المحور الرأسي: الـ true positive rate، وهو الـ recall. المحور الأفقي: الـ false positive rate، يعني نسبة المواقع السليمة اللي اتنبّه عليها غلط. ومفيش مقام فيهم بيخلط بين الفئتين، وده اللي بيخلّي المنحنى مستقل عن إنت بتوزن الفئتين إزاي.

والبناء ميكانيكي، وإنك تبنيه بإيدك مرة واحدة أنفع من إنك تقرا عنه تلات مرات:

1. ادّي score لكل مثال في الـ validation set. 2. ابدأ بـ threshold أعلى من كل الـ scores: مفيش حاجة بتتنبّه، فالـ TPR = 0 والـ FPR = 0. دي الزاوية اللي تحت على الشمال. 3. نزّل الـ threshold score واحد كل مرة. كل خطوة بتحوّل مثال واحد من predicted negative لـ predicted positive: لو كان positive حقيقي المحور الرأسي يطلع، ولو كان negative حقيقي المحور الأفقي يتقدّم. 4. كمّل لحد ما الـ threshold ينزل تحت كل الـ scores: كل حاجة بتتنبّه، والمعدّلين بيساووا 1، ودي الزاوية اللي فوق على اليمين. وبعدين وصّل النقط.

واقرا الشكل الهندسي وهو هيشرح نفسه. الـ model اللي الـ scores بتاعته مفيهاش أي معلومة بيطلع ويتقدّم بنفس القدر، فبيرسم القطر. والـ model اللي بيرتّب كل positive فوق كل negative بيطلع على الحافة الشمال على طول وبعدين يمشي على فوق، عن طريق الزاوية عند (0، 1) — فصل كامل. والـ models الحقيقية بتنحني في حتة ما بين الحالتين. وكل ما يبقى فوق وعلى الشمال أكتر يبقى أحسن.

الـ AUC: تقييم كل الـ thresholds مرة واحدة

المنحنى مفيد بس هو صورة، ومينفعش ترتّب models بالصور. والـ AUC — المساحة تحت الـ ROC curve — بيختصره في رقم واحد بين 0 و1. مساحة القطر 0.50، ومساحة الفصل الكامل 1.00. والكاشف بتاعنا بيطلع عند 0.90.

والـ AUC ليه تفسير أنفع بكتير من كلمة «مساحة»، ويستاهل تحفظه: الـ AUC هو احتمال إن مثال positive متختار عشوائي ياخد score أعلى من مثال negative متختار عشوائي. فـ AUC قده 0.90 معناه إنك لو خدت موقع عطلان وموقع سليم عشوائي، الكاشف هيحط العطلان أعلى تسع مرات من عشرة. هو بيقيس الـ model بـيرتّب كويس قد إيه، بعد ما يشيل الـ threshold من الصورة خالص.

والخاصية دي بتخلّي الـ AUC هو الـ metric الطبيعي لما الـ threshold لسه متحدّدش، أو لما اللي هيشغّل النظام هو اللي هيظبطه بعدين. وهي كمان السبب إن الـ AUC والـ F1 ممكن يختلفوا على أنهي model أحسن: الـ F1 بيحكم على نقطة تشغيل واحدة، والـ AUC بيحكم على الترتيب.

الـ AUC بيجامل المسائل اللي مش متوازنة

الكاشف بتاعنا الـ AUC بتاعه 0.90 والـ precision بتاعه 0.40، والرقمين صح. الـ false positive rate بيقسم على 9,900 negative، فالتسعين false positive بيتقروا كمعدّل 0.009 — حاجة تكاد ماتتذكرش. أما الـ precision فبيقسم على 150 موقع اتنبّه عليهم، فنفس التسعين بيسيطروا. ولما الفئة الـ negative تبقى ضخمة، قول الـ AUC جنب الـ precision والـ recall، مش بدالهم. والـ precision–recall curve، اللي بيحط الـ precision مكان الـ false positive rate، أداة أحدّ على بيانات مايلة بالشكل ده.

metrics الـ regression: الـ RMSE والـ MAE

ولا حاجة من كل اللي فات بتنطبق لما الـ model يتنبأ برقم مش بفئة. مفيش confusion matrix لجملة «الـ throughput هيبقى 47.3 ميجابت في الثانية» — الـ prediction مش صح أو غلط، هو غلطان بمقدار ما، والسؤال يبقى: عايز تلخّص المقادير دي إزاي؟

قابلت الـ MSE في الدرس اللي فات كـ loss function. وكـ metric بتعلنه ليه خاصية محرجة: وحداته مربع اللي اتنبأت بيه. و«الـ MSE بيساوي 10.9 ميجابت-في-الثانية-تربيع» مش جملة حد يقدر يتصرف على أساسها. وإنك تاخد الجذر التربيعي بيحل ده، فيدّيك الـ RMSE.

الجذر التربيعي لمتوسط مربع الخطأ
\text{RMSE}=\sqrt{\frac{1}{n}\sum_{i=1}^{n}(\hat{y}_i-y_i)^2}
ورجع للوحدات الأصلية. والـ RMSE دايمًا أكبر من الـ MAE أو بيساويه، وبيكبر كل ما الأخطاء تبقى متوزّعة بشكل متفاوت أكتر.

أما الـ MAE فبياخد متوسط الأخطاء المطلقة بدل المربّعة. وبيجاوب على أبسط سؤال ممكن — الـ model ده عادةً بيبعد قد إيه؟

متوسط الخطأ المطلق
\text{MAE}=\frac{1}{n}\sum_{i=1}^{n}\left|\hat{y}_i-y_i\right|
كل غلطة بتساهم على قد حجمها — لا أكتر ولا أقل.

والفرق بينهم كله عن الـ outliers، ومثال واحد بيخلّيه ملموس. اتنبأ بالـ throughput في عشر مواقع. تسع predictions كل واحد فيهم غلطان بـ 1 ميجابت في الثانية؛ والعاشر غلطان بـ 10.

الـ MAE = (9 × 1 + 10) / 10 = 1.9 ميجابت في الثانية. والـ RMSE = √((9 × 1 + 100) / 10) = √10.9 = 3.3 ميجابت في الثانية. الـ prediction الوحش الواحد بيساهم بـ 100 من الخطأ المربّع اللي مجموعه 109 — يعني 92% من الخطأ المربّع جوه الـ RMSE جاي من 10% من البيانات. أما الـ MAE فبيدّي نفس الـ prediction عُشر الوزن ده.

الـ R²: مقارنةً بإيه؟

الـ RMSE والـ MAE metrics مطلقة. وRMSE قده 3.3 ميجابت في الثانية كويس لو الـ throughput بيتغيّر بالمئات، ووحش لو بيتغيّر بخمسة، والرقم لوحده مش بيقولك أنهي فيهم. والـ R² — معامل التحديد — بيوفّر المقارنة الناقصة إنه يقيسك قصاد أكسل model ممكن: اتنبأ دايمًا بالمتوسط.

معامل التحديد
R^2=1-\frac{\sum_{i}(\hat{y}_i-y_i)^2}{\sum_{i}(\bar{y}-y_i)^2}
البسط هو الخطأ المربّع بتاع الـ model بتاعك؛ والمقام هو خطأ إنك تتنبأ بمتوسط y كل مرة، متربّع. والـ R² هي نسبة خطأ الـ baseline اللي شلته.

العشر مواقع بتوعنا كان خطأهم المربّع 109 قصاد 1,000 لو اتنبأت بالمتوسط دايمًا، فيبقى الـ R² = 1 − 109/1,000 = 0.89. اقراها كده: الـ model بيفسّر 89% من التغيّر اللي المتوسط سايبه من غير تفسير. وR² = 1 معناها الكمال، وR² = 0 معناها إنك ساويت المتوسط بالظبط، والـ R² ممكن تطلع سالبة — model أسوأ من المتوسط، ودي بتحصل على الـ test set أكتر ما تتوقع.

إمتى الـ MAE يبقى هو الاختيار الصادق

الـ RMSE هو الافتراضي في أغلب الأوراق البحثية وأغلب الدروس، فيستاهل نوضّح إمتى يبقى هو التقرير الغلط. اسأل سؤال واحد: هل الغلطة الكبيرة أسوأ فعلًا، بقدر مربعها؟

ساعات آه. لو بتحدّد حجم بطارية أو link budget أو buffer، فالغلطة بـ 10 أسوأ بكتير من عشر غلطات بـ 1، لأن الإخفاق الكبير الواحد هو اللي بيوقّع النظام. والتربيع بيعبّر عن ده، والـ RMSE هو الـ metric الصح.

وكتير لأ. لو الأخطاء المتطرفة بتاعتك جاية من بيانات بايظة مش من predictions وحشة — sensor واقف، أو صف عليه label غلط، أو قياس اتاخد وقت الصيانة — فالـ RMSE بيقولك على جودة جمع بياناتك مش على جودة الـ model بتاعك. ولو حسّنته، الـ model هيتلوى عشان يلحق noise كان المفروض يتجاهلها.

والقاعدة العملية: قول الاتنين. حسابهم مش بيكلّف حاجة، والفرق بينهم معلومة في حد ذاته — RMSE أكبر بكتير من الـ MAE بيقول إن أخطاءك مسيطر عليها شوية كبار، ولازم تروح تبص عليهم.

قايمة التقييم

1. قسّم train وvalidation وtest قبل ما تلمس أي حاجة تانية. 2. اتأكد من توازن الفئات — لو مايل يبقى الـ accuracy برّه الحساب. 3. اطبع الـ confusion matrix مش رقم بس. 4. قرّر أنهي غلطة أغلى، واختار الـ metric بتاعك على أساسها. 5. راجع الـ threshold؛ 0.5 قيمة افتراضية مش إجابة. 6. في الـ regression، قول الـ RMSE والـ MAE مع بعض، والـ R² للسياق. 7. افتح الـ test set مرة واحدة.

الوحدة الأولى بتخلص هنا. والوحدة التانية بترجع للـ linear regression بجد — ودلوقتي، بعد ما بقيت بتقيس الـ model صح، هتقدر تحكم إذا كانت التحسينات اللي بتعملها حقيقية ولا لأ.

أهم النقط
  • تلات مجموعات مش اتنين: الـ training بيظبط الـ parameters، والـ validation بيختار بين الـ models، والـ test بيتفتح مرة واحدة ويقدّر الأداء الحقيقي.
  • الـ leakage هو أي معلومة بتوصل للـ model ومش هتبقى موجودة وقت النشر — ومنها بصّاتك المتكررة على نتيجة الاختبار.
  • الـ accuracy مسيطرة عليها الفئة الأكتر. في مسألة 99% منها negative، «اتنبأ دايمًا بالـ negative» بيجيب accuracy 99.0% ومش بيلاقي حاجة.
  • الـ confusion matrix بتحتفظ بالأعداد الأربعة. الـ precision = TP/(TP+FP) هو قد إيه تثق في الإنذار، والـ recall = TP/(TP+FN) هو نسبة الحالات الحقيقية اللي اتلاقت.
  • فضّل الـ precision لما الإنذارات الكدابة تبقى مكلّفة، والـ recall لما الإخفاقات تبقى مكلّفة، والـ F1 — الوسط التوافقي — لما تحتاج رقم واحد للترتيب.
  • الـ ROC curve بيتبني بإنك تمسح الـ threshold وترسم الـ true positive rate قصاد الـ false positive rate. والـ AUC هو احتمال إن positive عشوائي يعدّي negative عشوائي؛ و0.50 هي الصدفة.
  • الـ RMSE بيعاقب الأخطاء الكبيرة تربيعيًا، والـ MAE بيوزن كل غلطة على قد حجمها، والـ R² بيقارنك بإنك تتنبأ بالمتوسط. قول الـ RMSE والـ MAE مع بعض.
الدرس اللي فاتأول model ليك في الـ Machine Learning: الفكرة نظرة عامة على الموديول الدرس اللي بعدهالـ linear regression (الانحدار الخطي)