استخدام جداول ميزات السلاسل الزمنية مع دعم نقطة زمنية

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

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

تتضمن جداول ميزات السلسلة الزمنية عمود مفتاح الطابع الزمني الذي يضمن أن كل صف في مجموعة بيانات التدريب يمثل أحدث قيم الميزات المعروفة اعتبارا من الطابع الزمني للصف. يجب استخدام جداول ميزات السلاسل الزمنية كلما تغيرت قيم الميزات بمرور الوقت، على سبيل المثال مع بيانات السلاسل الزمنية أو البيانات المستندة إلى الحدث أو البيانات المجمعة زمنيا.

إشعار

  • باستخدام Databricks Runtime 13.3 LTS وما فوق، يمكن استخدام أي جدول Delta في كتالوج Unity مع المفاتيح الأساسية ومفاتيح الطابع الزمني كجدول ميزات سلسلة زمنية. نوصي بتطبيق Z-Ordering على جداول السلاسل الزمنية للحصول على أداء أفضل في عمليات البحث في نقطة زمنية.
  • يشار أحيانا إلى وظيفة البحث في نقطة زمنية باسم "السفر عبر الزمن". لا ترتبط وظيفة نقطة زمنية في Databricks Feature Store بالسفر عبر الوقت في Delta Lake.
  • لاستخدام وظيفة نقطة زمنية، يجب تحديد المفاتيح المتعلقة بالوقت باستخدام الوسيطة timeseries_columns (لهندسة الميزات في كتالوج Unity) أو الوسيطة timestamp_keys (لمخزن ميزات مساحة العمل). يشير هذا إلى أنه يجب ربط صفوف جدول الميزات من خلال مطابقة أحدث قيمة لمفتاح أساسي معين لا يتجاوز قيمة timestamps_keys العمود، بدلا من الانضمام استنادا إلى تطابق الوقت الدقيق. إذا قمت فقط بتعيين عمود timeseries ك عمود مفتاح أساسي، فلا يطبق مخزن الميزات منطق نقطة زمنية على عمود timeseries أثناء الصلات. بدلا من ذلك، فإنه يطابق الصفوف فقط مع تطابق الوقت الدقيق بدلا من مطابقة جميع الصفوف قبل الطابع الزمني.

كيفية عمل جداول ميزات السلاسل الزمنية

لنفترض أن لديك جداول الميزات التالية. يتم أخذ هذه البيانات من دفتر الملاحظات المثال.

تحتوي الجداول على بيانات أداة استشعار تقيس درجة الحرارة والرطوبة النسبية والضوء المحيط وثاني أكسيد الكربون في غرفة. طاولة الحقيقة الأرضية تشير إلى ما إذا كان شخص ما موجودا في الغرفة. يحتوي كل جدول على مفتاح أساسي ('room') ومفتاح طابع زمني ('ts'). للتبسيط، يتم عرض بيانات قيمة واحدة فقط للمفتاح الأساسي ('0').

مثال على بيانات جدول الميزات

يوضح الشكل التالي كيفية استخدام مفتاح الطابع الزمني لضمان صحة نقطة زمنية في مجموعة بيانات التدريب. تتم مطابقة قيم الميزات استنادا إلى المفتاح الأساسي (غير المعروض في الرسم التخطيطي) ومفتاح الطابع الزمني، باستخدام صلة AS OF. تضمن صلة AS OF استخدام أحدث قيمة للميزة في وقت الطابع الزمني في مجموعة التدريب.

كيفية عمل النقطة الزمنية

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

إذا قمت بإنشاء مجموعة بيانات تدريب دون مراعاة مفتاح الطابع الزمني، فقد يكون لديك صف بقيم الميزة هذه وحقيقة أرضية ملاحظتها:

Temp rh ضوء ثاني اكسيد الكربون الحقيقة الأرضية
15.8 32 212 630 0

