التسرب الصامت
التسرب يعني أن معلومات صفوف الاختبار تصل إلى النموذج قبل تقييمه. الأشكال الصاخبة سهلة التجنب (ميزة مبنية من سعر الغد). أما الشكل الصامت فيختبئ في المعالجة المسبقة: تختار أفضل الأعمدة أو تقيس البيانات أو تملأ الفجوات بكل الصفوف ثم تقسّم للتحقق المتقاطع. كل طية اختبار أثّرت مسبقًا في الاختيار والدرجة متفائلة. واختيار الميزات أسوأ مذنب لأن مئة عمود مشوش تحوي دائمًا بضعة أعمدة تبدو تنبؤية في أي عينة؛ فإن اخترتها على كل البيانات صارت طيات الاختبار «متنبَّأً بها» جزئيًا بأعمدة اختيرت لأنها لاءمت تلك الطيات نفسها. والحل البنيوي هو Pipeline: حين تعطي cross_val_score خط المعالجة كله يعيد ملاءمة القياس والاختيار والنموذج على كل نافذة تدريب ثم يقيّم نافذة الاختبار.
يستخدم المختبر سؤالًا صعبًا عمدًا: هل تتنبأ عائدات الأمس لـ 60 أصلًا آخر بارتفاع SPY اليوم؟ لا يوجد تقريبًا شيء يُكتشف. يعطي التقييم المتسرب (SelectKBest(f_classif, k=5) على كل الصفوف ثم تحققًا متقاطعًا بـ TimeSeriesSplit) AUC قدره 0.534. ويعطي التقييم الأمين (المقياس والمنتقي والانحدار اللوجستي في خط واحد يُعاد ضبطه في كل نافذة) 0.512. والـ 0.022 بينهما تسرب خالص. ويمكنك أيضًا النظر في الداخل: تعيد cross_validate(model, X, y, cv=..., return_estimator=True) الخطوط المُلائمة، وتسرد estimator.named_steps['select'].get_support(indices=True) الأعمدة التي اختارها كل منها. وفي الطيات الخمس يُختار عمود واحد فقط في كل مرة وهذا ما تبدو عليه الاختيارات على الضجيج. درجة حُسبت بخط معالجة يمكن الدفاع عنها، أما درجة بعد «قليل من المعالجة المسبقة على كل شيء» فلا.
- قسّم أولًا ثم تعلّم: القياس والاختيار والتعويض كلها تنتمي إلى داخل حلقة التحقق المتقاطع.
- الـ Pipeline حارس من التسرب: أعطِ
cross_val_scoreالخط كله فتُعاد ملاءمة كل خطوة على كل نافذة تدريب. - انظر ما اختارته كل طية: الأعمدة التي تتغير من طية لأخرى ضجيج لا إشارة.
المختبر: ما الذي يُقيَّم
- التقييم المتسرب15 نقطة
- خط المعالجة10 نقطة
- التقييم الأمين15 نقطة
- ما اختارته كل طية20 نقطة
- حجم التسرب10 نقطة
- المقارنة على بيانات حقيقية30 نقطة