المكاسب:
- القدرة على التعرف على أنواع تسرب البيانات (الهدف، والوقت، والمعالجة المسبقة، والصف المجمع) والاستعلام عن النتيجة "جيدة جدًا لدرجة يصعب تصديقها" كإنذار
- القدرة على منع التسرب من خلال الفصل المبكر لمجموعة الاختبار وخطوط الأنابيب والتقسيم الصحيح (التسلسل الزمني/المجمع)
- القدرة على جعل التحليل قابلاً للتكرار باستخدام البذور الثابتة والتحكم في الإصدار وإزالة الخطوات اليدوية
هناك خطأان يهدران أكبر قدر من الجهد في علم البيانات، وكلاهما خبيث لأنهما يؤديان إلى كارثة عندما يبدو أن كل شيء "على ما يرام". الأول هو تسرب البيانات: يعمل النموذج بشكل رائع في مجموعة الاختبار ولكنه يتعطل في الإنتاج. والثاني هو عدم القابلية للتكرار: حيث تقوم بإجراء تحليل بعد ستة أشهر وتحصل على نتيجة مختلفة تمامًا. هذه الوحدة مخصصة لمعرفة هذين المأزقين وتجنبهما بعمق. يمكن للذكاء الاصطناعي أن يزيد كلا الخطرين (ينشأ بسرعة، ويقترح تسريبات مخفية، ويسهل عليك اتخاذ الخطوات اليدوية) ولكن يمكنه أيضًا تقليلها إذا تم استخدامه بشكل صحيح. الفرق هو في الانضباط.
تسرب البيانات: نموذج العراف
يحدث تسرب البيانات عندما يرى النموذج معلومات أثناء التدريب لن تكون لديه في وقت التنبؤ الفعلي. النموذج "يغش" بهذه المعلومات، ويبدو رائعًا في مجموعة الاختبار، ولكنه يتعطل في الإنتاج بدون تلك المعلومات. إن أعراض التسرب هي نفسها دائمًا تقريبًا: جيدة جدًا لدرجة يصعب تصديقها. قبل أن تفرح عندما ترى دقة 99%، عليك أن تبحث عن التسريبات.
الأنواع الرئيسية للتسرب هي:
1. تسرب الهدف: الميزة هي نتيجة الهدف. في التنبؤ "تم الإلغاء"، تكون أعمدة "تاريخ الإلغاء" أو "مبلغ استرداد الأموال" هي نتيجة الهدف؛ ولن يتم ملؤها إلا عندما تكون النتيجة واضحة.
2. تسرب الوقت: جلب المعلومات المستقبلية إلى الماضي. عند حساب "متوسط آخر 30 يومًا"، قم بتضمين الأيام التي تلي يوم التنبؤ، أو قم بتقسيم السلسلة الزمنية بشكل عشوائي.
3. تسرب ما قبل المعالجة: تحويلات التعلم مثل القياس والتعبئة والترميز من جميع البيانات قبل قسم التدريب/الاختبار. يتداخل حساب متوسط بيانات الاختبار مع التدريب.
4. تسرب الصفوف المكررة/المجمعة: الصفوف التي تنتمي إلى نفس الشخص موجودة في كل من التدريب والاختبار (زيارتان لنفس المريض في مجموعات مختلفة). النموذج يحفظ الشخص.
نوع التسرب
كيف يولد
كيفية الوقاية
تسرب الهدف
العمود الذي هو نتيجة الهدف
اختبار "هل لدي في وقت التنبؤ".
تسرب الوقت
جلب المستقبل إلى الماضي
التقسيم الزمني، التحكم بالنافذة
تسرب المعالجة المسبقة
تحويل ما قبل الانقسام
خط الأنابيب، صالح فقط من التدريب
تسرب الصف المجمع
نفس الوحدة في مجموعتين
تقسيم حسب المجموعة (GroupKFold)
الانضباط الوحيد لمنع التسرب
يتلخص الحل المشترك لجميع أنواع التسريبات في جملة واحدة: عزل مجموعة الاختبار في أقرب وقت ممكن لتقليد المستقبل الحقيقي، ولا "تعلمها" أي شيء. من الناحية العملية، هذا يعني: التقسيم أولاً، ثم تعلم جميع التحويلات فقط من التدريب وتطبيقها في خط أنابيب (هيكل يجمع كل الخطوات في سلسلة واحدة). بالنسبة لكل ميزة، اطرح السؤال "هل لدي هذه المعلومات في وقت التنبؤ؟" إذا كان هناك وقت، قم بتقسيمه زمنيا؛ إذا كانت نفس الوحدة متكررة، نقسمها على المجموعة.
تحذير: الجانب الأكثر خطورة للتسرب هو أنه يقدم نفسه على أنه نجاح. من الواضح أن النموذج السيئ سيؤدي إلى نتائج سيئة وسيتم ملاحظته؛ النموذج المسرب يعمل بشكل رائع، ويرضي الجميع، ويتم وضعه في مرحلة الإنتاج – وهنا يبدأ الانهيار. ولهذا السبب فإن النتيجة "الجيدة جدًا" هي سبب للقلق وليس للاحتفال.
التكرار: الحصول على نفس النتيجة مرتين
إمكانية تكرار النتائج هي القدرة على الحصول على نفس النتيجة عند إجراء تحليل مرة أخرى في وقت آخر، على جهاز آخر. وبدون هذا يكون تحليلك عرضياً وليس علمياً. الأسباب والحلول الرئيسية التي تضعف إمكانية التكاثر:
الخطوات اليدوية: تغيير خلية يدويًا في Excel، وتحرير مخطط يدويًا. الحل: ضع كل خطوة في الكود.
العشوائية غير الثابتة: يتضمن التدريب النموذجي وأخذ العينات والتقسيم العشوائية. الحل: إصلاح البذرة العشوائية (القيمة الأولية للمولد العشوائي) (random_state=42).
تغيرات الإصدار: قد تتغير النتيجة عندما يتغير إصدار المكتبة. الحل: إصلاح التبعيات (requirements.txt، ملف البيئة).
لا يوجد حفظ للسجلات: ليس من الواضح ما هي البيانات، أي رمز، أي معلمة تم استخدامها. الحل: التحكم في الإصدار (Git - النظام الذي يحفظ جميع إصدارات الكود) وإصدار البيانات.
"إنه يعمل فقط على جهازي": الحل: توثيق البيئة، واستخدام الحاويات (Docker) إن أمكن.
ثلاث حالات صغيرة
الحالة 1 - تسرب الهدف. أظهر التحليل الصحي عمود "أدوية ما بعد الخروج" للتنبؤ "بما إذا كان سيتم قبول المريض مرة أخرى". ولم يتم ملء هذا العمود إلا بعد خروج المريض من المستشفى. أعطى النموذج 96%، في الإنتاج 61%. كان مشروع الأسبوع الثامن عبارة عن قمامة. الدرس: اسأل كل ميزة "هل هي موجودة في وقت التنبؤ؟"
الحالة 2 - تسرب المعالجة المسبقة. قام فريق واحد بقياس جميع البيانات ثم قام بتقسيمها. متوسط بيانات الاختبار شارك في القياس. درجة السيرة الذاتية 89% والإنتاج الفعلي 76%. اختفى النجاح المزيف عندما انتقلت إلى Pipeline ولم أتعرف على التحولات إلا من خلال التدريب. الدرس: القسمة أولًا، والتحويل لاحقًا.
الحالة 3 - الفشل في التكاثر. أراد أحد المحللين تحديث الرسم البياني الذي قدمه إلى الإدارة بعد ثلاثة أشهر، لكنه لم يتذكر كيفية إنتاجه؛ تم تنفيذ العديد من الخطوات يدويًا في Excel. النتيجة لم تنجح واهتزت الثقة. الدرس المستفاد: لا توجد خطوات يدوية، كل شيء موجود في الكود وGit.
أربعة قوالب قابلة للنسخ
1) فحص التسرب:
دورك: مفتش تسرب. الهدف: "التحول" (0/1)، التاريخ المرجعي للتنبؤ: Record_date. سأقدم لك هذه القائمة من الميزات. بالنسبة لكل ميزة: (أ) هل هي نتيجة للهدف، (ب) هل هي متاحة لي في وقت التنبؤ، (ج) هل تتضمن النافذة الزمنية المستقبل؟ ضع علامة "غير آمن/مشبوه/تسرب" واكتب السبب. الميزات: [قائمة]
2) خط أنابيب خالي من التسرب:
قم بإعداد خط أنابيب sklearn: أول قطار/اختبار مقسم (طبقي، بذرة = 42)، ثم قم بتركيب جميع عمليات المعالجة المسبقة (الاحتساب، القياس، التشفير) في المسار من التدريب فقط. اشرح سبب كون الكود خاليًا من التسرب، وما هي الخطوة التي تم تعلمها وأين.
3) رمز قائمة التحقق من الاستنساخ:
أريد أن أجعل تحليلي قابلاً للتكرار. اقترح رمزًا/بنية تضيف: (1) بذرة صلبة لجميع العشوائية، (2) إصدارات مكتبة الطباعة المستخدمة، (3) علامة التاريخ/الإصدار للبيانات والمخرجات. أعطني أيضًا قائمة مرجعية للتأكد من عدم وجود خطوات يدوية.
4) قسم مجمع (تسرب نفس الوحدة):
يوجد في البيانات نفس معرف العميل في صفوف متعددة. قم بإجراء تقسيم (GroupKFold أوGroupShuffleSplit، group = customer_id) يمنع نفس العميل من التواجد في كل من التدريب والاختبار. قم بتضمين رمز للتحقق من عدم وجود عملاء في كلا المجموعتين بعد التقسيم.
موجه ضعيف / موجه قوي
حث ضعيف:
لقد عاد نموذجي بدقة تبلغ 98%، أليس هذا رائعًا؟ تحسين التعليمات البرمجية.
الاحتفال بـ 98% يخفي التسريب. قبل التحسين، ينبغي التساؤل عما إذا كانت هذه النتيجة حقيقية أم لا.
مطالبة قوية:
دورك: مفتش تسرب. يعرض النموذج الخاص بي دقة بنسبة 98% في مجموعة الاختبار، وهو ما يبدو "جيدًا جدًا لدرجة يصعب تصديقها" بالنسبة لي. تحقق: (1) هل هناك أي ميزات ناتجة عن الهدف، (2) هل تم إجراء التحويلات قبل التقسيم، (3) هي نفس الوحدة في مجموعتين، (4) هل هناك أي تسرب للوقت. قم بإدراج أي نقاط مشبوهة؛ ركز على العثور على التسرب، وليس إصلاح النتيجة.
هنا، يتم التعامل مع النتيجة العالية كعلامة يجب التشكيك فيها، وليس للاحتفال بها.
الأخطاء الشائعة
- الاحتفال بالنتيجة "الجيدة جدًا". إن النتيجة التي تعتبر جيدة جدًا لدرجة يصعب تصديقها هي بمثابة تنبيه للتسريب، وليست إنجازًا.
- تعلم التحويل من كافة البيانات قبل القسمة. التسرب الأكثر شيوعا؛ انقسام أولا مع خط الأنابيب.
- تقسيم السلسلة الزمنية بشكل عشوائي. النموذج يرى المستقبل؛ التقسيم الزمني أمر لا بد منه.
- ترك نفس الوحدة في مجموعتين. النموذج يحفظ الشخص؛ تقسيم حسب المجموعة.
- عدم التدخل يدويًا والكتابة في الكود. يصبح التحليل غير قابل للتكرار؛ يجب أن يكون كل شيء في التعليمات البرمجية وGit.
نصيحة: اكتب "تعهد الشرف" المكون من جملتين في بداية مشروعك: "لم أتطرق إلى مجموعة الاختبار بأي شكل من الأشكال قبل أن أراها في الإنتاج. كل خطوة موجودة في الكود ويتم إصلاح البذرة." إذا لم تتمكن من التوقيع على هاتين الجملتين بأمانة، فإن نتيجتك غير موثوقة بعد.
باختصار
يعد تسرب البيانات وعدم إمكانية تكرارها من أكثر الأخطاء الصامتة تكلفة في علم البيانات. التسرب هو رؤية النموذج للمستقبل ويقدم نفسه على أنه نجاح زائف؛ الحل هو تقسيم مجموعة الاختبار مبكرًا، وتعلم التحويلات فقط من التدريب (خط الأنابيب)، وطرح السؤال على كل ميزة "هل أملكها في وقت التنبؤ" وإجراء التقسيم الصحيح (التسلسل الزمني/المجمع). التكاثر هو القدرة على الحصول على نفس النتيجة مرتين؛ الحل الذي توصل إليه هو إزالة الخطوات يدويًا، وتثبيت البذور، وتجميد الإصدارات، والاحتفاظ بكل شيء في Git. ويمكن للذكاء الاصطناعي إما أن يزيد أو يقلل من هذه المخاطر؛ إن انضباطك هو الذي يحدد.
مهمة التطبيق
خذ قائمة ميزات النموذج الذي قمت بإنشائه (أو نموذجًا افتراضيًا) واطرح السؤال على كل ميزة "هل لدي هذه المعلومات في وقت التنبؤ؟" كتابيا؛ ابحث عن مرشح تسرب واحد على الأقل. ثم قم بملء قائمة مرجعية لجعل التحليل الخاص بك قابلاً للتكرار: هل تم إصلاح البذرة، هل هناك خطوات يدوية، هل الإصدارات مسجلة، هل هي موجودة في Git. إصلاح أوجه القصور.
قائمة مرجعية
- [ ] هل قمت بالاستعلام عن النتيجة "جيدة جدًا لدرجة يصعب تصديقها" كتنبيه تسرب؟
- [ ] هل تعلمت كل التحولات بعد الانفصال من التدريب فقط؟
- [ ] هل قمت بالتقسيم وفقًا لهيكل الوقت/المجموعة (التسلسل الزمني/GroupKFold)؟
- [ ] هل جعلت كل العشوائية قابلة للتكرار باستخدام بذرة ثابتة؟
- [ ] هل قمت بإزالة الخطوات اليدوية واحتفظت بكل شيء في الكود والتحكم في الإصدار؟