ومع ذلك، هذه ليست ملاحظة صالحة للتدريب، لأن قراءة ثاني أكسيد الكربون 630 أخذت في الساعة 8:52، بعد ملاحظة الحقيقة الأرضية في الساعة 8:50. البيانات المستقبلية "تسرب" إلى مجموعة التدريب، مما سيضعف أداء النموذج.

المتطلبات

  • لهندسة الميزات في كتالوج Unity: هندسة الميزات في عميل كتالوج Unity (أي إصدار)
  • بالنسبة إلى Workspace Feature Store: عميل 'متجر الميزات' v0.3.7 والإصدارات الأحدث

إنشاء جدول ميزات سلسلة زمنية في كتالوج Unity

في كتالوج Unity، أي جدول مع مفتاح TIMESERIES الأساسي هو جدول ميزة سلسلة زمنية. راجع إنشاء جدول ميزات في كتالوج Unity لمعرفة كيفية إنشاء جدول.

إنشاء جدول ميزات سلسلة زمنية في مساحة العمل المحلية

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

بدءا من عميل 'متجر الميزات' v0.13.4، يجب تحديد أعمدة مفتاح الطابع الزمني في الوسيطة primary_keys . مفاتيح الطابع الزمني هي جزء من "المفاتيح الأساسية" التي تحدد كل صف بشكل فريد في جدول الميزات. مثل أعمدة المفاتيح الأساسية الأخرى، لا يمكن أن تحتوي أعمدة مفاتيح الطابع الزمني على NULL قيم.

هندسة الميزات في كتالوج unity

fe = FeatureEngineeringClient()
# user_features_df DataFrame contains the following columns:
# - user_id
# - ts
# - purchases_30d
# - is_free_trial_active
fe.create_table(
  name="ml.ads_team.user_features",
  primary_keys=["user_id", "ts"],
  timeseries_columns="ts",
  features_df=user_features_df,
)

عميل مخزن ميزات مساحة العمل v0.13.4 وما فوق

fs = FeatureStoreClient()
# user_features_df DataFrame contains the following columns:
# - user_id
# - ts
# - purchases_30d
# - is_free_trial_active
fs.create_table(
  name="ads_team.user_features",
  primary_keys=["user_id", "ts"],
  timestamp_keys="ts",
  features_df=user_features_df,
)

عميل مخزن ميزات مساحة العمل v0.13.3 وما يلي

fs = FeatureStoreClient()
# user_features_df DataFrame contains the following columns:
# - user_id
# - ts
# - purchases_30d
# - is_free_trial_active
fs.create_table(
  name="ads_team.user_features",
  primary_keys="user_id",
  timestamp_keys="ts",
  features_df=user_features_df,
)

يجب أن يحتوي جدول ميزات السلسلة الزمنية على مفتاح طابع زمني واحد ولا يمكن أن يحتوي على أي أعمدة أقسام. يجب أن يكون عمود مفتاح الطابع الزمني من TimestampType أو DateType.

توصي Databricks بأن لا تحتوي جداول ميزات السلاسل الزمنية على أكثر من عمودين أساسيين للمفتاح لضمان عمليات الكتابة والبحث ذات الأداء.

تحديث جدول ميزات السلسلة الزمنية

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

هندسة الميزات في كتالوج unity

fe = FeatureEngineeringClient()
# daily_users_batch_df DataFrame contains the following columns:
# - user_id
# - ts
# - purchases_30d
# - is_free_trial_active
fe.write_table(
  "ml.ads_team.user_features",
  daily_users_batch_df,
  mode="merge"
)

عميل مخزن ميزات مساحة العمل v0.13.4 وما فوق

fs = FeatureStoreClient()
# daily_users_batch_df DataFrame contains the following columns:
# - user_id
# - ts
# - purchases_30d
# - is_free_trial_active
fs.write_table(
  "ads_team.user_features",
  daily_users_batch_df,
  mode="merge"
)

يتم دعم عمليات الكتابة المتدفقة إلى جداول ميزات السلسلة الزمنية.

