使用时间序列特性表时间点支持

砖特性存储支持用例要求时间点的正确性。

数据用于训练模型通常内置的时间依赖关系。举个例子,如果你正在训练一个模型来预测哪些机器需要维护一个工厂,你可能有历史数据集包含传感器测量数据和使用数据对许多机器,随着目标标签表明如果机器需要服务。机器的数据集可能包含数据之前和之后都进行维修服务。

构建模型时,您必须考虑只有特性值直到时间的观察到目标值(需要服务或不需要的服务)。如果你没有明确考虑每个观测的时间戳,你可能无意中使用特征值测量目标的时间戳值后培训。这就是所谓的“数据泄漏”,可以对模型的性能产生不利影响。

时间序列特征表包含一个时间戳键列,确保训练数据集的每一行表示的最新特性值称为行的时间戳。您应该使用时间序列特征表特征值随时间变化时,例如时间序列数据,基于事件的数据,或time-aggregated数据。

请注意

  • 时间点的查找功能有时被称为“时间旅行”。砖的时间点功能特性存储无关三角洲湖时间旅行

  • 使用时间点功能,您必须指定与时间相关的键使用timestamp_keys论点。这表明功能表行应该加入了匹配最近为特定的主键值,比的值不迟timestamps_keys列,而不是加入基于一个精确的匹配时间。如果你指定一个时间戳列主键列不适用,功能存储时间点逻辑在加入时间戳列。相反,它只匹配行匹配,而不是一个确切的时间匹配所有行之前时间戳。

时间序列特征表如何工作的呢

假设你有以下特性表。这些数据来自例如笔记本电脑

表包含传感器数据测量温度,相对湿度,环境光和二氧化碳在一个房间里。地面真值表表明如果一个人出现在房间里。每个表的主键(“房间”)和一个时间戳(ts)的关键。为简单起见,只有一个值的数据主键(“0”)。

例子功能表数据

下图说明了时间戳的关键是用于确保时间点训练数据集的正确性。特征值匹配基于主键(图中未显示)和时间戳键,使用一个连接。最近加入的是确保特性时的时间戳值用于训练集。

时间点是如何运作的吗

如图,训练数据集包括最新的每个传感器特性值之前观察地面上的时间戳的真理。

如果您创建了一个训练数据集不考虑时间戳键,您可能有一个行用这些特征值和观察地面的真相:

临时

rh

二氧化碳

地面实况

15.8

32

212年

630年

0

然而,这不是一个有效的观察训练,因为630年的二氧化碳阅读,在落地后观察地面真理,14日。未来数据训练集“泄漏”,这将损害模型的性能。

需求

功能存储客户端v0.3.7以上。

创建一个表在砖功能存储时间序列特性

创建一个时间序列特征表,DataFrame或模式必须包含一个列指定时间戳的关键。

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,)

一个时间序列特性表必须有一个时间戳键,不能有任何分区列。时间戳键列必须的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

笔记本的例子:时间序列特征表

下面的笔记本说明了时间点时间序列特征表上查找。

时间序列特征表例子笔记本

在新标签页打开笔记本