Scikit-learn: تطبيق WalkForward عبر المدقق لبيانات السلاسل الزمنية.

تم إنشاؤها على ١٥ يوليو ٢٠١٩  ·  23تعليقات  ·  مصدر: scikit-learn/scikit-learn

وصف


نفذ السير إلى الأمام لبيانات السلاسل الزمنية مع وجود فجوة بين مجموعة القطار ومجموعة الاختبار.

نتائج متوقعة


image

يتسع
image

Needs Decision New Feature

التعليق الأكثر فائدة

أعتقد أن إضافة تحقق متقاطع متسلسل زمني أفضل في النطاق.

ال 23 كومينتر

saninstein لماذا الفجوة؟

فجوة clstaudt ميزة مفيدة لتقييم النماذج في تداول الأسهم. في التنبؤ بالأسعار ، تكون هذه حالة شائعة جدًا عندما يعمل النموذج جيدًا على البيانات مباشرة بعد مجموعة التدريب ويتدهور بمرور الوقت. لذلك ، في بعض الحالات ، قد يكون من المفيد تخطي قدر ضئيل من البيانات "الجيدة" التي حدثت بعد مجموعة التدريب.

أعتقد أن موقفنا المعتاد من الميزات المتعلقة بالسلاسل الزمنية هو أنها خارج نطاق sklearn (على الأقل في الوقت الحالي). وبالنسبة لي ، سيكون من المنطقي إعادة النظر في الأمر بمجرد أن يكون لدينا خصائص نموذجية مثل الطابع الزمني المرتبط بالبيانات.

أود الحصول على رأي آخر واحد على الأقل من @ scikit-learn / core-devs حول هذا الأمر ، لكن تصويتي هو حل "لن يتم إصلاحه" في الوقت الحالي.

لدىadrinjalali sklearn بالفعل العديد من النماذج الجيدة للسلسلة الزمنية ،

اي واحدة؟

adrinjalali هناك TimeSeriesSplit والذي تم تنفيذه بالفعل في sklearn :)

TimeSeriesSplit هي حالة محددة من WalkForwardCV المقترح (يمكن تحقيقه باستخدام gap=0, expanding=True args) ، في الواقع يمكن استبدال TimeSeriesSplit بسهولة بـ WalkForwardCV (فقط قم بتعيين العلامات الافتراضية كما ذكرت من قبل).

أنا جزء من فريق ML الخاص بتداول الأسهم وقد نجحنا في استخدام العديد من ميزات sklearn والمكتبات المتوافقة مع sklearn. كان هناك نقص في أداة تقسيم السيرة الذاتية المناسبة وقررنا المساهمة بها مرة أخرى في sklearn ، ولكن إذا لم يكن الأمر كذلك ، فسنستخدمها داخليًا :)

TimeSeriesSplit هي حالة محددة من WalkForwardCV المقترح (يمكن تحقيقه من خلال فجوة = 0 ، توسيع = أرغز حقيقية) ، في الواقع يمكن استبدال TimeSeriesSplit بسهولة بـ WalkForwardCV (فقط قم بتعيين الأرجل الافتراضية كما ذكرت من قبل).

عادل ، ولكن بعد ذلك ربما أحاول تصحيح TimeSeriesSplit بطريقة متوافقة مع الإصدارات السابقة لإضافة الميزة التي تحتاجها. هذا أيضًا لديه فرصة أكبر للقبول من قبل المجتمع.

ليس توقع السلاسل الزمنية هو الحالة الوحيدة لـ WalkForwardCV. يكون مفيدًا عندما يتم طلب مراقبة مجموعة البيانات في الوقت المناسب ويجب إجراء التحقق بنفس الطريقة.

على سبيل المثال ، تتمثل إحدى مهامنا في فقدان مشكلة تصنيف التداولات عند محاولة تحسين استراتيجية التداول الحالية باستخدام نموذج ml الذي "يمنح الإذن" بالتداول.


عادل ، ولكن بعد ذلك ربما أحاول تصحيح TimeSeriesSplit بطريقة متوافقة مع الإصدارات السابقة لإضافة الميزة التي تحتاجها. هذا أيضًا لديه فرصة أكبر للقبول من قبل المجتمع.

أعتقد أنه سيكون أفضل حل.

أنا عالم بيانات أعمل على نماذج التنبؤ بالسلاسل الزمنية. افترضت أن الأشياء الخاصة بالسلسلة الزمنية خارج نطاق scikit-Learn ، لذلك بدأت في تنفيذ رمز التحقق الخاص بي ، والذي يختلف قليلاً عن الطريقة الموضحة في هذا الموضوع.

علمت لاحقًا بوجود TimeSeriesSplit وتساءلت عما إذا كنت قد بدأت في إعادة اختراع العجلة. أفضل المساهمة برمز التحقق في مشروع قائم وقائم.

نظرًا لوجود طلب واضح على هذا النوع من تقييم النموذج ، ما زلت أتساءل أين يناسبه.

