了解时间点联接
时间点或临时联接有助于防止数据泄露。 在模型训练过程中,数据泄露或目标泄漏涉及使用预测时不应提供的信息。 当模型在生产环境中运行时,目标泄漏会导致预测分数和指标高估模型的效用。 此文阐释了数据泄漏。
下图解释了特征存储时间点联接的工作原理:
- 观察数据有两个已标记事件:
L0和L1。 这两个事件分别发生在时间t0和t1。 - 使用时间点联接基于这些观测数据创建一个训练示例。 对于每个观察事件来说,最近的先前事件时间(
t0和t1)的特征值与该事件结合。
此屏幕截图显示了名为 get_offline_features 的函数的输出。 该函数执行时间点联接:
时间点联接使用的参数
在特征集规范中,以下参数影响时间点联接的结果:
source_delaytemporal_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 该值,则其默认值为无穷大。 它在时间点联接期间会尽可能远地回溯数据。