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

數據用於訓練模型通常內置的時間依賴關係。舉個例子,如果你正在訓練一個模型來預測哪些機器需要維護一個工廠,你可能有曆史數據集包含傳感器測量數據和使用數據對許多機器,隨著目標標簽表明如果機器需要服務。機器的數據集可能包含數據之前和之後都進行維修服務。

構建模型時,您必須考慮隻有特性值直到時間的觀察到目標值(需要服務或不需要的服務)。如果你沒有明確考慮每個觀測的時間戳,你可能無意中使用特征值測量目標的時間戳值後培訓。這就是所謂的“數據泄漏”,可以對模型的性能產生不利影響。

時間序列特征表包含一個時間戳鍵列,確保訓練數據集的每一行表示的最新特性值稱為行的時間戳。您應該使用時間序列特征表特征值隨時間變化時,例如時間序列數據,基於事件的數據,或time-aggregated數據。

請注意

  • 磚運行時13.2及以上,任何δ在統一目錄表主鍵和時間戳鍵可以用來作為時間序列特征表。我們建議采用z值時間序列表上時間點查找更好的性能。

  • 時間點的查找功能有時被稱為“時間旅行”。磚的時間點功能特性存儲無關三角洲湖時間旅行

  • 使用時間點功能,您必須指定與時間相關的鍵使用timestamp_keys論點。這表明功能表行應該加入了匹配最近為特定的主鍵值,比的值不遲timestamps_keys列,而不是加入基於一個精確的匹配時間。如果你隻指定一個時間戳列作為主鍵列,存儲特性不適用時間點邏輯在加入時間戳列。相反,它隻匹配行匹配,而不是一個確切的時間匹配所有行之前時間戳。

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

假設你有以下特性表。這些數據來自例如筆記本電腦

表包含傳感器數據測量溫度,相對濕度,環境光和二氧化碳在一個房間裏。地麵真值表表明如果一個人出現在房間裏。每個表的主鍵(“房間”)和一個時間戳(ts)的關鍵。為簡單起見,隻有一個值的數據主鍵(“0”)。

例子功能表數據

下圖說明了時間戳的關鍵是用於確保時間點訓練數據集的正確性。特征值匹配基於主鍵(圖中未顯示)和時間戳鍵,使用一個連接。最近加入的是確保特性時的時間戳值用於訓練集。

時間點是如何運作的嗎

如圖,訓練數據集包括最新的每個傳感器特性值之前觀察地麵上的時間戳的真理。

如果您創建了一個訓練數據集不考慮時間戳鍵,您可能有一個行用這些特征值和觀察地麵的真相:

臨時

rh

二氧化碳

地麵實況

15.8

32

212年

630年

0

然而,這不是一個有效的觀察訓練,因為630年的二氧化碳閱讀,在落地後觀察地麵真理,14日。未來數據訓練集“泄漏”,這將損害模型的性能。

需求

功能存儲客戶端v0.3.7以上。

創建一個時間序列特性表

如果啟用了工作區為統一目錄,任何表的主鍵包含一個時間戳是一個時間序列特性表。您不需要使用任何的命令在這一節中。

創建一個時間序列特性表存儲在本地工作區特性,DataFrame或模式必須包含一個列,你指定時間戳的關鍵。

從功能存儲客戶端v0.13.4,時間戳中指定鍵列必須primary_keys論點。時間戳鍵的一部分“主鍵”,唯一地標識表中的每一行功能。像其他主鍵列,不能包含時間戳關鍵列值。

fs=FeatureStoreClient()# user_features_df DataFrame包含以下列:#——user_id# - ts#——purchases_30d#——is_free_trial_activefscreate_table(的名字=“ads_team.user_features”,primary_keys=(“user_id”,“t”),timestamp_keys=“t”,features_df=user_features_df,)
fs=FeatureStoreClient()# user_features_df DataFrame包含以下列:#——user_id# - ts#——purchases_30d#——is_free_trial_activefscreate_table(的名字=“ads_team.user_features”,primary_keys=“user_id”,timestamp_keys=“t”,features_df=user_features_df,)

一個時間序列特性表必須有一個時間戳鍵,不能有任何分區列。時間戳鍵列必須的TimestampTypeDateType

磚建議的時間序列特征表沒有超過兩個主鍵列,以確保性能和查找寫道。

更新時間序列特征表

當寫作特征的時間序列特性表、DataFrame必須提供值表的所有功能特性,與常規功能表。這個約束減少了稀疏的特征值在時間序列特性表中的時間戳。

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

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

創建一個訓練集,一個時間序列特性表

執行時間點查找特性值時間序列特征表,您必須指定一個timestamp_lookup_key功能的FeatureLookup,這表明DataFrame列的名稱包含時間戳來查找時間序列的特性。磚特性存儲檢索最新的特性值之前DataFrame的指定的時間戳timestamp_lookup_key列的主鍵(不包括時間戳鍵)DataFrame的匹配值lookup_key列,或如果沒有這樣的特性值的存在。

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包含以下列:#——u_id#——ad_id#——ad_impression_tstraining_set=fscreate_training_set(raw_clickstream,feature_lookups=feature_lookups,exclude_columns=(“u_id”,“ad_id”,“ad_impression_ts”),標簽=“did_click”,)training_df=training_setload_df()

任何FeatureLookup在一個時間序列特性表必須及時查找,所以它必須指定一個timestamp_lookup_key在你的DataFrame列使用。時間點查找不跳過的行特性值存儲在時間序列特征表。

設置時間限製的曆史特性值

從功能存儲客戶端v0.13.0,可以排除特性值和年長的訓練集的時間戳。為此,使用參數lookback_windowFeatureLookup

的數據類型lookback_window必須datetime.timedelta,默認值是沒有一個(使用的所有特征值,不管年齡)。

例如,下麵的代碼不包括任何特性值超過7天:

datetime進口timedeltafeature_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(=7))]

當你打電話create_training_set使用上麵的FeatureLookup,它會自動執行時間點加入和不包括特征值大於7天。

lookback窗口應用在訓練和批處理推理。在在線推理,總是使用最新的特性值,不管lookback窗口。

評分模型與時間序列特征表

當你的分數從時間序列模型訓練與功能特性表、磚特性存儲檢索適當的功能使用時間點查找與元數據打包模型在訓練。您提供的DataFrameFeatureStoreClient.score_batch必須包含一個時間戳列相同的名稱和數據類型隨著timestamp_lookup_keyFeatureLookup提供給FeatureStoreClient.create_training_set

筆記本的例子:時間序列特征表

下麵的筆記本說明了時間序列特征表上時間點查找存儲在工作區中功能。

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

在新標簽頁打開筆記本