هناك العديد من الأنماط اللازمة للتنبؤ بالسلاسل الزمنية. أنا
قد يعتقد على سبيل المثال أن المحولات التي تخلق ميزات مويجة من شأنها
تكون مفيدة جدا.

ومع ذلك ، فهذه خارج نطاق scikit-Learn. سيكون من المفيد
لإنشاء حزمة تنفذ كل ذلك بطريقة متسقة. هو - هي
من المحتمل أن تكتسب الزخم.

سيكون من المفيد إنشاء حزمة تنفذ كل ذلك بطريقة متسقة. من المحتمل أن يكتسب الزخم.

نعم فعلا. أشركني.

يسعدنا الحصول على مثل هذه الحزمة في https://github.com/scikit-learn-contrib/

إغلاق هذا واحد ثم :)

أعتقد أن إضافة تحقق متقاطع متسلسل زمني أفضل في النطاق.

انظر أيضًا # 13666 # 13204 # 6322 # 13761

فيما يتعلق بالنطاق ، أتفق مع amueller على أننا يجب أن نكون منفتحين لتوسيع هذا ليشمل حالات الاستخدام الشائعة. بشكل أساسي ، نفترض عمومًا في مقدرات scikit-Learn (أي حزمة sklearn) أن النموذج يجب أن يكون ثابتًا إلى حد ما لعينة النظام وترتيب الميزات. هذا لا يشمل مقدرات السلاسل الزمنية. ومع ذلك ، ليس لدينا هذا القيد في فواصل التحقق من الصحة المتقاطعة حيث لطالما اعتبرنا طلب العينة شيئًا يجب الانتباه إليه ؛ في النهاية ، التحقق المتقاطع هو المكان الذي تكمن فيه الافتراضات الأساسية حول ML.

ولكن كما يشيرamueller أيضًا ، يجب أن تستمر المحادثة في طلبات السحب الحالية ، وتحريكها نحو حالة مقبولة.

بالتأكيد ، ولكني حذر من الحالات التي يجب أن يكون فيها الطابع الزمني الفعلي للبيانات مهمًا في التقسيم (وهو ما يجب أن تكون عليه IMO) ، وليس مجرد عدد الصفوف. لا أعتقد أننا سنتعامل مع الطوابع الزمنية في أي وقت قريب ، أليس كذلك؟

في السنوات الخمس التي انقضت منذ أن اقترحت هذا لأول مرة في https://github.com/scikit-learn/scikit-learn/issues/3202 ، ظهر هذا السؤال 50 مرة على الأقل في محادثات التدريس أو التقديم. saninstein ، هل اتخذت قرارًا بشأن ما إذا كنت ستدفع من أجل التضمين هنا أم -contrib؟ أرغب في المساعدة إذا كان هناك أي شيء تحتاج إلى مساعدة للحصول عليه عبر الخط (في مكان ما).

أود أيضا أن أساهم. كتبت في قضية أخرى حول هذا الموضوع وترغب في التوسع في TimeSeriesSplit أو التعاون في إنشاء حزمة أخرى لذلك. أشعر أن هذا شيء مرتبط بالانشقاقات في مجال السيرة الذاتية ويجب أن يكون في sklearn.
لأكون صريحًا على الرغم من أنني في حيرة من أمري بشأن إلى أين أذهب وماذا أفعل الآن لأنني أريد المساهمة. أنا على دراية بوقتي وأود استخدامه بالطريقة الصحيحة للمجتمع.

mjbommar أعتقد كما قلت أنا و jnothman أعلاه ، نحن منفتحون تمامًا على المضي قدمًا وهناك بعض العلاقات العامة الخارجة ، على وجه الخصوص # 13761 و # 13204 وستكون التعليقات على واجهتي برمجة التطبيقات موضع تقدير كبير.

أعتقد أن # 13204 يبدو أنه الأكثر نضجًا ، لذا فربما يكون الانتقال من هناك أكثر منطقية؟ لست متأكدًا مما إذا كان kykosic لا يزال يعمل على ذلك ، نظرًا للتأخير في ردنا؟

حسنًا ، على الرغم من أن # 13204 لا يطبق WalkForward ... هل نريد دمج # 13204 أولاً ثم تنفيذ WalkForward لاحقًا؟
هل يجب أن يكون هذا كائنًا منفصلًا عن السيرة الذاتية؟

amueller لقد نسيت حول # 13204 حتى ظهر هذا

kykosic رائع ، شكرا!

هل لديك فضول لمعرفة سبب إغلاق هذه المشكلة بسبب الانتهاء من # 13204. اعتقدت أن # 13204 كان شرطًا مسبقًا لهذا.

أضاف 13204 gap إلى TimeSeriesSplit وهي الميزة التي طلبتها هذه المشكلة.

هل كانت هذه الصفحة مفيدة؟
0 / 5 - 0 التقييمات