إنشاء مجموعة تدريب باستخدام جدول ميزات السلسلة الزمنية

لإجراء بحث في نقطة زمنية عن قيم الميزات من جدول ميزات السلسلة الزمنية، يجب تحديد timestamp_lookup_key في الخاص بالميزة FeatureLookup، والذي يشير إلى اسم عمود DataFrame الذي يحتوي على طوابع زمنية للبحث عن ميزات السلسلة الزمنية مقابلها. يسترد مخزن ميزات Databricks أحدث قيم الميزات قبل الطوابع الزمنية المحددة في عمود DataFrame timestamp_lookup_key والتي تتطابق مفاتيحها الأساسية (باستثناء مفاتيح الطابع الزمني) مع القيم الموجودة في أعمدة DataFrame lookup_key ، أو null إذا لم تكن هناك قيمة ميزة من هذا القبيل.

هندسة الميزات في كتالوج unity

feature_lookups = [
  FeatureLookup(
    table_name="ml.ads_team.user_features",
    feature_names=["purchases_30d", "is_free_trial_active"],
    lookup_key="u_id",
    timestamp_lookup_key="ad_impression_ts"
  ),
  FeatureLookup(
    table_name="ml.ads_team.ad_features",
    feature_names=["sports_relevance", "food_relevance"],
    lookup_key="ad_id",
  )
]

# raw_clickstream DataFrame contains the following columns:
# - u_id
# - ad_id
# - ad_impression_ts
training_set = fe.create_training_set(
  df=raw_clickstream,
  feature_lookups=feature_lookups,
  exclude_columns=["u_id", "ad_id", "ad_impression_ts"],
  label="did_click",
)
training_df = training_set.load_df()

مخزن ميزات مساحة العمل

feature_lookups = [
  FeatureLookup(
    table_name="ads_team.user_features",
    feature_names=["purchases_30d", "is_free_trial_active"],
    lookup_key="u_id",
    timestamp_lookup_key="ad_impression_ts"
  ),
  FeatureLookup(
    table_name="ads_team.ad_features",
    feature_names=["sports_relevance", "food_relevance"],
    lookup_key="ad_id",
  )
]

# raw_clickstream DataFrame contains the following columns:
# - u_id
# - ad_id
# - ad_impression_ts
training_set = fs.create_training_set(
  df=raw_clickstream,
  feature_lookups=feature_lookups,
  exclude_columns=["u_id", "ad_id", "ad_impression_ts"],
  label="did_click",
)
training_df = training_set.load_df()

يجب أن يكون أي FeatureLookup جدول ميزات في سلسلة زمنية بمثابة بحث في نقطة زمنية، لذلك يجب تحديد timestamp_lookup_key عمود لاستخدامه في DataFrame الخاص بك. لا يتخطى البحث في نقطة زمنية الصفوف مع null قيم الميزات المخزنة في جدول ميزات السلسلة الزمنية.

تعيين حد زمني لقيم الميزات التاريخية

باستخدام عميل Feature Store v0.13.0 أو أعلى، أو أي إصدار من Feature Engineering في عميل كتالوج Unity، يمكنك استبعاد قيم الميزات ذات الطوابع الزمنية القديمة من مجموعة التدريب. للقيام بذلك، استخدم المعلمة lookback_window في FeatureLookup.

يجب أن يكون datetime.timedeltaنوع lookback_window بيانات ، والقيمة الافتراضية هي None (يتم استخدام جميع قيم الميزات، بغض النظر عن العمر).

على سبيل المثال، تستبعد التعليمات البرمجية التالية أي قيم ميزات يزيد عمرها عن 7 أيام:

هندسة الميزات في كتالوج unity

from datetime import timedelta

feature_lookups = [
  FeatureLookup(
    table_name="ml.ads_team.user_features",
    feature_names=["purchases_30d", "is_free_trial_active"],
    lookup_key="u_id",
    timestamp_lookup_key="ad_impression_ts",
    lookback_window=timedelta(days=7)
  )
]

