← 返回题目列表

时间序列特征工程要注意什么?

高频 困难 第 15 / 25 题 更新于 2026/09/25
特征工程数据预处理特征选择数据泄露
学习 AI 实战项目

简化版

时间序列特征包括滞后值、滚动统计、日历周期、差分和趋势。先定义预测调用时刻、最新可用观测和 horizon;特征可使用调用时已可得的数据,而不应机械写成“索引小于目标行”。随机切分和越过可用边界的中心滚动通常会泄漏未来。

详细版

  • lag k 的含义取决于采样频率与预测步长。

  • 若一行标签就是当前 y_t,rolling 通常先 shift;若在观测 y_t 后预测 y_(t+h),窗口可以合法包含 y_t。

  • 日历特征可用 sin/cos 表达周期连续性。

  • 缺失时间点需先定义补齐与掩码策略。

  • 多步预测要区分 direct、recursive 与已知未来协变量。

完整版教学

一、时间特征的核心是因果对齐

普通表格中同一行特征与标签常被默认对齐,时序任务必须显式写出:何时调用模型、截至哪个索引的数据已发布、预测哪个 horizon。

任何使用 [t-W,t+h] 或中心窗口的统计,在离线都很漂亮,却在线无法获得。

只有先固定预测原点和当时可用的信息集,lag、rolling 与已知未来协变量的数字才有明确含义,也才能逐项审查是否穿越。

二、底层机制与公式

assume y_t is available at forecast origin
target=y_(t+h)
features={y_t,y_(t-1),...,rolling(y_<=t),calendar(t),known_future(t+h)}
cyclic hour=(sin(2pi*h/24),cos(2pi*h/24))

三、带数字的推演

若在 y_100 已发布后预测 h=3 的 y_103,常见定义下距预测原点一阶滞后值是 y_100;y_102 尚未知,不能使用。若模型调用发生在 y_100 发布前,则最新可用值可能是 y_99,所以必须先写清调用契约。

24 小时滚动只能覆盖调用时已经可用的区间;是否包含 y_t 由发布顺序和闭开边界决定。

四、方案对比

方案/对象核心特点代价或边界
Lag保留具体历史点缺失/长周期维度多
Rolling平滑历史边界和泄漏风险
差分/趋势突出变化可能放大噪声
日历周期已知未来、成本低节假日需外部表

五、执行流程

定义调用时刻/最新可用观测/horizon -> 时间轴切分 -> 只用当时可用值构造 lag/rolling
-> walk-forward 验证 -> 按 horizon 报指标 -> 上线回放同一特征函数

六、边界条件与工程代价

已知未来协变量如日历可使用 t+h 值,未知未来协变量如销量不可使用;必须按可用性分类。

数据修订会让历史值事后变化,金融/宏观任务需保存 vintage 数据,模拟当时发布版本。

记忆钩子:时序工程先写坐标:在 origin t,预测 t+h,当下真正已知什么。

七、常见误区与追问

  • 误区:rolling(center=True) 可平滑噪声后训练。 中心窗口会使用未来。

  • 追问:为什么随机切分不合适? 训练会看到验证时段之后的模式。

  • 误区:所有 t+h 特征都泄漏。 预测时已知的日历、计划价格可能合法。

  • 追问:多 horizon 怎么评估? 分别报告每个步长并按业务权重汇总。

  • 追问:缺时间点怎么办? 先重建时间网格,并增加缺失/距离上次观测特征。

八、加强记忆

时序工程先写坐标:在 origin t,预测 t+h,当下真正已知什么。

Lag、rolling、周期都必须服从这条时间箭头。