هل هناك خوارزمية جيدة للتحقق من التغييرات في البيانات خلال فترة زمنية محددة؟

StackOverflow https://stackoverflow.com/questions/2113407

  •  22-09-2019
  •  | 
  •  

سؤال

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

لديّ إمكانية الوصول إلى نظام داخلي يخزن هذه الأسعار التاريخية (وليس قاعدة بيانات علائقية!). أرغب في تقديم تقرير يسرد أي منتجات لم يتم نقل سعرها على الإطلاق أو أقل من قول 10 ٪ خلال الفترة الزمنية.

لا يمكنني فقط مقارنة القيمة الأولى (اليوم 1) بالقيمة في النهاية (اليوم N) حيث يمكن أن يعود السعر إلى ما كان عليه في اليوم الأخير مما سيؤدي إلى إيجابية خاطئة بينما سعر المنتج يمكن أن يكون ارتفاع في مكان ما بين بالطبع.

هل هناك أي خوارزميات ثابتة للقيام بذلك في وقت حساب معقول؟

هل كانت مفيدة؟

المحلول

إذا كان من الضروري التحقق في كثير من الأحيان (لعدد كبير من الفاصل الزمني ، مثل يوميًا للعام الماضي ، وللحصول على نفس المجموعة من المنتجات) ، يمكنك تخزين القيم العالية والمنخفضة لكل عنصر في الأسبوع/الشهر. من خلال الجمع بين الحدود الأسبوعية و/أو الشهرية مع بعض البيانات الخام على حواف الفاصل الزمني ، يمكنك الحصول على الحد الأدنى والحد الأقصى لقيمة على الفاصل الزمني.

نصائح أخرى

لا توجد طريقة للقيام بذلك دون النظر إلى كل يوم.

لنفترض أن البيانات تبدو مثل:

oooo0oooo

مع هذا الارتفاع ليوم واحد في الوسط. لن تصطاد أنه ما لم تتحقق من اليوم الذي يحدث فيه الارتفاع - بمعنى آخر ، تحتاج إلى التحقق كل يوم.

إذا تمكنت من إضافة بيانات إلى KDB (أي أنك لا تقتصر على القراءة) ، فيمكنك التفكير في إضافة "عدد الأيام منذ تغيير السعر الأخير" كمجموعة جديدة من البيانات (أي رقم واحد لكل أداة مالية). ستؤدي المهمة اليومية بعد ذلك إلى جلب علامة اليوم والمسار الأمس ، وتحديث الأرقام المخزنة. وبالمثل ، يمكنك الحفاظ على أعلى مستوياته في الشهر الماضي (الشهر الماضي ، العام الماضي) في KDB. يجب عليك تشغيل وظيفة عبر مجموعة البيانات الأكبر لتوضيح القيم في البداية ، ولكن بعد ذلك ستشمل التحديثات اليومية بيانات أقل بكثير.

أوصي بأنه إذا اعتمدت شيئًا كهذا ، فلديك طريقة ما لإعادة تشغيلها للجميع أو جزء من مجموعة البيانات (قل لإضافة منتج جديد).

أخيرًا - هل يتم تطبيع التاريخ مقابل الأسعار الحالية؟ (أي إعادة تقييم لتقسيم الأسهم أو ما شابه ذلك في الاعتبار). إذا لم يكن الأمر كذلك ، فأنت بحاجة إلى اكتشاف هذه الانقطاعات وتقسيمها.

تعديل

سأقوم بالتحقيق في USNG KDB+/Q لتنفيذ معالجة الإشارات ، بدلاً من استخراج البيانات الأولية إلى تطبيق Java. كما تقول ، إنه أداء للغاية.

يمكنك القيام بذلك إذا تمكنت من تتبع القيمة Min و Max للسعر خلال الفاصل الزمني - وهذا يفترض أن الفاصل الزمني لا يتم تغييره باستمرار. تتمثل إحدى طرق تتبع قيم Min و Max لمجموعة من العناصر المتغيرة في موضوعة أكوامين "مرة أخرى إلى الوراء" - يمكنك تخزين هذا وبعض المؤشرات اللازمة للعثور على العناصر القديمة وإزالتها في صفيف واحد أو اثنتين في متجرك . فكرة وضع أكوام إلى الوراء هي في فن برمجة الكمبيوتر في Knuth المجلد 3 كتمرين 31 القسم 5.2.3. يطلق Knuth هذا النوع من الوحش على عجل الأولوية ، ويبدو أن هذا يمكن البحث فيه. Min و Max متوفرة بتكلفة ثابتة. تكلفة تعديله عند وصول سعر جديد هي Log N ، حيث N هو عدد العناصر المخزنة.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top