مخزن ميزات مساحة العمل

from datetime import timedelta

feature_lookups = [
  FeatureLookup(
    table_name="ads_team.user_features",
    feature_names=["purchases_30d", "is_free_trial_active"],
    lookup_key="u_id",
    timestamp_lookup_key="ad_impression_ts",
    lookback_window=timedelta(days=7)
  )
]

عند الاتصال create_training_set بالأعلى FeatureLookup، فإنه ينفذ تلقائيا الصلة في نقطة زمنية ويستبعد قيم الميزات الأقدم من 7 أيام.

يتم تطبيق نافذة البحث أثناء التدريب والاستدلال الدفعي. أثناء الاستدلال عبر الإنترنت، يتم دائما استخدام أحدث قيمة ميزة، بغض النظر عن نافذة البحث.

نماذج النقاط مع جداول ميزات السلسلة الزمنية

عند تسجيل نموذج مدرب بميزات من جداول ميزات السلاسل الزمنية، يسترد Databricks Feature Store الميزات المناسبة باستخدام عمليات البحث في نقطة زمنية مع بيانات التعريف المحزمة مع النموذج أثناء التدريب. يجب أن يحتوي DataFrame الذي توفره ( FeatureEngineeringClient.score_batch لهندسة الميزات في كتالوج Unity) أو FeatureStoreClient.score_batch (لمخزن ميزات مساحة العمل) على عمود طابع زمني بنفس الاسم و DataType مثل timestamp_lookup_keyFeatureLookup المقدم إلى FeatureEngineeringClient.create_training_set أو FeatureStoreClient.create_training_set.

نشر ميزات السلسلة الزمنية إلى متجر عبر الإنترنت

يمكنك استخدام FeatureEngineeringClient.publish_table (لهندسة الميزات في كتالوج Unity) أو FeatureStoreClient.publish_table (لمخزن ميزات مساحة العمل) لنشر جداول ميزات السلسلة الزمنية إلى المتاجر عبر الإنترنت. يوفر Databricks Feature Store وظيفة نشر لقطة أو نافذة من بيانات السلاسل الزمنية إلى المتجر عبر الإنترنت، اعتمادا على OnlineStoreSpec الذي أنشأ المتجر عبر الإنترنت. يعرض الجدول تفاصيل كل وضع نشر.

موفر المتجر عبر الإنترنت وضع نشر اللقطة وضع نشر النافذة
Azure Cosmos DB (إصدار 0.5.0 وما فوق) س
Azure MySQL (خادم واحد) س
Azure SQL Server س

نشر لقطة سلسلة زمنية

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

بالنسبة للمتاجر عبر الإنترنت التي لا تدعم وقت البقاء، يدعم Databricks Feature Store وضع نشر اللقطة فقط. بالنسبة للمتاجر عبر الإنترنت التي تدعم وقت البقاء، يكون وضع النشر الافتراضي هو لقطة ما لم يتم تحديد وقت البقاء (ttl) في OnlineStoreSpec وقت الإنشاء.

نشر نافذة سلسلة زمنية

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

يدعم المتجر عبر الإنترنت البحث عن المفتاح الأساسي ويسترد قيمة الميزة تلقائيا بأحدث طابع زمني.

لاستخدام وضع النشر هذا، يجب توفير قيمة للوقت للعيش (ttl) في OnlineStoreSpec عند إنشاء المتجر عبر الإنترنت. ttl لا يمكن تغيير بمجرد التعيين. ترث كافة استدعاءات النشر اللاحقة ttl و غير مطلوبة لتعريفه بشكل صريح في OnlineStoreSpec.

مثال دفتر الملاحظات: جدول ميزات السلسلة الزمنية

يوضح دفتر الملاحظات التالي عمليات البحث في نقطة زمنية على جداول ميزات السلاسل الزمنية في مخزن ميزات مساحة العمل.

دفتر ملاحظات مثال جدول ميزة السلسلة الزمنية

الحصول على دفتر الملاحظات