使用具有時間點支持的時間序列特性表

Databricks Feature Store支持需要時間點正確性的用例。

用於訓練模型的數據通常具有內置的時間依賴性。例如,如果您正在訓練一個模型來預測工廠車間的哪些機器需要維護,那麼您可能擁有曆史數據集,其中包含許多機器的傳感器測量和使用數據,以及指示機器是否需要服務的目標標簽。數據集可能包含執行維護服務之前和之後的機器數據。

在構建模型時,必須隻考慮觀察到目標值(需要服務或不需要服務)之前的特征值。如果你沒有明確地考慮每個觀察的時間戳,你可能會無意中使用目標值的時間戳之後測量的特征值進行訓練。這被稱為“數據泄漏”,可能會對模型的性能產生負麵影響。

時間序列特征表包括一個時間戳鍵列,以確保訓練數據集中的每一行都表示該行時間戳的最新已知特征值。當特征值隨時間變化時,您應該使用時間序列特征表,例如時間序列數據、基於事件的數據或時間聚合的數據。

請注意

  • 時間點查找功能有時被稱為“時間旅行”。Databricks Feature Store中的時間點功能與三角洲湖時間旅行

  • 屬性指定與時間相關的鍵,才能使用時間點功能timestamp_keys論點。屬性的值匹配特定主鍵的最新值,從而聯接特性表行timestamps_keys列,而不是基於精確的時間匹配進行連接。如果將時間戳列指定為主鍵列,在連接期間,特征存儲不會將時間點邏輯應用到時間戳列。相反,它隻匹配具有精確時間匹配的行,而不是匹配時間戳之前的所有行。

時間序列特征表是如何工作的

假設您有以下特性表。此數據取自例如筆記本電腦

這些表包含傳感器數據,測量房間內的溫度、相對濕度、環境光和二氧化碳。地麵真實值表顯示了一個人是否出現在房間裏。每個表都有一個主鍵(' room ')和一個時間戳鍵(' ts ')。為簡單起見,隻顯示主鍵(' 0 ')的單個值的數據。

特征表數據示例

下圖說明了如何使用時間戳鍵來確保訓練數據集中時間點的正確性。使用AS OF連接,特性值基於主鍵(圖中沒有顯示)和時間戳鍵進行匹配。AS OF連接確保在訓練集中使用時間戳時特征的最新值。

時間點是如何工作的

如圖所示,訓練數據集包括每個傳感器在觀測到的地麵真相上的時間戳之前的最新特征值。

如果你創建了一個訓練數據集而不考慮時間戳鍵,你可能會有一行帶有這些特征值和觀察到的ground truth:

臨時

rh

二氧化碳

地麵實況

15.8

32

212

630

0

然而,這對訓練來說並不是一個有效的觀察結果,因為二氧化碳630的讀數是在8:52,在8:50的地麵真實值觀測之後拍攝的。未來的數據正在“泄露”到訓練集中,這將損害模型的性能。

需求

特性存儲客戶端v0.3.7及更高版本。

在Databricks feature Store中創建一個時間序列特征表

要創建時間序列特性表,DataFrame或模式必須包含指定為時間戳鍵的列。

fsFeatureStoreClient()# user_features_df數據幀包含以下列:# - user_id# - ts# - purchases_30d . ## - is_free_trial_activefscreate_table的名字“ads_team.user_features”“user_id”timestamp_keys“t”features_dfuser_features_df

時間序列特征表必須有一個時間戳鍵,不能有任何分區列。時間戳鍵列必須為TimestampTypeDateType也不能是主鍵。

Databricks建議時間序列特征表不超過兩個主鍵列,以確保性能寫入和查找。

更新時間序列特征表

當將特征寫入時間序列特征表時,你的DataFrame必須為特征表中的所有特征提供值,這與常規的特征表不同。此約束降低了時間序列特征表中跨時間戳的特征值的稀疏性。

fsFeatureStoreClient()DataFrame包含以下列:# - user_id# - ts# - purchases_30d . ## - is_free_trial_activefswrite_table“ads_team.user_features”daily_users_batch_df模式“合並”

支持流式寫入時間序列特征表。

創建一個帶有時間序列特征表的訓練集

若要對時間序列特征表中的特征值執行時間點查找,必須指定timestamp_lookup_key在功能的FeatureLookup,它指示包含時間戳的DataFrame列的名稱,要根據該列查找時間序列特征。Databricks Feature Store檢索DataFrame的時間戳之前的最新特征值timestamp_lookup_key列,並且其主鍵與DataFrame中的值匹配lookup_key列,或如果不存在這樣的特性值。

feature_lookupsFeatureLookuptable_name“ads_team.user_features”feature_names“purchases_30d”“is_free_trial_active”],lookup_key“u_id”timestamp_lookup_key“ad_impression_ts”),FeatureLookuptable_name“ads_team.ad_features”feature_names“sports_relevance”“food_relevance”],lookup_key“ad_id”# raw_clickstream數據幀包含以下列:# - u_id# - ad_id# - ad_印象派training_setfscreate_training_setraw_clickstreamfeature_lookupsfeature_lookupsexclude_columns“u_id”“ad_id”“ad_impression_ts”],標簽“did_click”training_dftraining_setload_df()

任何FeatureLookup在時間序列特征表上必須是一個時間點查找,因此它必須指定timestamp_lookup_key列用於你的數據框架。時間點查找不會跳過存儲在時間序列特征表中的特征值。

用時間序列特征表對模型進行評分

當您對使用時間序列特征表中的特征訓練的模型進行評分時,Databricks feature Store使用在訓練期間與模型打包的元數據進行時間點查找來檢索適當的特征。提供給的數據幀FeatureStoreClient.score_batch必須包含具有相同名稱和的時間戳列數據類型隨著timestamp_lookup_keyFeatureLookup提供給FeatureStoreClient.create_training_set

例如筆記本電腦

筆記本時間序列特征表示例

在新標簽頁打開筆記本