اذهب إلى المحتوى

السؤال

نشر (معدل)

تخيل أننا ندرب شبكة عصبية باستخدام بيانات، حيث يمثل كل سجل كيانًا أكبر (مثل عميل)، ويمثل كل سجل فرعي أجزاءً أصغر مرتبطة به (مثل معاملات العميل الفردية).

الآن، لدى بعض العملاء 3 معاملات، ولدى آخرين 10 معاملات أو أكثر. عند تقسيم البيانات إلى مجموعات تدريب واختبار، يمكننا:

التقسيم حسب السجلات الفرعية (المعاملات)، مما يعني أن معاملات العميل نفسه قد تظهر في كل من مجموعتي التدريب والاختبار.

التقسيم حسب السجلات (العملاء)، مما يعني أن جميع معاملات العميل تظهر معًا إما في التدريب أو الاختبار، ولكن ليس في كليهما.

مثال آخر: إذا كنا نتنبأ بشدة الزلازل ولدينا 1000 زلزال، ولكل زلزال 3 سجلات على الأقل (سجلها مراقبون مختلفون)، فهل يجب علينا تقسيم البيانات بناءً على 1000 زلزال بحيث يكون (800 * 3 على الأقل) منها تدريبًا و200 * 3  على الأقل) اختبارًا؟ في هذه الحالة، نعلم أن 80% من بيانات الزلازل الأرضية مخصصة للتدريب، ولكن هذا قد يجعل عدد السجلات المُدرَّبة أكثر أو أقل من 80% من إجمالي السجلات. أم يجب علينا التقسيم بناءً على إجمالي عدد السجلات؟

ما يقلقني هو تسرب البيانات:
إذا رأى النموذج بعض معاملات العميل/الزلزال أثناء التدريب، ثم تم اختباره على معاملات أخرى من نفس العميل/الزلزال، فإنه يكون قد "رأى" بالفعل جزءًا من بيانات الاختبار بشكل غير مباشر - حتى لو اختلفت المعاملات المحددة. أم ان عملية التدريب مختلفة عن ذلك؟

إذن، السؤال هو:

عند تدريب نموذج على بيانات هرمية (سجلات تحتوي على سجلات فرعية)، هل يجب إجراء تقسيم التدريب/الاختبار على مستوى السجل أم على مستوى السجل الفرعي لتجنب تلوث البيانات أو تسربها؟

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

Recommended Posts

  • 0
نشر

في حالة البيانات الهرمية عندما تكون هناك سجلات رئيسية (مثل العملاء أو الزلازل) تحتوي على سجلات فرعية (مثل المعاملات أو الملاحظات) يجب دائمًا تقسيم البيانات على مستوى السجل الرئيسي وليس السجل الفرعي.

عندما تقوم بتقسيم البيانات على مستوى السجلات الفرعية، قد يرى النموذج أثناء التدريب جزءًا من بيانات العميل نفسه أو الزلزال نفسه، ثم يُختبر على بيانات أخرى . هذا يجعل النموذج "يعرف" مسبقًا خصائص هذا العميل أو الزلزال، فيُظهر أداءً مرتفعًا زائفًا في الاختبار.

مثال:
إذا كان لدينا عميل له 10 معاملات، ووضعت 7 منها في التدريب و3 في الاختبار، فالنموذج سيتعلم نمط هذا العميل من التدريب، وبالتالي سيتنبأ بنتائج الاختبار بسهولة غير حقيقية.
أما إذا وضعت كل معاملات العميل إما في التدريب أو في الاختبار فقط، فسيكون النموذج مضطرًا لتعميم معرفته على عملاء جدد لم يسبق له رؤيتهم.

لذا نحتاج إلى تقسيم على مستوى الكيان الرئيسي (مثل العميل أو الزلزال) لتجنب تسرب البيانات وضمان أن النموذج يتعلم التعميم الحقيقي، وليس الحفظ أو التكرار.

  • 0
نشر

 دائمًا يجب إجراء تقسيم التدريب والاختبار على مستوى السجل ككل بمعنى العميل، الزلزال، المريض، المنتج، وليس على مستوى السجل الفرعي.

فخلط وتقسيم جميع التسجيلات 1000 زلزال * 3 تسجيلات على الأقل = 3000+ تسجيل، سيؤدي إلى أن تسجيلات نفس الزلزال ستكون في التدريب والاختبار، وسيتعلم النموذج الخصائص الفريدة لزلزال معين، الأمر الذي يسمح له بالغش، وسيحقق أداء جيد بشكل مصطنع عند اختباره على تسجيل آخر لنفس الزلزال.

بينما الصحيح هو، لدينا قائمة بـ 1000 زلزال فريد، نقوم بتقسيمها إلى 800 زلزال للتدريب و 200 زلزال للاختبار، ثم نضع التسجيلات المرتبطة بـ 800 زلزال في مجموعة التدريب.

وجميع التسجيلات المرتبطة بـ 200 زلزال نضعها في مجموعة الاختبار.

لذا طالما البيانات هرمية أو مجمعة، فيجب أن يكون التقسيم على مستوى المجموعة ككل لضمان عدم وجود أي تداخل للمعلومات بين مجموعتي التدريب والاختبار.

  • 0
نشر
بتاريخ 39 دقائق مضت قال Mustafa Suleiman:

 دائمًا يجب إجراء تقسيم التدريب والاختبار على مستوى السجل ككل بمعنى العميل، الزلزال، المريض، المنتج، وليس على مستوى السجل الفرعي.

