使用時間序列特性表時間點支持
數據用於訓練模型通常內置的時間依賴關係。舉個例子,如果你正在訓練一個模型來預測哪些機器需要維護一個工廠,你可能有曆史數據集包含傳感器測量數據和使用數據對許多機器,隨著目標標簽表明如果機器需要服務。機器的數據集可能包含數據之前和之後都進行維修服務。
構建模型時,您必須考慮隻有特性值直到時間的觀察到目標值(需要服務或不需要的服務)。如果你沒有明確考慮每個觀測的時間戳,你可能無意中使用特征值測量目標的時間戳值後培訓。這就是所謂的“數據泄漏”,可以對模型的性能產生不利影響。
時間序列特征表包含一個時間戳鍵列,確保訓練數據集的每一行表示的最新特性值稱為行的時間戳。您應該使用時間序列特征表特征值隨時間變化時,例如時間序列數據,基於事件的數據,或time-aggregated數據。
請注意
時間序列特征表如何工作的呢
假設你有以下特性表。這些數據來自例如筆記本電腦。
表包含傳感器數據測量溫度,相對濕度,環境光和二氧化碳在一個房間裏。地麵真值表表明如果一個人出現在房間裏。每個表的主鍵(“房間”)和一個時間戳(ts)的關鍵。為簡單起見,隻有一個值的數據主鍵(“0”)。
下圖說明了時間戳的關鍵是用於確保時間點訓練數據集的正確性。特征值匹配基於主鍵(圖中未顯示)和時間戳鍵,使用一個連接。最近加入的是確保特性時的時間戳值用於訓練集。
如圖,訓練數據集包括最新的每個傳感器特性值之前觀察地麵上的時間戳的真理。
如果您創建了一個訓練數據集不考慮時間戳鍵,您可能有一個行用這些特征值和觀察地麵的真相:
臨時 |
rh |
光 |
二氧化碳 |
地麵實況 |
---|---|---|---|---|
15.8 |
32 |
212年 |
630年 |
0 |
然而,這不是一個有效的觀察訓練,因為630年的二氧化碳閱讀,在落地後觀察地麵真理,14日。未來數據訓練集“泄漏”,這將損害模型的性能。
創建一個時間序列特性表
如果啟用了工作區為統一目錄,任何表的主鍵包含一個時間戳是一個時間序列特性表。您不需要使用任何的命令在這一節中。
創建一個時間序列特性表存儲在本地工作區特性,DataFrame或模式必須包含一個列,你指定時間戳的關鍵。
從功能存儲客戶端v0.13.4,時間戳中指定鍵列必須primary_keys
論點。時間戳鍵的一部分“主鍵”,唯一地標識表中的每一行功能。像其他主鍵列,不能包含時間戳關鍵列零
值。
fs=FeatureStoreClient()# user_features_df DataFrame包含以下列:#——user_id# - ts#——purchases_30d#——is_free_trial_activefs。create_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_activefs。create_table(的名字=“ads_team.user_features”,primary_keys=“user_id”,timestamp_keys=“t”,features_df=user_features_df,)
一個時間序列特性表必須有一個時間戳鍵,不能有任何分區列。時間戳鍵列必須的TimestampType
或DateType
。
磚建議的時間序列特征表沒有超過兩個主鍵列,以確保性能和查找寫道。
更新時間序列特征表
當寫作特征的時間序列特性表、DataFrame必須提供值表的所有功能特性,與常規功能表。這個約束減少了稀疏的特征值在時間序列特性表中的時間戳。
fs=FeatureStoreClient()# daily_users_batch_df DataFrame包含以下列:#——user_id# - ts#——purchases_30d#——is_free_trial_activefs。write_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=fs。create_training_set(raw_clickstream,feature_lookups=feature_lookups,exclude_columns=(“u_id”,“ad_id”,“ad_impression_ts”),標簽=“did_click”,)training_df=training_set。load_df()
任何FeatureLookup
在一個時間序列特性表必須及時查找,所以它必須指定一個timestamp_lookup_key
在你的DataFrame列使用。時間點查找不跳過的行零
特性值存儲在時間序列特征表。
設置時間限製的曆史特性值
從功能存儲客戶端v0.13.0,可以排除特性值和年長的訓練集的時間戳。為此,使用參數lookback_window
在FeatureLookup
。
的數據類型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窗口。