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

NeuralProphet全局模型预测双时间序列时部分结果全为NaN的问题

问题分析与解决方案

以下是导致其中一个ID预测全为NaN的常见原因及对应解决步骤:

  • 检查目标ID的训练数据完整性
    由于你设置了n_lags=60,模型需要每个ID至少有60条历史数据来生成滞后特征。如果出现NaN的ID数据量不足60条,或者时间序列存在连续缺失,模型无法构建有效输入,就会输出全NaN。
    用以下代码验证:

    # 替换成出现问题的ID值
    target_id = "你的问题ID"
    # 查看数据量
    print(f"ID {target_id} 的数据条数: {train_df[train_df['ID'] == target_id].shape[0]}")
    # 查看y值缺失情况
    print(f"ID {target_id} 的y值缺失数: {train_df[train_df['ID'] == target_id]['y'].isna().sum()}")
    

    如果数据量不足,要么减小n_lags到该ID能覆盖的长度,要么补充该ID的历史数据。

  • 确认全局模型配置
    NeuralProphet处理多ID时间序列时,需确保模型正确识别分组列。虽然新版本默认支持全局模型,但显式声明global_model=True可以避免潜在的自动识别问题:

    m = NeuralProphet(
        yearly_seasonality=True,
        weekly_seasonality=True,
        daily_seasonality=False,  
        quantiles=quantiles,
        n_lags=60,
        epochs=100,
        n_forecasts=30,
        loss_func='Huber',
        global_model=True  # 显式开启全局多序列模式
    )
    
  • 排查make_future_dataframe参数影响
    启用n_historic_predictions=True时,模型会对历史数据做回溯预测,若目标ID的历史数据长度小于n_lags + n_forecasts(即60+30=90条),回溯阶段会生成NaN。可以先关闭历史预测验证:

    df_future = m.make_future_dataframe(train_df, n_historic_predictions=False)
    forecast = m.predict(df_future)
    

    如果此时预测正常,说明是历史预测的窗口长度不足导致的,需要调整n_lags或n_forecasts,或者补充该ID的历史数据。

  • 训练过程细节检查
    查看训练输出的metrics,确认目标ID是否参与了模型训练。如果该ID的y值全为NaN或异常值,模型无法学习到有效特征,预测时也会输出NaN。此外,尝试增加epochs或调整学习率,确保模型充分收敛。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.26 13:25:10