You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

TensorFlow结构时间序列单步预测流程与代码正确性问询

关于时间序列结合特征建模的两个疑问解答

1. sts.LinearRegression使用全量特征是否是典型工作流?

绝对不是时间序列建模的标准工作流——这种做法会导致数据泄露,严重高估模型的实际性能。

时间序列建模的核心逻辑是“用过去的已知数据预测未来”,测试集对应模型训练时“尚未发生”的时段。如果建模时提前使用测试集的特征,本质上是让模型获取了未来的信息,完全违背了真实预测场景的逻辑。

官方Notebook这么做通常是两种情况:

  • 仅作为演示示例,为了简化代码流程,没有严格遵循生产级的训练规范;
  • 所用特征是静态特征(比如不会随时间变化的属性,如产品类别、地区编码),这类特征不存在“未来信息泄露”的问题,全量使用是安全的。但如果是动态特征(如滞后项、滚动统计量),全量使用就绝对错误。

2. 单步预测代码正确性判断

你没有提供具体代码,无法直接判断是否正确,但可以给你单步预测的标准实现逻辑作为参考:

  • 先拆分训练集 (y_train, X_train) 和测试集 (y_test, X_test),必须保证测试集的时间节点晚于训练集;
  • 用 (y_train, X_train) 拟合 sts.LinearRegression 模型;
  • 初始化预测结果列表,遍历测试集:
    • 第一步:用 X_test[0, :] 预测 y_pred_0,加入结果列表;
    • 后续步骤:如果模型需要用上一步的真实观测值(比如特征包含y的滞后项),则将 y_test[i-1] 代入构建新的特征向量,再结合 X_test[i, :] 中的其他特征进行预测;如果模型仅依赖X的当前特征,直接用 X_test[i, :] 预测即可;
  • 最后用真实的 y_test 和预测结果计算评估指标(MAE、RMSE等)。

标准单步预测伪代码示例

import tensorflow_probability as tfp
import numpy as np
tfp = tfp.substrates.numpy

# 按时间顺序拆分训练测试集
train_size = int(0.8 * len(y))
y_train, y_test = y[:train_size], y[train_size:]
X_train, X_test = X[:train_size], X[train_size:]

# 拟合模型
model = tfp.sts.LinearRegression(design_matrix=X_train)
posterior = tfp.sts.fit(model, y_train)

# 执行单步预测
y_preds = []
for i in range(len(y_test)):
    if i == 0:
        # 第一步直接用测试集第一个样本的特征
        pred_dist = posterior.predict(model, X_test[i:i+1])
    else:
        # 若特征包含上一步的y观测值,需替换为真实值(示例假设最后一列是y滞后项)
        modified_X = X_test[i:i+1].copy()
        modified_X[0, -1] = y_test[i-1]
        pred_dist = posterior.predict(model, modified_X)
    # 取预测分布的均值作为预测结果
    y_pred = pred_dist.mean().item()
    y_preds.append(y_pred)

# 计算评估指标
mae = np.mean(np.abs(y_test - y_preds))
print(f"单步预测MAE: {mae:.4f}")

内容的提问来源于stack exchange,提问作者testing_dummy

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.13 02:21:05