了解时间点联接
时间点(或时态)联接有助于解决数据泄漏问题。 在模型训练过程中,数据泄露或目标泄漏涉及在预测时无法使用的信息。 当模型在生产环境中运行时,目标泄漏会导致预测分数(指标)高估模型的效用。 此文阐释了数据泄漏。
下图解释了特征存储时间点联接的工作原理:
- 观察数据有两个已标记事件:
L0
和L1
。 这两个事件分别发生在时间t0
和t1
。 - 使用时间点联接基于这些观测数据创建一个训练示例。 对于每个观察事件来说,最近的先前事件时间(
t0
和t1
)的特征值与该事件结合。
此屏幕截图显示了名为 get_offline_features
的函数的输出。 该函数执行时间点联接:
时间点联接使用的参数
在特征集规范中,以下参数影响时间点联接的结果:
source_delay
temporal_join_lookback
这两个参数都表示持续时间或时间差。 对于具有时间戳 t
值的观察事件,在窗口 [t - temporal_join_lookback, t - source_delay]
中具有最新时间戳的特征值将联接到观察事件数据。
source_delay
属性
source_delay
源数据属性指示数据准备好使用时的采集时间延迟。 将此时的时间值与生成数据时的时间值进行比较。 由于上游数据管道中的延迟,在时间 t
发生的事件会在时间 t + x
到达源数据表中。 x
值是源延迟。
源延迟可能导致数据泄露:
- 使用脱机数据来训练模型时,在不考虑源延迟的情况下,模型会使用最近的特征值
- 当模型部署到生产环境时,该模型仅使用特征值,这些特征值的延迟至少与源的延迟时间量相等。 因此,预测分数会下降。 为了解决源延迟数据泄漏问题,需要考虑时间点联接中的
source_delay
值。 若要定义特征集规范中的source_delay
,请估计一下源延迟持续时间。
在同一示例中,给定 source_delay
值,事件 L0
和 L1
会与较早的特征值而非最近的特征值联接。
此屏幕截图显示了执行时间点联接的 get_offline_features
函数的输出:
如果用户未在特征集规范中设置 source_delay
值,则其默认值为 0
。 这意味着不涉及源延迟。 在重复性特征具体化中,还会考虑 source_delay
值。 请访问此资源,了解有关特征集具体化的更多详细信息。
temporal_join_lookback
时间点联接查找在时间上最接近观察事件时间的先前特征值。 如果特征值自较早的时间以来没有更新,则联接可能会提取过早的特征值。 这可能会导致问题:
- 使用过早的时间值搜索特征值会影响时间点联接的查询性能
- 过早生成的特征值是陈旧的。 作为模型输入,这些值可能会降低模型预测性能。
为了防止检索时间值过早的特征值,请在特征集规范中设置 temporal_join_lookback
参数。 此参数控制时间点联接接受的最早特征时间值。
在同一示例中,给定 temporal_join_lookback
,事件 L1
仅与过去(最多回溯到 t1 - temporal_join_lookback
)的特征值联接。
此屏幕截图显示了 get_offline_features
函数的输出。 此函数执行时间点联接:
设置 temporal_join_lookback
时,请将其持续时间设置为大于 source_delay
的值,以获得非空联接结果。 如果未设置 temporal_join_lookback
值,则其默认值为无穷大。 它在时间点联接期间会尽可能远地回溯数据。