使用时间点联接进行脱机特征检索

了解时间点联接

时间点(或时态)联接有助于解决数据泄漏问题。 在模型训练过程中,数据泄露或目标泄漏涉及在预测时无法使用的信息。 当模型在生产环境中运行时,目标泄漏会导致预测分数(指标)高估模型的效用。 此文阐释了数据泄漏。

下图解释了特征存储时间点联接的工作原理:

  • 观察数据有两个已标记事件:L0L1。 这两个事件分别发生在时间 t0t1
  • 使用时间点联接基于这些观测数据创建一个训练示例。 对于每个观察事件来说,最近的先前事件时间(t0t1)的特征值与该事件结合。

该插图显示了简单的时间点联接。

此屏幕截图显示了名为 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 值,事件 L0L1 会与较早的特征值而非最近的特征值联接。

图示显示了一个具有源延迟的时点联接。

此屏幕截图显示了执行时间点联接的 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 值,则其默认值为无穷大。 它在时间点联接期间会尽可能远地回溯数据。

后续步骤