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

Temporal Fusion Transformer长预测长度下未知类别错误的解决问询

解决Temporal Fusion Transformer预测长度调整后的类别未知错误

问题场景

手里有153天(5个月)的日销售数据,用Temporal Fusion Transformer(TFT)搭建时间序列模型,目标是预测未来30天的销量。设置max_prediction_length=7、max_encoder_length=21时模型能正常运行,但把max_prediction_length改成13后,直接触发报错:

KeyError: Unknown category '10' encountered. Set add_nan=True to allow unknown categories

解决方法

  • 排查类别特征的取值范围
    错误核心是预测阶段出现了训练数据里从没见过的类别值'10'。当预测长度从7调到13,模型需要生成更长的未来序列,其中某个类别特征(比如门店编号、促销标签,甚至是日期衍生的周/月字段)在未来13天的取值超出了训练集的范围。先核对训练数据里所有类别特征的取值,再对比未来预测用的数据里对应字段的内容,找出那个出现'10'的特征。

  • 给类别编码器加add_nan=True参数
    按照错误提示,在处理类别特征时,给对应的编码器加上add_nan=True,让模型遇到未知类别时自动映射为NaN,避免报错。比如在定义TimeSeriesDataSet时:

    from pytorch_forecasting import TimeSeriesDataSet, CategoricalEncoder
    
    training_data = TimeSeriesDataSet(
        your_dataframe,
        time_idx="time_idx",
        target="sales",
        # 给有问题的类别特征指定带add_nan的编码器
        categorical_encoders={"problem_category_col": CategoricalEncoder(add_nan=True)},
        # 其他必要参数...
        max_encoder_length=21,
        max_prediction_length=13
    )
    
  • 修正未来数据的类别特征
    如果是未来数据里的类别特征确实出现了训练集没有的新值,比如训练集只有1-9号门店,未来要预测10号店的销量,那要么补充10号店的历史销售数据到训练集,要么把这个特征改成数值型(如果有顺序意义),或者提前把所有可能出现的类别值都加入训练集的特征取值中。

  • 检查日期衍生特征的处理方式
    很多时候这类错误来自日期特征,比如把dayofyear当成类别特征处理——训练数据是5个月(dayofyear 1-153),预测未来13天的dayofyear超过153,就会出现训练集没有的新类别。这种情况应该把日期特征改成循环编码(用sin、cos转换),而不是类别特征,毕竟日期是连续循环的,不适合按类别处理。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.10 07:20:48