تقنية

مطابقة asof عند وقت القرار: هل نقبل السجل المتساوي في الوقت؟

سجلان مؤلفان عند التاسعة والعاشرة وقرار في العاشرة يختار قيمة ثمانية عند السماح بالمساواة أو خمسة عند اشتراط وقت أقدم
رسم أصلي لقاعدة مطابقة مؤلفة؛ لا نتيجة دمج أو إثبات توفر معلومة.

مطابقة asof عند وقت القرار تحتاج تعريف معنى «السجل السابق». هل نقصد آخر سجل وقته أقدم من القرار فقط، أم نسمح أيضا بسجل يحمل الوقت نفسه؟ هذا الاختلاف قد يغير قيمة الميزة التي نلحقها بصف القرار، حتى مع ثبات القائمتين وترتيبهما.

الخلاصة السريعة

في الاتجاه backward، يسمح allow_exact_matches=True بالوقت المتساوي، بينما False يشترط وقتا أقدم؛ ولا يثبت أي الخيارين أن المعلومة كانت متاحة فعلا.

  • تختار merge_asof في pandas بالاتجاه backward آخر مفتاح سابق أو مساو، ويستبعد allow_exact_matches=False المساواة. يجب ترتيب مفتاح المطابقة تصاعديا. [1]
  • نؤلف قرارا وقته 10:00 وسجلين للكيان نفسه:09:00 بقيمة 5 و 10:00 بقيمة 8. دون حد تحمل زمني، يختار السماح بالمساواة 8 ، ويختار المنع 5.
  • تغيير شرط المساواة يغير المطابقة، لا وقت وصول المصدر. إذا وصل سجل 10:00 بعد القرار، لا تجعله مساواة الوقت معلومة متاحة حينه؛ نراجع التوفر بقاعدة مستقلة.
  • إذا لم يوجد سجل يحقق الشرط فلا نخترع قيمة سابقة أو نملأها من المستقبل. نوثق الاتجاه والمساواة وحد التحمل ومعنى الوقت والكيان؛ المثال لا يشغل مكتبة أو يضمن منع التسرب.

أي معنى للسابق تستخدم المطابقة؟

تبحث merge_asof مع backward عن آخر مفتاح أقل من مفتاح الصف أو مساو له؛ ويجعل allow_exact_matches=False المقارنة صارمة. تشترط الوثائق ترتيب مفتاح الدمج تصاعديا. [1]

نعامل المفتاح هنا وقتا في التاريخ والمرجع الزمني نفسيهما. لا نقارن نصوص أوقات بلا مرجع، ولا نختار nearest الذي قد يبحث في اتجاهين؛ السؤال مقصور على مطابقة سابقة.

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

كيف تغير المساواة القيمة الملحقة؟

نعلن سجلين مرتبين للكيان نفسه: في 09:00 القيمة 5 ، وفي 10:00 القيمة 8. وقت القرار 10:00 ، ولا نضع حد تحمل يستبعد السجل الأقدم. اخترنا القيم للشرح، وليست قياسات أو نتيجة إعداد نموذج.

السابق أو المساوي يقبل السجلين من حيث الوقت، ثم يختار الأخير 10:00. السابق الصارم يستبعد المساواة، فيبقى 09:00. لم تتغير صفوف المصدر؛ الذي تغير هو شرط قبول الحد المتساوي.

الجدول اشتقاق من القاعدة على قائمة معلنة، لا مخرجات استدعاء. لو فرضنا حدا أقصى للبعد الزمني فقد يستبعد 09:00 أيضا، فلا ننقل القيمة 5 إلى كل إعداد مهما اختلف حد التحمل.

قاعدة المطابقة المؤلفةوقت السجل المختارقيمته
السابق أو المساوي للقرار 10:0010:008
السابق فقط للقرار 10:0009:005

هل المطابقة الصحيحة تثبت توفر المعلومة؟

نفترض الآن أن الوقت المدون في السجل هو وقت الحدث، وأن سجل 10:00 لم يصل إلى النظام إلا 10:02. عند قرار في 10:00 ، لا يكفي تطابق وقت الحدث لإثبات أن قيمته كانت معروفة للنظام في تلك اللحظة.

هذه فرضية إضافية منفصلة عن الحساب السابق. نراجع وقت التوفر ومصدره والنسخة المتاحة، ثم نطبق سياسة المهمة على المرشحين. لا نعلن أن منع المساواة وحده يحل وصولا متأخرا: حتى سجل 09:00 قد يصل بعد القرار في بيانات أخرى.

لذلك نسمي الفحص الأول مطابقة مفتاح وفق شرط، ونسمي فحص التوفر باسمه. جمعهما تحت عبارة «السابق» يخفي فرقًا يمكن أن يغير إعداد الميزة دون أن يغير صيغة الوقت الظاهرة.

كيف نراجع إعداد المطابقة؟

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

إذا كانت القائمة لا تحوي إلا 10:00 مع منع المساواة، فلا يوجد مرشح أقدم فيها. نصنف الحالة وفق سياسة الغياب المعلنة، دون اختراع 09:00 أو استعارة سجل لاحق لملء الفراغ.

لم ننفذ دمجا أو نقس أداء. المثال يبين أثر شرط محدد في عضوية المطابقة، بينما تحتاج سلامة الميزات مراجعة التوفر وتعريف المصدر والتنفيذ الفعلي أيضا.

المصادر ومتابعة القراءة

  1. pandas: merge_asof (يفتح في نافذة جديدة)pandas.pydata.org

أُعدّ هذا المقال بصياغة عربية أصلية بالاستناد إلى المصادر أعلاه، وهو مدخل تمهيدي إلى الموضوع. اقرأ منهجية المحتوى وحدوده.