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

基于PyTorch TimeSeriesDataSet的多变量时序预测预处理疑问

针对多样本时序预测(TFT+PyTorch TimeSeriesDataSet)的预处理疑问解答

问题1:设置固定encoder和预测长度时,是否仍需用df[lambda x: x.time <= training_cutoff]筛选数据?

需要。
原因如下:

  • 你设定的encoder长度(前60条)是单样本内的窗口范围,但PyTorch TimeSeriesDataSet不会自动识别“训练仅用每个样本前60条”的全局规则。
  • 若不提前用training_cutoff(比如每个样本第60条对应的时间戳)过滤数据,构建训练数据集时可能生成跨cutoff的窗口——比如encoder部分包含第60条之后的观测,这属于数据泄露,会导致模型训练时提前获取未来信息。
  • 正确流程:
    1. 按training_cutoff拆分每个样本的数据集,得到训练子数据集(仅每个样本前60条)和验证/测试子数据集(剩余541条)。
    2. 基于训练子数据集,用设定的encoder/预测长度构建训练数据集;验证/测试同理用对应子数据集构建。

示例代码片段:

# 假设每个样本的time索引为0-600,training_cutoff设为59(对应前60条数据)
train_df = df[df.groupby('Id')['time'].transform(lambda x: x <= 59)]
val_test_df = df[df.groupby('Id')['time'].transform(lambda x: x > 59)]

问题2:predict=True、stop_randomization=True、train=True/False如何区分训练与验证集?

这几个参数各司其职,核心用train=True/False划分训练/验证模式,另外两个参数辅助不同阶段的行为:

  • train=True/False:
    • train=True:训练模式,数据集会对窗口做随机采样,适配模型迭代训练,避免模型学习固定窗口顺序。
    • train=False:验证/测试模式,数据集按时序顺序生成窗口,不做随机采样,保证验证结果稳定,方便计算指标或查看连续时序预测效果。
  • predict=True:
    该参数与训练/验证划分无关,专门用于预测阶段。当你需要用模型对历史数据做未来预测时(比如用每个样本前60条预测后续541条),传入predict=True,此时数据集仅生成用于输入的encoder窗口,不会包含待预测的Target标签(这正是模型要输出的内容)。
  • stop_randomization=True:
    强制关闭窗口随机采样,通常和train=False配合使用,在验证/测试时确保窗口严格按时间顺序生成,避免打乱时序逻辑,保证结果可复现。

示例:

# 构建训练数据集
training_dataset = TimeSeriesDataSet(
    train_df,
    time_idx="time",
    target="Target",
    group_ids=["Id"],
    encoder_length=60,
    prediction_length=541,
    time_varying_known_covariates=["Cov1", "Cov2", "Cov3"],
    time_varying_unknown_covariates=["Target"],
    train=True  # 训练模式,随机采样窗口
)

# 构建验证数据集
validation_dataset = TimeSeriesDataSet.from_dataset(
    training_dataset,
    val_test_df,
    predict=False,
    stop_randomization=True,  # 关闭随机化,按顺序生成窗口
    train=False  # 验证模式
)

# 构建预测用数据集(对新样本的前60条做预测)
prediction_dataset = TimeSeriesDataSet(
    new_sample_df[new_sample_df.time <= 59],
    time_idx="time",
    target="Target",
    group_ids=["Id"],
    encoder_length=60,
    prediction_length=541,
    time_varying_known_covariates=["Cov1", "Cov2", "Cov3"],
    time_varying_unknown_covariates=["Target"],
    predict=True  # 预测模式,仅生成encoder窗口
)

内容的提问来源于stack exchange,提问作者Gwénolé

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.04 09:50:34