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

了解时间点联接

时间点或临时联接有助于防止数据泄露。 在模型训练过程中,数据泄露或目标泄漏涉及使用预测时不应提供的信息。 当模型在生产环境中运行时,目标泄漏会导致预测分数和指标高估模型的效用。 此文阐释了数据泄漏。

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

  • 观察数据有两个已标记事件: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 该值,则其默认值为无穷大。 它在时间点联接期间会尽可能远地回溯数据。

后续步骤