{"checkpoints":{"s-ml-1":[{"q":"<p>نموذج انقطاع يحقق accuracy بقيمة 0.91 على العملاء الـ 298 الذين تدرّب عليهم و0.70 على العملاء المئة المحجوزين. وتحقق قاعدة الـ 80 يومًا 0.72 على العملاء المئة أنفسهم. ماذا يجب أن تقول للفريق؟</p>","options":[{"text":"النموذج ممتاز؛ و0.91 هو الرقم الذي يجب نشره.","why":"هذه نتيجة التدريب، وهي تقيس الحفظ. ونتيجة البيانات المحجوزة وحدها تتنبأ بالسلوك مع عملاء جدد."},{"text":"النموذج أفضل قليلًا من القاعدة لأن متوسط نتيجتيه أعلى.","why":"أخذ متوسط نتيجتي التدريب والاختبار يخلط رقمًا بلا معنى برقم ذي معنى."},{"text":"يحتاج النموذج إلى features أكثر قبل أن يمكن تقييمه.","why":"يمكن تقييمه الآن؛ والتقييم يقول إنه لا يتفوّق على القاعدة."},{"text":"النموذج يعاني من الـ overfitting ولا يتفوّق على القاعدة ذات السطر الواحد مع عملاء لم يرَهم، فهو غير جاهز ليحلّ محلها.","why":"صحيح. فجوة كبيرة بين التدريب والاختبار مع غياب أي تحسّن على خط أساس القاعدة تعني أنه لا مسوّغ للنموذج بعد."}],"answer":3},{"q":"<p>في بياناتك 10,000 صف ونسبة الفئة الإيجابية 3%. تستدعي <code dir=\"ltr\">train_test_split(X, y, test_size=0.2, random_state=0)</code>. ما الخطر الذي ينشأ عن ترك <code dir=\"ltr\">stratify=y</code>؟</p>","options":[{"text":"يصبح التقسيم غير قابل للتكرار.","why":"<code dir=\"ltr\">random_state=0</code> يجعله قابلًا للتكرار أصلًا."},{"text":"لا يمكن تدريب النموذج على بيانات غير متوازنة بدونه.","why":"الـ stratify يؤثر في طريقة تقسيم الصفوف، لا في قدرة النموذج على التدرّب."},{"text":"قد تنحرف حصة الإيجابيات في بيانات الاختبار عن 3%، فتصبح مقاييسها أقل تمثيلًا.","why":"صحيح. مع الفئات النادرة، قد يبالغ التقسيم غير الطبقي في تمثيل الإيجابيات في بيانات الاختبار أو يقلّل منه."},{"text":"ستحتوي بيانات التدريب على نسخ مكرّرة من صفوف الاختبار.","why":"لا تكرّر <code dir=\"ltr\">train_test_split</code> الصفوف أبدًا؛ فكل صف يذهب إلى جزء واحد بالضبط."}],"answer":2},{"q":"<p>ماذا يطبع هذا الكود؟</p>\n<div class=\"code-block\" dir=\"ltr\" data-lang=\"python\" data-index=\"0\"><div class=\"code-head\"><span class=\"code-title\">Python</span><span class=\"code-actions\"><button type=\"button\" class=\"code-btn\" data-action=\"copy\" aria-label=\"نسخ الكود\"><svg class=\"icon \" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\" focusable=\"false\"><rect width=\"14\" height=\"14\" x=\"8\" y=\"8\" rx=\"2\" ry=\"2\"/><path d=\"M4 16c-1.1 0-2-.9-2-2V4c0-1.1.9-2 2-2h10c1.1 0 2 .9 2 2\"/></svg><span>نسخ</span></button></span></div><pre class=\"shiki\" tabindex=\"0\"><code><span class=\"line\"><span style=\"color:#CF222E;--shiki-dark:#FF7B72\">from</span><span style=\"color:#1F2328;--shiki-dark:#E6EDF3\"> sklearn.dummy </span><span style=\"color:#CF222E;--shiki-dark:#FF7B72\">import</span><span style=\"color:#1F2328;--shiki-dark:#E6EDF3\"> DummyClassifier</span></span>\n<span class=\"line\"><span style=\"color:#CF222E;--shiki-dark:#FF7B72\">import</span><span style=\"color:#1F2328;--shiki-dark:#E6EDF3\"> numpy </span><span style=\"color:#CF222E;--shiki-dark:#FF7B72\">as</span><span style=\"color:#1F2328;--shiki-dark:#E6EDF3\"> np</span></span>\n<span class=\"line\"><span style=\"color:#1F2328;--shiki-dark:#E6EDF3\">X </span><span style=\"color:#CF222E;--shiki-dark:#FF7B72\">=</span><span style=\"color:#1F2328;--shiki-dark:#E6EDF3\"> np.zeros((</span><span style=\"color:#0550AE;--shiki-dark:#79C0FF\">10</span><span style=\"color:#1F2328;--shiki-dark:#E6EDF3\">, </span><span style=\"color:#0550AE;--shiki-dark:#79C0FF\">1</span><span style=\"color:#1F2328;--shiki-dark:#E6EDF3\">))</span></span>\n<span class=\"line\"><span style=\"color:#1F2328;--shiki-dark:#E6EDF3\">y </span><span style=\"color:#CF222E;--shiki-dark:#FF7B72\">=</span><span style=\"color:#1F2328;--shiki-dark:#E6EDF3\"> np.array([</span><span style=\"color:#0550AE;--shiki-dark:#79C0FF\">1</span><span style=\"color:#1F2328;--shiki-dark:#E6EDF3\">, </span><span style=\"color:#0550AE;--shiki-dark:#79C0FF\">1</span><span style=\"color:#1F2328;--shiki-dark:#E6EDF3\">, </span><span style=\"color:#0550AE;--shiki-dark:#79C0FF\">1</span><span style=\"color:#1F2328;--shiki-dark:#E6EDF3\">, </span><span style=\"color:#0550AE;--shiki-dark:#79C0FF\">0</span><span style=\"color:#1F2328;--shiki-dark:#E6EDF3\">, </span><span style=\"color:#0550AE;--shiki-dark:#79C0FF\">0</span><span style=\"color:#1F2328;--shiki-dark:#E6EDF3\">, </span><span style=\"color:#0550AE;--shiki-dark:#79C0FF\">0</span><span style=\"color:#1F2328;--shiki-dark:#E6EDF3\">, </span><span style=\"color:#0550AE;--shiki-dark:#79C0FF\">0</span><span style=\"color:#1F2328;--shiki-dark:#E6EDF3\">, </span><span style=\"color:#0550AE;--shiki-dark:#79C0FF\">0</span><span style=\"color:#1F2328;--shiki-dark:#E6EDF3\">, </span><span style=\"color:#0550AE;--shiki-dark:#79C0FF\">0</span><span style=\"color:#1F2328;--shiki-dark:#E6EDF3\">, </span><span style=\"color:#0550AE;--shiki-dark:#79C0FF\">0</span><span style=\"color:#1F2328;--shiki-dark:#E6EDF3\">])</span></span>\n<span class=\"line\"><span style=\"color:#0550AE;--shiki-dark:#79C0FF\">print</span><span style=\"color:#1F2328;--shiki-dark:#E6EDF3\">(DummyClassifier(</span><span style=\"color:#953800;--shiki-dark:#FFA657\">strategy</span><span style=\"color:#CF222E;--shiki-dark:#FF7B72\">=</span><span style=\"color:#0A3069;--shiki-dark:#A5D6FF\">\"most_frequent\"</span><span style=\"color:#1F2328;--shiki-dark:#E6EDF3\">).fit(X, y).score(X, y))</span></span></code></pre></div>\n","options":[{"text":"0.7","why":"صحيح. الفئة الأكثر تكرارًا هي 0 (سبعة من عشرة)، فالتنبؤ بـ 0 للجميع يصيب في 70% من الحالات."},{"text":"0.3","why":"هذه حصة فئة الأقلية، التي لا يتنبأ بها النموذج الوهمي أبدًا."},{"text":"0.5","why":"لا يخمّن النموذج الوهمي عشوائيًا مع هذه الاستراتيجية؛ بل يتنبأ دائمًا بفئة الأغلبية."},{"text":"خطأ، لأن X لا يحتوي إلا أصفارًا.","why":"يتجاهل النموذج الوهمي X تمامًا، فالأصفار لا مشكلة فيها."}],"answer":0},{"q":"<p>درّبت <code dir=\"ltr\">model = KNeighborsClassifier().fit(X_train, y_train)</code> ثم استدعيت لاحقًا <code dir=\"ltr\">model.fit(X_new, y_new)</code> على دفعة ثانية من البيانات. ماذا يعرف النموذج الآن؟</p>","options":[{"text":"الدفعتين كلتيهما، لأن <code dir=\"ltr\">fit</code> يضيف البيانات الجديدة إلى ما تعلّمه سابقًا.","why":"لا يراكم <code dir=\"ltr\">fit</code> في scikit-learn؛ بل يبدأ من الصفر في كل مرة."},{"text":"لا شيء، لأن النموذج لا يمكن تدريبه إلا مرة واحدة.","why":"يمكنك إعادة التدريب بقدر ما تشاء؛ وكل استدعاء يحلّ محل التعلّم السابق."},{"text":"الدفعة الأولى فقط؛ والاستدعاء الثاني يُتجاهل.","why":"الاستدعاء الثاني لا يُتجاهل؛ بل يكتب فوق الأول."},{"text":"الدفعة الثانية فقط، لأن استدعاء <code dir=\"ltr\">fit</code> مجددًا يمحو ما تعلّمه سابقًا.","why":"صحيح. لتتعلّم من الدفعتين، درّب مرة واحدة على البيانات مجتمعة."}],"answer":3},{"q":"<p>أيّ الأسئلة التالية مصاغ بما يكفي لبدء مشروع تعلّم موجَّه؟</p>","options":[{"text":"استخدم الذكاء الاصطناعي لتقليل الانقطاع.","why":"لا هدف، ولا لحظة تنبؤ، ولا إجراء؛ إنه غاية، لا صياغة لمسألة."},{"text":"في أول كل شهر، تنبّأ لكل عميل نشط بما إذا كان لن يقدّم أي طلب خلال الـ 90 يومًا القادمة، كي يختار فريق التسويق من يحصل على عرض.","why":"صحيح. إنه يسمّي الهدف، والفئة المستهدفة، ووقت التنبؤ، والقرار الذي يغذّيه."},{"text":"اكتشف كل ما يسبّب الانقطاع.","why":"هذا سؤال بحث سببي؛ ولا يستطيع نموذج تنبؤي وحده الإجابة عنه."},{"text":"ابنِ أدقّ نموذج ممكن على churn.csv.","why":"دقة لأيّ قرار، وفي أيّ لحظة؟ دون صياغة لا يمكنك اختيار المقاييس أو فحص التسرّب."}],"answer":1}],"s-ml-2":[{"q":"<p>نموذج يتنبأ بأزمنة التوصيل بالساعات قيمة MAE فيه 2.0 وRMSE فيه 9.5 على بيانات الاختبار. ما القصة الأرجح؟</p>","options":[{"text":"النموذج منحاز نحو التنبؤ بأوقات أبكر من اللازم.","why":"لا يكشف أيّ من المقياسين الاتجاه؛ تحتاج إلى متوسط البواقي."},{"text":"يجب أن يتساوى RMSE وMAE، فأحدهما حُسب خطأً.","why":"RMSE لا يكون أبدًا أصغر من MAE وعادةً يكون أكبر؛ والفجوة الكبيرة معلومة، لا خطأ."},{"text":"معظم التنبؤات قريبة، لكن قليلًا منها بعيد جدًا، والتربيع يجعل هذه تهيمن على RMSE.","why":"صحيح. حقّق في الأخطاء الكبيرة: فقد تكون حالة متميّزة، مثل تأخيرات الجمارك."},{"text":"النموذج يفسّر 95% من التباين.","why":"لا MAE ولا RMSE حصة من التباين؛ فهذا هو R²."}],"answer":2},{"q":"<p>يطبع الـ gradient descent على نموذج خطي خسارة تنخفض لـ 20 خطوة، ثم تستقر عند قيمة أعلى مما يبلغه <code dir=\"ltr\">LinearRegression</code>. الـ features غير موحّدة المقاييس، وتتراوح من 0–1 إلى 0–50,000. ما الإصلاح الأرجح؟</p>","options":[{"text":"أضف polynomial features ليصبح للنموذج قدرة أكبر.","why":"للنموذج قدرة كافية؛ فـ <code dir=\"ltr\">LinearRegression</code> يبلغ خسارة أقل بالـ features نفسها."},{"text":"ارفع معدّل التعلّم عشر مرات.","why":"مع features سيئة المقاييس، يميل المعدّل الأكبر إلى التباعد على الاتجاه الشديد الانحدار."},{"text":"استخدم بيانات اختبار أصغر.","why":"لا علاقة لبيانات الاختبار بكيفية تقارب التدريب."},{"text":"وحّد مقاييس الـ features كي لا يكون سطح الخسارة واديًا طويلًا ضيقًا، ثم أعد التشغيل.","why":"صحيح. توحيد المقاييس يتيح لمعدّل تعلّم واحد أن يعمل في كل الاتجاهات، فيبلغ البحث القاع الحقيقي."}],"answer":3},{"q":"<p>نموذج كثير حدود من الدرجة 4 يحقق R² بقيمة 0.93 على بيانات التدريب و0.21 على بيانات التحقق؛ ونموذج من الدرجة 1 يحقق 0.48 و0.46. أيّ تغيير ستجرّبه أولًا على نموذج الدرجة 4؟</p>","options":[{"text":"درّبه مدة أطول.","why":"المربعات الصغرى العادية تُحلّ بدقة؛ فلا معنى لـ “أطول”. المشكلة مرونة زائدة."},{"text":"أضف عقوبة Ridge واختر <code dir=\"ltr\">alpha</code> على بيانات التحقق.","why":"صحيح. يحتفظ الـ regularization بالأعمدة الإضافية لكنه يقلّص المعاملات التي لا تلائم إلا الضجيج."},{"text":"انشر قيمة R² للتدريب، لأن بيانات التحقق صغيرة.","why":"نتيجة التدريب تقيس الحفظ؛ ونشرها سيُخفي الـ overfitting."},{"text":"ارفع الدرجة إلى 6 لالتقاط النمط بالكامل.","why":"المرونة الإضافية ستوسّع الفجوة بين التدريب والتحقق أكثر."}],"answer":1},{"q":"<p>درّبت <code dir=\"ltr\">Lasso(alpha=1)</code> مباشرة على features خام حيث <code dir=\"ltr\">income</code> بالدولار (عشرات الآلاف) و<code dir=\"ltr\">age</code> بالسنوات. ما الخطأ الذي يحدث؟</p>","options":[{"text":"يرفض Lasso تدريب features ذات وحدات مختلفة.","why":"يتدرّب دون أي اعتراض، وهنا يكمن الخطر."},{"text":"لا شيء؛ Lasso لا يتأثر بالمقياس مثل أشجار القرار.","why":"النماذج المعاقَبة تتأثر بالمقياس؛ فالعقوبة تعتمد على حجم المعاملات."},{"text":"سيحصل الدخل على معامل ضخم ويهيمن على النموذج.","why":"العكس: الـ features ذات القيم الكبيرة تحتاج إلى معاملات صغيرة، لا تكاد تشعر بالعقوبة."},{"text":"تعامل العقوبة المعاملات بشكل غير عادل: الـ features ذات النطاقات الرقمية الصغيرة تحتاج إلى معاملات كبيرة فتُقلَّص أو تُصفَّر بسبب وحداتها، لا فائدتها.","why":"صحيح. ضع <code dir=\"ltr\">StandardScaler</code> قبل Lasso كي تقارن العقوبة بين أشياء متماثلة."}],"answer":3},{"q":"<p>تُعيد <code dir=\"ltr\">r2_score(y_test, pred)</code> القيمة 0.0 لنموذج جديد. أيّ عبارة صحيحة؟</p>","options":[{"text":"خطؤه المربّع على بيانات الاختبار يساوي خطأ التنبؤ الدائم بمتوسط <code dir=\"ltr\">y_test</code>.","why":"صحيح. R² = 1 − SSE_model / SSE_mean، فالصفر يعني عدم التحسّن على المتوسط."},{"text":"كل تنبؤ يساوي صفرًا بالضبط.","why":"يقارن R² أحجام الأخطاء؛ وقد تكون التنبؤات أي قيم لها مجموع الخطأ المربّع نفسه الذي للمتوسط."},{"text":"ليس للنموذج معاملات.","why":"لا يقول R² شيئًا عن شكل النموذج."},{"text":"النموذج مثالي لكن المقياس فشل.","why":"النموذج المثالي يحقق 1.0."}],"answer":0}],"s-ml-3":[{"q":"<p>يجب أن يلتقط نموذج احتيال 90% من حالات الاحتيال على الأقل؛ ويستطيع المحلّلون مراجعة 500 تنبيه يوميًا كحدّ أقصى. أيّ زوج من الأرقام تحتاجه من التحقق لاختيار عتبة؟</p>","options":[{"text":"الـ accuracy والـ ROC AUC.","why":"لا يخبرك أيّ منهما بالـ recall أو بعدد التنبيهات التي تنتجها العتبة."},{"text":"دقة التدريب ودقة الاختبار.","why":"هذا يفحص الـ overfitting، لا ما إذا كانت نقطة التشغيل تفي بالقيود."},{"text":"الـ precision والـ F1 عند العتبة الافتراضية.","why":"قد لا تفي العتبة الافتراضية بأيٍّ من القيدين؛ تحتاج إلى قيم عبر العتبات."},{"text":"الـ recall وعدد الحالات المُعلَّمة عند كل عتبة مرشّحة.","why":"صحيح. اختر العتبة التي تبلغ recall بنسبة 90% مع إبقاء التنبيهات اليومية دون 500، إن وُجدت."}],"answer":3},{"q":"<p>غابة عشوائية تستخدم 500 شجرة مكتملة النمو. أيّ تغيير يخفض زمن تدريبها بشكل مباشر دون أن يضرّ الـ accuracy كثيرًا عادةً؟</p>","options":[{"text":"اضبط <code dir=\"ltr\">max_depth=1</code> لتكون كل شجرة تقسيمًا واحدًا.","why":"الجذوع (stumps) سريعة لكن كلًّا منها أضعف بكثير من اللازم؛ وغابة الجذوع تقع عادةً في underfitting شديد."},{"text":"أزل سحب عيّنات الـ bootstrap.","why":"سحب العيّنات ليس ما يجعل التدريب بطيئًا، وهو جزء مما يجعل الأشجار متنوّعة."},{"text":"استخدم أشجارًا أقل، مثل 200، لأن مكاسب الأشجار الإضافية تتسطّح.","why":"صحيح. تستقر دقة الغابة مع إضافة الأشجار؛ وبعد تلك النقطة لا تكلّف الأشجار الإضافية إلا الوقت."},{"text":"وحّد مقاييس الـ features أولًا.","why":"تقسم الأشجار على ترتيب القيم؛ وتوحيد المقاييس لا يسرّعها ولا يغيّر تنبؤاتها."}],"answer":2},{"q":"<div class=\"code-block\" dir=\"ltr\" data-lang=\"python\" data-index=\"1\"><div class=\"code-head\"><span class=\"code-title\">Python</span><span class=\"code-actions\"><button type=\"button\" class=\"code-btn\" data-action=\"copy\" aria-label=\"نسخ الكود\"><svg class=\"icon \" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\" focusable=\"false\"><rect width=\"14\" height=\"14\" x=\"8\" y=\"8\" rx=\"2\" ry=\"2\"/><path d=\"M4 16c-1.1 0-2-.9-2-2V4c0-1.1.9-2 2-2h10c1.1 0 2 .9 2 2\"/></svg><span>نسخ</span></button></span></div><pre class=\"shiki\" tabindex=\"0\"><code><span class=\"line\"><span style=\"color:#1F2328;--shiki-dark:#E6EDF3\">prob </span><span style=\"color:#CF222E;--shiki-dark:#FF7B72\">=</span><span style=\"color:#1F2328;--shiki-dark:#E6EDF3\"> model.predict_proba(X_test)</span></span>\n<span class=\"line\"><span style=\"color:#0550AE;--shiki-dark:#79C0FF\">print</span><span style=\"color:#1F2328;--shiki-dark:#E6EDF3\">(roc_auc_score(y_test, prob))</span></span></code></pre></div>\n<p>في مسألة ثنائية، يرفع هذا الكود خطأً. ما الإصلاح؟</p>\n","options":[{"text":"استخدم <code dir=\"ltr\">model.predict(X_test)</code> بدلًا منه.","why":"هذا يمرّر labels قاطعة، فيرمي الترتيب الذي يُفترض أن يقيسه الـ ROC AUC."},{"text":"مرّر احتمال الفئة الإيجابية: <code dir=\"ltr\">prob[:, 1]</code>.","why":"صحيح. تُعيد <code dir=\"ltr\">predict_proba</code> عمودين؛ ويحتاج الـ ROC AUC إلى درجات الفئة الإيجابية كمصفوفة أحادية البعد."},{"text":"رتّب <code dir=\"ltr\">y_test</code> قبل استدعاء المقياس.","why":"ترتيب الـ labels سيكسر اقترانها بالتنبؤات."},{"text":"حوّل <code dir=\"ltr\">prob</code> إلى قائمة.","why":"المشكلة في الشكل، لا في النوع."}],"answer":1},{"q":"<p>نموذج انقطاع قائم على الأشجار وانحدار لوجستي لكلٍّ منهما ROC AUC بقيمة 0.80 على الطيّات نفسها. تحتاج الشركة إلى احتمالات تعني ما تقوله، لتوقّع عدد العملاء الذين سيرحلون. أيّهما الخيار الأول الأكثر أمانًا؟</p>","options":[{"text":"الانحدار اللوجستي، الذي تكون احتمالاته عادةً أقرب إلى المعايرة دون أي تعديل.","why":"صحيح. النماذج المجمّعة من الأشجار تحتاج غالبًا إلى معايرة (مثلًا <code dir=\"ltr\">CalibratedClassifierCV</code>) قبل أن تُستخدم احتمالاتها كتكرارات."},{"text":"نموذج الأشجار، لأن الأشجار تنتج دائمًا احتمالات معايَرة.","why":"احتمالات الأشجار والنماذج المجمّعة كثيرًا ما تكون سيئة المعايرة، خاصة من الأشجار العميقة."},{"text":"أيّهما؛ فتساوي الـ AUC يعني تساوي الاحتمالات.","why":"لا يقيس الـ AUC إلا الترتيب. وقد يرتّب نموذجان بشكل متطابق بينما تختلف احتمالاتهما كثيرًا."},{"text":"لا هذا ولا ذاك؛ فالاحتمالات لا يمكن استخدامها للأعداد.","why":"الاحتمالات المعايَرة إذا جُمعت عبر العملاء تعطي عددًا متوقعًا؛ وهذا استخدام معياري."}],"answer":0},{"q":"<p>في بيانات يتعثّر فيها 2% من القروض، يرفع نموذج مع <code dir=\"ltr\">class_weight=&quot;balanced&quot;</code> الـ recall من 0.40 إلى 0.75 ويخفض الـ precision من 0.60 إلى 0.20. ماذا حدث؟</p>","options":[{"text":"صار النموذج أسوأ في كل شيء ويجب التخلّص منه.","why":"صار يجد حالات تعثّر أكثر بكثير؛ وما إذا كان ذلك أفضل يعتمد على كلفة كل خطأ."},{"text":"سرّبت الأوزان labels الاختبار إلى التدريب.","why":"تأتي أوزان الفئات من تكرارات labels التدريب؛ ولا تلمس بيانات الاختبار."},{"text":"صارت أخطاء حالات التعثّر تكلّف أكثر أثناء التدريب، فيُعلِّم النموذج قروضًا أكثر بكثير: يلتقط تعثّرات أكثر لكن مع إنذارات كاذبة أكثر.","why":"صحيح. إنها المفاضلة نفسها التي يحدثها خفض العتبة، لكن مدمجة في التدريب."},{"text":"لا بد أن الـ accuracy ارتفعت، لأن الـ recall ارتفعت.","why":"مع إيجابيات كاذبة أكثر في الأغلبية البالغة 98%، تنخفض الـ accuracy عادةً."}],"answer":2}],"s-ml-4":[{"q":"<p>وحّدت مقاييس <code dir=\"ltr\">X</code> كلها بـ <code dir=\"ltr\">StandardScaler().fit_transform(X)</code> ثم شغّلت <code dir=\"ltr\">cross_val_score(LogisticRegression(), X_scaled, y, cv=5)</code>. ما المشكلة وما الإصلاح؟</p>","options":[{"text":"لا مشكلة؛ توحيد المقاييس غير موجَّه فلا يمكن أن يسرّب.","why":"لا يستخدم الـ labels، لكن صفوف التحقق أثّرت مع ذلك في المتوسطات والانحرافات المعيارية. وهذه العادة تقود إلى تسرّبات حقيقية مع خطوات أخرى."},{"text":"أثّرت طيّات التحقق في الـ scaler؛ ضع الـ scaler في pipeline وطبّق التحقق المتقاطع على الـ pipeline مع <code dir=\"ltr\">X</code> الخام.","why":"صحيح. يعيد الـ pipeline تدريب الـ scaler داخل كل طيّة، على صفوف التدريب وحدها."},{"text":"الانحدار اللوجستي لا يحتاج إلى توحيد المقاييس؛ أزله.","why":"إنه يستفيد من توحيد المقاييس (في التقارب وعدالة العقوبة)؛ والمشكلة في مكان تدريبه."},{"text":"استخدم <code dir=\"ltr\">cv=10</code> كي يتلاشى التسرّب بالتوسيط.","why":"الطيّات الأكثر لا تزيل التسرّب؛ فكل طيّة تظل متأثرة."}],"answer":1},{"q":"<p>دُرِّب <code dir=\"ltr\">GridSearchCV</code> على 3 قيم لـ <code dir=\"ltr\">max_depth</code> و4 قيم لـ <code dir=\"ltr\">min_samples_leaf</code>، مع <code dir=\"ltr\">cv=5</code> والقيمة الافتراضية <code dir=\"ltr\">refit=True</code>، مرة واحدة. كم عملية تدريب نموذج تحدث؟</p>","options":[{"text":"12","why":"هذا عدد التركيبات، وكلٌّ منها يخضع للتحقق المتقاطع."},{"text":"17","why":"هذا يجمع الطيّات بدل أن يضرب فيها."},{"text":"60","why":"قريب، لكن القيمة الافتراضية <code dir=\"ltr\">refit=True</code> تضيف تدريبًا نهائيًا واحدًا على بيانات التدريب كلها."},{"text":"61","why":"صحيح. 3 × 4 تركيبات × 5 طيّات = 60، إضافة إلى إعادة تدريب واحدة للفائز."}],"answer":3},{"q":"<p>في جدولك صف لكل طلب، وعدة طلبات لكل عميل، وتريد أن تعرف مدى نجاح النموذج مع عملاء جدد. أيّ إعداد تحقق هو الصحيح؟</p>","options":[{"text":"<code dir=\"ltr\">StratifiedKFold(shuffle=True)</code> على الطلبات.","why":"ستقع طلبات العميل نفسه في طيّات التدريب والتحقق معًا، فتُجمَّل النتيجة."},{"text":"تقسيم عشوائي 80/20 على الطلبات مع <code dir=\"ltr\">random_state</code> ثابت.","why":"قابل للتكرار، لكنه يظل يوزّع طلبات كل عميل على جهتي التقسيم."},{"text":"<code dir=\"ltr\">GroupKFold</code> مع <code dir=\"ltr\">groups=customer_id</code>.","why":"صحيح. تبقى طلبات كل عميل معًا، فيقيس التحقق الأداء على عملاء غير مرئيين."},{"text":"<code dir=\"ltr\">TimeSeriesSplit</code> على معرّفات العملاء مرتّبة أبجديًا.","why":"الترتيب بحسب الاسم لا معنى له؛ وتبقى مشكلة التجميع قائمة."}],"answer":2},{"q":"<p>feature جديد، <code dir=\"ltr\">orders_last_30_days</code>، يرفع الـ ROC AUC بالتحقق المتقاطع من 0.81 إلى 0.95. تاريخ اللقطة 30 سبتمبر والهدف هو الانقطاع في الـ 90 يومًا التالية. ما الذي تتحقق منه أولًا؟</p>","options":[{"text":"أيّ ثلاثين يومًا يغطيها العمود: إذا وقع أيٌّ منها بعد 30 سبتمبر، فهذا تسرّب للهدف.","why":"صحيح. قفزة بهذا الحجم من عمود واحد هي العلامة الكلاسيكية لـ feature سُجّل داخل نافذة النتيجة."},{"text":"هل تستطيع غابة أكبر رفع الـ AUC أكثر.","why":"التحسين الإضافي قبل استبعاد التسرّب بناءٌ على رقم لا يمكنك الوثوق به."},{"text":"هل الانحراف المعياري للطيّات صغير.","why":"الـ feature المسرِّب ينتج نتائج مرتفعة باتّساق في كل طيّة؛ والتشتّت الصغير لا يستبعده."},{"text":"هل يحتاج الـ feature إلى توحيد المقاييس.","why":"توحيد المقاييس لن يفسّر قفزة من 14 نقطة."}],"answer":0},{"q":"<p>الـ ROC AUC بالتحقق المتقاطع: الانحدار اللوجستي 0.807 ± 0.034، والـ gradient boosting 0.815 ± 0.055، على الطيّات نفسها. والـ boosting أبطأ وأصعب في الشرح. ما القرار القابل للدفاع عنه؟</p>","options":[{"text":"أطلق الـ boosting؛ فالمتوسط الأعلى يفوز دائمًا.","why":"الفجوة جزء صغير من أيٍّ من التشتّتين، فقد ينقلب الترتيب مع خلط مختلف."},{"text":"شغّل بيانات الاختبار على الاثنين وأطلق الفائز هناك.","why":"هذا يحوّل بيانات الاختبار إلى أداة اختيار ويضيف مقارنة أخرى مليئة بالضجيج."},{"text":"أطلق الاثنين وخذ متوسطهما، فأخذ المتوسط يساعد دائمًا.","why":"قد يساعد الجمع، لكنه يضاعف الكلفة والتعقيد دون دليل على الحاجة إليه."},{"text":"عاملهما على أنهما متعادلان وأطلق الانحدار اللوجستي، مع إعادة النظر حين تصل بيانات أكثر.","why":"صحيح. حين يتعادل الأداء ضمن هامش الضجيج، يفوز النموذج الأبسط والأرخص والأسهل في الشرح."}],"answer":3}],"s-ml-5":[{"q":"<p>شغّلت k-means بـ k=5 على بيانات العملاء دون توحيد المقاييس. أحد الأعمدة الإنفاق السنوي بالدولار؛ والبقية أعداد تحت 20. ماذا ستعكس العناقيد في الغالب؟</p>","options":[{"text":"مزيجًا متوازنًا من كل الأعمدة.","why":"تستخدم k-means المسافات الخام، فيهيمن العمود صاحب النطاق الأكبر."},{"text":"أعمدة الأعداد، لأنها أكثر عددًا.","why":"عدة أعمدة ذات نطاق صغير مجتمعة تظل تساهم في المسافة بأقل بكثير من عمود واحد بالآلاف."},{"text":"نطاقات من الإنفاق السنوي، لأنه يهيمن على المسافات.","why":"صحيح. وحّد مقاييس الـ features أولًا إن أردت أن يكون لكل عمود وزن."},{"text":"تجميعات عشوائية، لأن k-means لا تستطيع التعامل مع وحدات مختلطة.","why":"تتعامل معها بشكل حتمي؛ لكن النتيجة تخضع لهيمنة المقياس الأكبر."}],"answer":2},{"q":"<p>ما الفرق الجوهري بين إجابة LLM عن ‘قيّم خطر انقطاع هذا العميل من 0 إلى 100’ و<code dir=\"ltr\">predict_proba</code> من انحدار لوجستي متحقَّق منه؟</p>","options":[{"text":"رقم الـ LLM أدق لأن النموذج أكبر.","why":"الحجم لا يجعل رقمًا غير متحقَّق منه دقيقًا لعملائك."},{"text":"لا فرق؛ فكلاهما مخرجات نموذج.","why":"أحدهما فُحص مقابل نتائج حقيقية على بيانات محجوزة؛ والآخر لم يُفحص."},{"text":"<code dir=\"ltr\">predict_proba</code> لا يمكن استخدامها للترتيب.","why":"تُستخدم للترتيب كثيرًا؛ وهكذا بُنيت قائمة الاتصالات في القسم 3."},{"text":"احتمالات الانحدار اللوجستي دُرِّبت واختُبرت مقابل نتائج الانقطاع الفعلية؛ أما رقم الـ LLM فنص مولَّد لم يمرّ بذلك.","why":"صحيح. أي درجة ينتجها LLM تحتاج إلى التحقق نفسه قبل أن تقود القرارات."}],"answer":3},{"q":"<p>نموذج موافقات له نِسب اختيار متساوية لمجموعتين، لكن الـ recall 0.85 للمجموعة A و0.60 للمجموعة B. المتقدّمون في B الذين كانوا سيسدّدون يُرفضون أكثر. أيّ معيار إنصاف يُنتهك؟</p>","options":[{"text":"الـ demographic parity (تساوي نِسب الاختيار).","why":"نِسب الاختيار متساوية هنا؛ فهذا المعيار متحقق."},{"text":"الـ equal opportunity (تساوي معدّلات الإيجابيات الصحيحة).","why":"صحيح. المؤهَّلون في المجموعة B يُوافَق عليهم أقل مما في المجموعة A."},{"text":"المعايرة، لأن الـ recall مقياس للمعايرة.","why":"تقيس الـ recall عدد الإيجابيات الصحيحة التي يُعثر عليها، لا ما إذا كانت الاحتمالات تطابق التكرارات."},{"text":"لا شيء؛ فالإنصاف لا يتعلّق إلا بنِسب الاختيار.","why":"نِسب الاختيار تعريف واحد من عدة تعريفات؛ وهذه الحالة تبيّن لماذا لا تكفي."}],"answer":1},{"q":"<p>تُظهر فحوص المدخلات لنموذج انقطاع مُطلَق أن <code dir=\"ltr\">mobile_share</code> ينجرف بحدّة بعد إطلاق تطبيق جديد، لكن نتائج الـ 90 يومًا لم تصل بعد. ما الاستجابة المعقولة؟</p>","options":[{"text":"لا تفعل شيئًا حتى تُثبت النتائج أن الأداء انخفض.","why":"انتظار ربع سنة يتجاهل إنذارًا مبكرًا يمكنك التحقيق فيه الآن."},{"text":"احذف <code dir=\"ltr\">mobile_share</code> من النموذج فورًا.","why":"حذف feature دون دليل على أنه يضرّ قد يجعل الأمور أسوأ، ويحتاج على أي حال إلى إعادة تدريب وتحقق."},{"text":"حقّق في الانزياح، وافحص نِسب العملاء المُعلَّمين في كل مجموعة، وخطّط لإعادة التدريب والفحص حين تتوفر بيانات جديدة ذات labels كافية.","why":"صحيح. الانجراف إشارة للنظر والاستعداد والتأكد، لا سبب للذعر أو التجاهل."},{"text":"اخفض العتبة لتعويض ذلك.","why":"تعديل العتبة بشكل أعمى يُخفي الانجراف بدل أن يفهمه."}],"answer":2},{"q":"<p>أيّ ممارسة تحميك أكثر من غيرها عند تحميل <code dir=\"ltr\">model.joblib</code> في بيئة الإنتاج؟</p>","options":[{"text":"اضغط الملف كي لا يمكن تعديله.","why":"الضغط لا يمنع التلاعب ولا تنفيذ الكود."},{"text":"أعد تسميته إلى <code dir=\"ltr\">.pkl</code> كي تتعرّف عليه الأدوات.","why":"الامتداد لا يغيّر شيئًا مما يستطيع التحميل تنفيذه."},{"text":"حمّله بأحدث إصدار متاح من scikit-learn.","why":"عدم تطابق الإصدار مع إصدار التدريب قد يكسر السلوك أو يغيّره؛ ثبّت إصدار التدريب بدلًا من ذلك."},{"text":"لا تحمّل إلا الملفات القادمة من مخزن النماذج الخاص بك المحكوم الصلاحيات، وبإصدار scikit-learn المسجّل وقت التدريب.","why":"صحيح. ملفات joblib قد تشغّل كودًا عند التحميل، وتثبيت الإصدار يُبقي السلوك متطابقًا."}],"answer":3}]},"final":[{"q":"<p>يعرض عليك زميل نموذج احتيال بـ accuracy تبلغ 99.1%. والاحتيال 0.8% من المعاملات. ما سؤالك الأول؟</p>","options":[{"text":"كم استغرق تدريبه؟","why":"زمن التدريب لا يخبرك ما إذا كان النموذج يلتقط الاحتيال."},{"text":"أيّ خوارزمية استخدمت؟","why":"الخوارزمية أقل أهمية من كونه يتفوّق على عدم فعل شيء."},{"text":"هل خُلطت البيانات قبل التقسيم؟","why":"سؤال منصف في وقت ما، لكن هناك سؤالًا أكثر جوهرية أولًا."},{"text":"كم يحقق التنبؤ الدائم بـ ‘ليس احتيالًا’، وما الـ precision والـ recall على الاحتيال؟","why":"صحيح. النموذج الوهمي للفئة الأكثر شيوعًا يحقق 99.2% هنا؛ والـ accuracy وحدها لا تقول شيئًا عن التقاط الاحتيال."}],"answer":3},{"q":"<p>أيّ pipeline خالٍ من التسرّب للتحقق المتقاطع لنموذج على بيانات فيها قيم مفقودة وفئات نصية؟</p>","options":[{"text":"<code dir=\"ltr\">make_pipeline(ColumnTransformer([...imputer, scaler..., ...OneHotEncoder...]), model)</code> مُمرَّرًا إلى <code dir=\"ltr\">cross_val_score</code> مع الـ DataFrame الخام.","why":"صحيح. كل خطوة متعلَّمة يُعاد تدريبها داخل كل طيّة على صفوف التدريب وحدها."},{"text":"املأ القيم المفقودة ورمّز الـ DataFrame كله، ثم مرّر الناتج والنموذج إلى <code dir=\"ltr\">cross_val_score</code>.","why":"تعلّم الـ imputer والـ encoder من صفوف التحقق قبل إنشاء الطيّات."},{"text":"املأ القيم المفقودة في بيانات التدريب والاختبار كلٍّ على حدة بوسيطاتها الخاصة.","why":"يحصل كل جزء على وسيطات مختلفة، فتُعامَل القيمة الخام نفسها بشكل غير متّسق."},{"text":"احذف كل صف فيه قيمة مفقودة، ثم رمّز الـ DataFrame كله.","why":"حذف الصفوف قد ينحاز بالعيّنة، والترميز قبل التقسيم يظل يتيح لصفوف التحقق تشكيل الأعمدة."}],"answer":0},{"q":"<p>الـ ROC AUC لنموذج الانقطاع لديك 0.81 وتريد الشركة التواصل مع 200 عميل شهريًا. أيّ مخرَج يجب أن تسلّمه؟</p>","options":[{"text":"الـ labels 0/1 من <code dir=\"ltr\">predict</code>، لكل عميل.","why":"قد يُصنَّف المئات بـ 1، دون أي طريقة لاختيار 200 منهم."},{"text":"معاملات النموذج، كي يقيّم فريق التسويق العملاء بنفسه.","why":"هذا يرمي عمل النمذجة على فريق التسويق ويفتح الباب للأخطاء."},{"text":"قائمة بالعملاء مرتّبين بحسب احتمال الانقطاع، كي يأخذوا أول 200.","why":"صحيح. الترتيب يطابق الميزانية الثابتة مباشرة، والـ AUC يقيس جودة الترتيب."},{"text":"مصفوفة الالتباس عند العتبة 0.5.","why":"تلخّص الأداء لكنها لا تخبر أحدًا بمن يجب التواصل معه."}],"answer":2},{"q":"<div class=\"code-block\" dir=\"ltr\" data-lang=\"python\" data-index=\"2\"><div class=\"code-head\"><span class=\"code-title\">Python</span><span class=\"code-actions\"><button type=\"button\" class=\"code-btn\" data-action=\"copy\" aria-label=\"نسخ الكود\"><svg class=\"icon \" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\" focusable=\"false\"><rect width=\"14\" height=\"14\" x=\"8\" y=\"8\" rx=\"2\" ry=\"2\"/><path d=\"M4 16c-1.1 0-2-.9-2-2V4c0-1.1.9-2 2-2h10c1.1 0 2 .9 2 2\"/></svg><span>نسخ</span></button></span></div><pre class=\"shiki\" tabindex=\"0\"><code><span class=\"line\"><span style=\"color:#1F2328;--shiki-dark:#E6EDF3\">search </span><span style=\"color:#CF222E;--shiki-dark:#FF7B72\">=</span><span style=\"color:#1F2328;--shiki-dark:#E6EDF3\"> GridSearchCV(pipe, {</span><span style=\"color:#0A3069;--shiki-dark:#A5D6FF\">\"model__max_depth\"</span><span style=\"color:#1F2328;--shiki-dark:#E6EDF3\">: [</span><span style=\"color:#0550AE;--shiki-dark:#79C0FF\">2</span><span style=\"color:#1F2328;--shiki-dark:#E6EDF3\">, </span><span style=\"color:#0550AE;--shiki-dark:#79C0FF\">4</span><span style=\"color:#1F2328;--shiki-dark:#E6EDF3\">, </span><span style=\"color:#0550AE;--shiki-dark:#79C0FF\">8</span><span style=\"color:#1F2328;--shiki-dark:#E6EDF3\">]}, </span><span style=\"color:#953800;--shiki-dark:#FFA657\">cv</span><span style=\"color:#CF222E;--shiki-dark:#FF7B72\">=</span><span style=\"color:#0550AE;--shiki-dark:#79C0FF\">5</span><span style=\"color:#1F2328;--shiki-dark:#E6EDF3\">)</span></span>\n<span class=\"line\"><span style=\"color:#1F2328;--shiki-dark:#E6EDF3\">search.fit(X_train, y_train)</span></span>\n<span class=\"line\"><span style=\"color:#0550AE;--shiki-dark:#79C0FF\">print</span><span style=\"color:#1F2328;--shiki-dark:#E6EDF3\">(search.score(X_test, y_test))</span></span></code></pre></div>\n<p>ما الذي يقدّره الرقم المطبوع؟</p>\n","options":[{"text":"متوسط نتيجة التحقق لأفضل إعداد عبر الطيّات الخمس.","why":"هذا هو <code dir=\"ltr\">best_score_</code>، المحسوب على طيّات تحقق مقتطعة من بيانات التدريب، لا على بيانات الاختبار."},{"text":"الأداء على بيانات جديدة لأفضل إعداد، بعد إعادة تدريبه على كل صفوف التدريب.","why":"صحيح. مع <code dir=\"ltr\">refit=True</code>، يكون <code dir=\"ltr\">search</code> هو الـ pipeline الفائز، ولم يكن لبيانات الاختبار أي دور في اختياره."},{"text":"دقة التدريب لأعمق شجرة.","why":"يختار البحث أفضل إعداد بحسب نتيجة التحقق، لا الأعمق."},{"text":"متوسط على الأعماق الثلاثة كلها على بيانات الاختبار.","why":"لا يُقيَّم إلا الفائز المُعاد تدريبه."}],"answer":1},{"q":"<p>نموذج يتنبأ بأسعار المنازل. أيّ موقف يستدعي RMSE بدل MAE كمقياس رئيسي؟</p>","options":[{"text":"يريد أصحاب القرار رقمًا بوحدات الهدف.","why":"كلٌّ من MAE وRMSE بوحدات الهدف."},{"text":"البيانات لا تحتوي على قيم شاذة.","why":"دون أخطاء كبيرة، يحكي المقياسان قصة شبه متطابقة."},{"text":"تريد أن يُحسب كل خطأ، كبيرًا كان أو صغيرًا، بما يتناسب مع حجمه.","why":"هذا وصف MAE، الذي يزن كل خطأ بما يتناسب مع حجمه."},{"text":"الأخطاء الكبيرة مكلفة على نحو غير متناسب، فيجب أن تزن أكثر من الصغيرة.","why":"صحيح. التربيع يجعل RMSE يعاقب الأخطاء الكبيرة بشدة أكبر بكثير."}],"answer":3},{"q":"<p>لماذا تحقق شجرة قرار مكتملة النمو عادةً نتيجة أسوأ على البيانات الجديدة من غابة عشوائية من مثل هذه الأشجار؟</p>","options":[{"text":"لأن كل شجرة في الغابة أضحل.","why":"أشجار الغابة تُنمّى عميقة عادةً أيضًا."},{"text":"لأن الغابة ترى بيانات تدريب أكثر.","why":"كل شجرة تسحب من بيانات التدريب نفسها."},{"text":"لأن أخذ متوسط أشجار كثيرة ذات أخطاء مستقلة جزئيًا يُلغي جزءًا كبيرًا من تباين كل شجرة.","why":"صحيح. كل شجرة تقع في الـ overfitting بشكل مختلف؛ والمتوسط أثبت."},{"text":"لأن الغابة تستخدم الـ gradient descent لضبط أشجارها.","why":"أشجار الغابة تُدرَّب مستقلة، دون gradient descent."}],"answer":2},{"q":"<p>الانحدار اللوجستي على الانقطاع: <code dir=\"ltr\">C=0.01</code> يعطي AUC بالتحقق المتقاطع 0.797، و<code dir=\"ltr\">C=1</code> يعطي 0.807، و<code dir=\"ltr\">C=100</code> يعطي 0.806، مع تشتّت للطيّات في حدود 0.035. ماذا تستنتج؟</p>","options":[{"text":"قوة الـ regularization لا تكاد تهمّ هنا؛ أبقِ القيمة الافتراضية وابحث عن المكاسب في مكان آخر.","why":"صحيح. الفروق الأصغر بكثير من التشتّت تعني أن ضبط <code dir=\"ltr\">C</code> ليس المكان الذي سيأتي منه التحسّن."},{"text":"<code dir=\"ltr\">C=1</code> هي القيمة المثلى بوضوح ويجب توثيقها كأمر أساسي.","why":"إنها الأفضل بفارق شعرة، ضمن هامش الضجيج بوضوح."},{"text":"قيمة <code dir=\"ltr\">C</code> الصغيرة تقع في الـ overfitting، فتجنّبها.","why":"قيمة <code dir=\"ltr\">C</code> الصغيرة تعني عقوبة أقوى، وهذه تقع في الـ underfitting إن وقعت في شيء."},{"text":"النموذج معطوب، فالضبط يجب أن يغيّر النتيجة كثيرًا.","why":"المنحنى المسطّح نتيجة شائعة وصحية لنموذج محدّد جيدًا."}],"answer":0},{"q":"<p>أيّ feature آمن للاستخدام حين تتنبأ، في 30 سبتمبر، بما إذا كان العميل سيطلب خلال الـ 90 يومًا القادمة؟</p>","options":[{"text":"عدد تذاكر الدعم المفتوحة في أكتوبر.","why":"أكتوبر داخل نافذة النتيجة؛ ولا يكون معروفًا في 30 سبتمبر."},{"text":"ما إذا كان العميل قد تلقّى بريد استرجاع في نوفمبر.","why":"هذا يحدث بعد تاريخ التنبؤ، ومن المرجّح أن النموذج نفسه هو من أطلقه."},{"text":"إجمالي المبالغ المستردّة في الربع الرابع.","why":"الربع الرابع يقع داخل نافذة النتيجة: تسرّب للهدف."},{"text":"متوسط الأيام بين الطلبات عبر تاريخ العميل حتى 30 سبتمبر.","why":"صحيح. إنه لا يستخدم إلا معلومات متاحة عند اللقطة."}],"answer":3},{"q":"<p>تحتاج إلى تجميع 50,000 تذكرة دعم نصية حرّة في موضوعات دون أي labels. أيّ نهج هو الأنسب؟</p>","options":[{"text":"درّب انحدارًا لوجستيًا على التذاكر مع <code dir=\"ltr\">churned</code> كهدف.","why":"هذا يتنبأ بالانقطاع، لا بالموضوعات، ويتجاهل ما يقوله النص."},{"text":"حوّل التذاكر إلى embeddings بنموذج embedding، ثم جمّع المتّجهات بـ k-means وارسم ملامح العناقيد.","why":"صحيح. تحوّل الـ embeddings النص إلى متّجهات تلتقط المعنى؛ والعنقدة تجد المجموعات دون labels."},{"text":"عُدّ الكلمات بـ TF-IDF واختر الكلمة الأكثر تكرارًا كموضوع لكل تذكرة.","why":"الكلمات المتكرّرة المفردة تفوّت إعادة الصياغة والمترادفات التي تلتقطها الـ embeddings."},{"text":"أرسل التذاكر الخمسين ألفًا إلى LLM واحدة تلو الأخرى وثق بالـ labels التي يعطيها.","why":"ممكن، لكنه مكلف، وستظل بحاجة إلى عيّنة ذات labels لتتحقق منه."}],"answer":1},{"q":"<p>أيّ عبارة عن الشبكات العصبية دقيقة؟</p>","options":[{"text":"تتفوّق دائمًا على الـ gradient boosting في البيانات الجدولية.","why":"في الجداول الصغيرة والمتوسطة، كثيرًا ما تجاريها الأشجار المعزّزة والنماذج الخطية أو تتفوّق عليها."},{"text":"لا تحتاج إلى توحيد مقاييس الـ features لأنها تتعلّم features خاصة بها.","why":"المدخلات غير الموحّدة تبطّئ التدريب القائم على التدرّج وتزعزع استقراره؛ فوحّد مقاييسها."},{"text":"دون دوال تنشيط غير خطية، لا يضيف تكديس الطبقات أي قدرة تعبيرية.","why":"صحيح. الطبقات الخطية تتركّب في تحويل خطي واحد."},{"text":"الـ epoch تحديث واحد للأوزان.","why":"الـ epoch مرور كامل على بيانات التدريب، ويتضمّن عادةً تحديثات كثيرة."}],"answer":2},{"q":"<p>الـ recall لنموذج 0.85 في منطقة و0.65 في أخرى، مع 900 و40 عميلًا على الترتيب. ما الخطوة التالية الأكثر مسؤولية؟</p>","options":[{"text":"استنتج أن النموذج منحاز ضد المنطقة الأصغر واستبعدها من الإطلاق.","why":"مع 40 عميلًا فقط، قد تكون الفجوة ضجيجًا؛ والتصرّف بناءً عليها بشكل أعمى قد يسبّب أضرارًا أخرى."},{"text":"تجاهل الفجوة لأن المنطقة الأصغر حصة صغيرة من الإيرادات.","why":"المجموعات الصغيرة تستحق الفحص أيضًا؛ وحصة الإيرادات لا تحسم مسألة الإنصاف."},{"text":"احذف المنطقة من الـ features.","why":"قد تعمل features أخرى كبدائل، وستفقد القدرة على الفحص بحسب المنطقة."},{"text":"أبلِغ عن الفجوة مع درجة عدم اليقين فيها، وراقبها مع تراكم البيانات، وقرّر مع أصحاب القرار في الشركة ما إذا كانت تحتاج إلى معالجة بالعتبة أو بالبيانات.","why":"صحيح. اجعل نقطة الضعف مرئية، وحدّد مقدار الثقة، واتّخذ قرارًا مدروسًا."}],"answer":3},{"q":"<p>يُطلق نموذج انقطاع مع عروض لكل عميل مُعلَّم، فينخفض الانقطاع بين العملاء المُعلَّمين من 70% إلى 55%. ما المطلوب للادّعاء بأن النموذج والعرض هما سبب الانخفاض؟</p>","options":[{"text":"مجموعة محجوزة عشوائيًا من العملاء المُعلَّمين لم تتلقَّ أي عرض، تُقارَن على الفترة نفسها.","why":"صحيح. لا شيء إلا المقارنة مع مجموعة ضابطة عشوائية يفصل أثر العرض عن الموسمية والحظ."},{"text":"ROC AUC أعلى على الاختبار.","why":"يقيس الـ AUC جودة الترتيب، لا ما إذا كان التدخّل يغيّر السلوك."},{"text":"إعادة التدريب على البيانات الجديدة.","why":"إعادة التدريب لا تقيس أثر العرض."},{"text":"نافذة نتيجة أطول.","why":"النافذة الأطول تغيّر التعريف، لا غياب مجموعة المقارنة."}],"answer":0}],"glossary":[{"id":"supervised-learning","term":"التعلّم الموجَّه (Supervised learning)","definition":"تعلّم الربط بين الـ features وهدف معروف باستخدام أمثلة ذات labels، كي يتنبأ النموذج بالهدف لحالات جديدة. والتصنيف والانحدار شكلاه الرئيسيان.","lesson":"l-ml-1-1"},{"id":"unsupervised-learning","term":"التعلّم غير الموجَّه (Unsupervised learning)","definition":"إيجاد بنية في بيانات لا عمود هدف فيها، مثل مجموعات من الصفوف المتشابهة (العنقدة) أو ملخّص مضغوط لأعمدة كثيرة (تقليل الأبعاد).","lesson":"l-ml-1-1"},{"id":"feature","term":"Feature","definition":"عمود مُدخل يستخدمه النموذج ليتنبأ، مثل عدد الأيام منذ آخر طلب. ويجب أن تكون الـ features معروفة في اللحظة التي يُجرى فيها التنبؤ.","lesson":"l-ml-1-2"},{"id":"target","term":"الهدف (Target / label)","definition":"العمود الذي يتعلّم النموذج الموجَّه التنبؤ به، مثل ما إذا كان العميل قد انقطع. ويُسمّى عادةً y في scikit-learn.","lesson":"l-ml-1-2"},{"id":"train-test-split","term":"تقسيم التدريب والاختبار (Train/test split)","definition":"حجز جزء من البيانات ذات الـ labels، لا يُستخدم أبدًا في التدريب أو في اختيار النموذج، لقياس مدى نجاح النموذج النهائي مع حالات لم يرَها.","lesson":"l-ml-1-2"},{"id":"estimator","term":"Estimator","definition":"أي كائن في scikit-learn يتعلّم من البيانات عبر fit. النماذج والـ scalers والـ encoders كلها estimators، وتضيف النماذج إليها predict وscore.","lesson":"l-ml-1-3"},{"id":"hyperparameter","term":"Hyperparameter","definition":"إعداد يُختار قبل التدريب ويتحكم في طريقة تعلّم النموذج، مثل max_depth أو C، بخلاف المعاملات التي يتعلّمها النموذج أثناء fit.","lesson":"l-ml-1-3"},{"id":"overfitting","term":"الإفراط في التوافق (Overfitting)","definition":"حين يتعلّم النموذج الضجيج في بيانات تدريبه، فيحقق على صفوف التدريب نتيجة أفضل بكثير منها على الصفوف الجديدة. وعلاجه مرونة أقل أو بيانات أكثر أو الـ regularization.","lesson":"l-ml-1-3"},{"id":"baseline","term":"خط الأساس (Baseline)","definition":"نموذج مرجعي بسيط، مثل التنبؤ بفئة الأغلبية أو قاعدة عمل من سطر واحد، يجب على أي نموذج حقيقي أن يتفوّق عليه بوضوح كي يستحق كلفته.","lesson":"l-ml-1-4"},{"id":"residual","term":"الباقي (Residual)","definition":"الفرق بين القيمة الفعلية وتنبؤ النموذج بها. ومقاييس الانحدار مثل MAE وRMSE تلخّص البواقي.","lesson":"l-ml-2-1"},{"id":"r-squared","term":"معامل التحديد (R²)","definition":"حصة تباين الهدف التي يفسّرها نموذج الانحدار مقارنةً بالتنبؤ الدائم بالمتوسط: 1 يعني الكمال، و0 يعني أنه ليس أفضل من المتوسط، وقد يكون سالبًا.","lesson":"l-ml-2-1"},{"id":"gradient-descent","term":"Gradient descent","definition":"طريقة تحسين تحسب مرارًا ميل دالة الخسارة لكل معامل، وتحرّك المعاملات خطوة صغيرة نزولًا، بحجم يحدّده معدّل التعلّم.","lesson":"l-ml-2-2"},{"id":"feature-scaling","term":"توحيد مقاييس الـ features (Feature scaling)","definition":"إعادة معايرة الأعمدة إلى نطاقات متقاربة، عادةً متوسط 0 وانحراف معياري 1 باستخدام StandardScaler المدرَّب على بيانات التدريب وحدها. ويلزم للنماذج المعتمدة على المسافة والمدرَّبة بالتدرّج والمعاقَبة.","lesson":"l-ml-2-2"},{"id":"regularisation","term":"Regularization","definition":"إضافة عقوبة على حجم المعاملات إلى دالة الخسارة كي يفضّل النموذج ملاءمات أبسط. يستخدم Ridge مربعات المعاملات؛ ويستخدم Lasso قيمها المطلقة وقد يجعل بعضها صفرًا.","lesson":"l-ml-2-4"},{"id":"logistic-regression","term":"الانحدار اللوجستي (Logistic regression)","definition":"نموذج تصنيف خطي يمرّر مجموعًا موزونًا من الـ features عبر دالة الـ sigmoid ليُخرج احتمالًا بين 0 و1.","lesson":"l-ml-3-1"},{"id":"decision-tree","term":"شجرة القرار (Decision tree)","definition":"نموذج يتنبأ بطرح سلسلة من أسئلة نعم/لا عن features مفردة، مختارة بحيث تكون المجموعات الناتجة أنقى ما يمكن.","lesson":"l-ml-3-2"},{"id":"gradient-boosting","term":"Gradient boosting","definition":"نموذج مجمّع يضيف أشجارًا ضحلة واحدة تلو الأخرى، كلٌّ منها مدرَّبة على أخطاء الأشجار التي قبلها، مع معدّل تعلّم يتحكم في مساهمة كل شجرة.","lesson":"l-ml-3-3"},{"id":"confusion-matrix","term":"مصفوفة الالتباس (Confusion matrix)","definition":"جدول يعدّ السلبيات الصحيحة والإيجابيات الكاذبة والسلبيات الكاذبة والإيجابيات الصحيحة. وفي scikit-learn تمثّل الصفوف الفئات الفعلية والأعمدة الفئات المتنبأ بها.","lesson":"l-ml-3-4"},{"id":"precision-recall","term":"Precision وRecall","definition":"الـ precision هي حصة الحالات المُعلَّمة التي هي إيجابية فعلًا؛ والـ recall هي حصة الحالات الإيجابية فعلًا التي عُلِّمت. ورفع إحداهما يخفض الأخرى عادةً.","lesson":"l-ml-3-4"},{"id":"roc-auc","term":"ROC AUC","definition":"مقياس لجودة الترتيب لا يعتمد على عتبة: احتمال أن ينال مثال إيجابي مختار عشوائيًا درجة أعلى من مثال سلبي مختار عشوائيًا. القيمة 0.5 عشوائية، و1.0 مثالية.","lesson":"l-ml-3-4"},{"id":"decision-threshold","term":"عتبة القرار (Decision threshold)","definition":"حدّ الاحتمال الذي يصنّف المصنِّف فوقه الحالة إيجابية. القيمة الافتراضية 0.5، لكن يجب اختيارها بناءً على كلفة كل نوع من الأخطاء.","lesson":"l-ml-3-5"},{"id":"cross-validation","term":"التحقق المتقاطع (Cross-validation)","definition":"تقسيم بيانات التدريب إلى k طيّة وتدريب k نموذجًا، كلٌّ منها يُقيَّم على طيّة مختلفة، للحصول على تقدير أثبت للأداء وفكرة عن مدى تشتّته.","lesson":"l-ml-4-1"},{"id":"pipeline","term":"Pipeline","definition":"كائن في scikit-learn يسلسل خطوات المعالجة المسبقة ونموذجًا نهائيًا في estimator واحد، فتُدرَّب كل خطوة على بيانات التدريب وحدها وتُطبَّق بالطريقة نفسها لاحقًا.","lesson":"l-ml-4-2"},{"id":"one-hot-encoding","term":"One-hot encoding","definition":"تحويل عمود فئوي إلى عمود 0/1 لكل فئة كي تستطيع النماذج استخدامه. ويتعامل OneHotEncoder مع الفئات غير المرئية حين يُضبط handle_unknown على ignore.","lesson":"l-ml-4-2"},{"id":"data-leakage","term":"تسرّب البيانات (Data leakage)","definition":"معلومات متاحة أثناء التدريب أو التقييم لن تكون متاحة وقت التنبؤ، مثل features سُجّلت بعد تاريخ التنبؤ أو معالجة مسبقة دُرِّبت على صفوف التحقق.","lesson":"l-ml-4-4"},{"id":"k-means","term":"k-means","definition":"خوارزمية عنقدة تتناوب بين إسناد كل نقطة إلى أقرب مركز ونقل كل مركز إلى متوسط نقاطه، لعدد مختار من العناقيد k.","lesson":"l-ml-5-1"},{"id":"pca","term":"تحليل المكوّنات الرئيسية (PCA)","definition":"تقنية تجد محاور جديدة، كلٌّ منها مزيج موزون من الأعمدة الأصلية، مرتّبة بحسب مقدار ما تلتقطه من تباين البيانات، فيستطيع عدد قليل منها تلخيص الكثير.","lesson":"l-ml-5-1"},{"id":"epoch","term":"Epoch","definition":"مرور كامل واحد لخوارزمية تدريب الشبكة العصبية على بيانات التدريب كلها. ويستمر التدريب عادةً لعدد كبير من الـ epochs بينما تنخفض الخسارة.","lesson":"l-ml-5-2"},{"id":"embedding","term":"Embedding","definition":"متّجه ثابت الطول ينتجه نموذج لتمثيل نص أو عنصر آخر، مرتّب بحيث تكون للعناصر المتشابهة في المعنى متّجهات متقاربة.","lesson":"l-ml-5-3"},{"id":"data-drift","term":"انجراف البيانات (Data drift)","definition":"تغيّر مع الزمن في توزيع مدخلات النموذج مقارنةً ببيانات تدريبه، قد يجعل التنبؤات أقل موثوقية ويجب مراقبته.","lesson":"l-ml-5-4"}]}