فخلط وتقسيم جميع التسجيلات 1000 زلزال * 3 تسجيلات على الأقل = 3000+ تسجيل، سيؤدي إلى أن تسجيلات نفس الزلزال ستكون في التدريب والاختبار، وسيتعلم النموذج الخصائص الفريدة لزلزال معين، الأمر الذي يسمح له بالغش، وسيحقق أداء جيد بشكل مصطنع عند اختباره على تسجيل آخر لنفس الزلزال.

بينما الصحيح هو، لدينا قائمة بـ 1000 زلزال فريد، نقوم بتقسيمها إلى 800 زلزال للتدريب و 200 زلزال للاختبار، ثم نضع التسجيلات المرتبطة بـ 800 زلزال في مجموعة التدريب.

وجميع التسجيلات المرتبطة بـ 200 زلزال نضعها في مجموعة الاختبار.

لذا طالما البيانات هرمية أو مجمعة، فيجب أن يكون التقسيم على مستوى المجموعة ككل لضمان عدم وجود أي تداخل للمعلومات بين مجموعتي التدريب والاختبار.

شكرًا.

بتاريخ 41 دقائق مضت قال Mustafa Suleiman:

 دائمًا يجب إجراء تقسيم التدريب والاختبار على مستوى السجل ككل بمعنى العميل، الزلزال، المريض، المنتج، وليس على مستوى السجل الفرعي.

فخلط وتقسيم جميع التسجيلات 1000 زلزال * 3 تسجيلات على الأقل = 3000+ تسجيل، سيؤدي إلى أن تسجيلات نفس الزلزال ستكون في التدريب والاختبار، وسيتعلم النموذج الخصائص الفريدة لزلزال معين، الأمر الذي يسمح له بالغش، وسيحقق أداء جيد بشكل مصطنع عند اختباره على تسجيل آخر لنفس الزلزال.

بينما الصحيح هو، لدينا قائمة بـ 1000 زلزال فريد، نقوم بتقسيمها إلى 800 زلزال للتدريب و 200 زلزال للاختبار، ثم نضع التسجيلات المرتبطة بـ 800 زلزال في مجموعة التدريب.

وجميع التسجيلات المرتبطة بـ 200 زلزال نضعها في مجموعة الاختبار.

لذا طالما البيانات هرمية أو مجمعة، فيجب أن يكون التقسيم على مستوى المجموعة ككل لضمان عدم وجود أي تداخل للمعلومات بين مجموعتي التدريب والاختبار.

شكرًا على الاجابة

  • 0
نشر

الإجابة بإختصار هي يجب عليك دائما إجراء تقسيم التدريب/الاختبار على مستوى السجل العملاء أو الزلازل وليس على مستوى السجل الفرعي المعاملات أو القراءات.

وقلقك بشأن تسرب البيانات (Data Leakage) صحيح تماما وإليك السبب بالتفصيل:

وإليك كيفية فهم تسرب البيانات في البيانات الهرمية حيث ما تصفه هو حالة كلاسيكية من تسرب البيانات تعرف أحيانا بتسرب المجموعة (Group Leakage) والهدف من مجموعة الاختبار هو محاكاة أداء النموذج عند مواجهة بيانات جديدة تماما وغير مرئية في العالم الحقيقي.

في السيناريو الخاطئ وهو التقسيم حسب السجل الفرعي (المعاملات) :

  • هنا يتم خلط جميع المعاملات أو قراءات الزلازل من جميع العملاء معا بشكل عشوائي ثم يتم تقسيمها 80% للتدريب و 20% للاختبار.
  • المشكلة تكمن في أن مثلا العميل "أ" لديه 10 معاملات ومن المحتمل أن تقع 8 معاملات في مجموعة التدريب و 2 في مجموعة الاختبار.
  • وعندما يتدرب النموذج فإنه لا يتعلم فقط الأنماط العامة للمعاملات بل يتعلم أيضا الأنماط الخاصة بالعميل أ مثل عادات إنفاقه ومواعيده المفضلةوهكذا . وعندما يرى النموذج المعاملتين المتبقيتين للعميل أ في مجموعة الاختبار فإنه يتذكره جزئيا.
  • والنتيجة انه النموذج يحقق أداء جيدا بشكل مبالغ فيه (حيث يكون متفائل بشكل خاطئ) في مجموعة الاختبار وأنت لا تختبر قدرته على التنبؤ بعملاء جدد بل تختبر قدرته على التنبؤ بمعاملات إضافية لعملاء يعرفهم بالفعل.

أما في السيناريو الصحيح وهو التقسيم حسب السجل (العملاء) :

  • فهنا أنت لا تقسم المعاملات بل تقسم العملاء (أو الزلازل).
  • فمثلا :
    • تحدد 80% من العملاء بشكل عشوائي وجميع معاملات هؤلاء العملاء تذهب إلى مجموعة التدريب.
    • وال 20% المتبقية من العملاء جميع معاملاتهم تذهب إلى مجموعة الاختبار.
  • هنا النموذج يتدرب على مجموعة كاملة من العملاء.
  • ويتم اختبار النموذج على مجموعة مختلفة تماما من العملاء لم يرهم من قبل.
  • وهذا يحاكي بدقة ما سيحدث في الواقع حيث سيطلب منك التنبؤ بسلوك عميل جديد ليس في قاعدة بياناتك التدريبية.

انضم إلى النقاش

يمكنك أن تنشر الآن وتسجل لاحقًا. إذا كان لديك حساب، فسجل الدخول الآن لتنشر باسم حسابك.

زائر
أجب على هذا السؤال...

×   لقد أضفت محتوى بخط أو تنسيق مختلف.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   جرى استعادة المحتوى السابق..   امسح المحرر

×   You cannot paste images directly. Upload or insert images from URL.

  • إعلانات

  • تابعنا على



×
×
  • أضف...