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

使用NeuralProphet自回归创建未来DataFrame时遇行数异常问题

问题:NeuralProphet中make_future_dataframe仅生成1行未来数据(含AR项时)

尝试用以下代码创建未来DataFrame:

future = m.make_future_dataframe(df, periods= 720, n_historic_predictions=True)

但实际仅新增1行数据,而非预期的720行。

模型代码如下:

m = NeuralProphet(
    changepoints_range=0.95,
    normalize='soft', 
    n_changepoints=50,
    trend_reg=1,
    yearly_seasonality=False,
    weekly_seasonality=True,
    daily_seasonality=10,
    n_lags = 7 # 移除该行后,未来DataFrame可正常生成
)
m.add_seasonality(name="monthly", period=30.5, fourier_order=5)
m.set_plotting_backend("plotly")
metrics = m.fit(df, freq="H")

NeuralProphet官方文档对make_future_dataframe方法的描述:

将数据框扩展指定数量的周期(时间步)到未来。仅在预测未知未来时使用。新时间戳会添加到历史数据框中,'y'列值为NaN(待预测)。此外,给定的未来事件和回归变量会添加到新增的周期时间戳中。返回的数据框将包含生成n_historic_predictions所需的历史数据,这些数据对应序列'y'的历史观测值。


问题原因与解决办法

  • 问题根源:当模型启用自回归(AR)项(通过n_lags参数设置)时,NeuralProphet的make_future_dataframe默认仅能生成1行未来数据——因为AR项需要依赖前一步的预测结果作为下一次预测的输入,无法一次性生成全部n步未来数据,这一点文档未明确说明。
  • 解决途径:
    1. 循环生成多步预测:若保留AR项,需循环调用预测方法,每次生成1步预测并追加到数据框,直到达到目标步数。示例逻辑如下:
      import pandas as pd
      
      future = df.copy()
      for _ in range(720):
          # 生成下1步的未来数据框
          next_step = m.make_future_dataframe(future, periods=1, n_historic_predictions=False)
          # 执行预测
          forecast = m.predict(next_step)
          # 提取最新预测行并追加到原数据框
          new_row = forecast.iloc[-1:][['ds', 'yhat1']].rename(columns={'yhat1': 'y'})
          future = pd.concat([future, new_row], ignore_index=True)
      
    2. 移除AR项:若业务场景允许删除n_lags=7参数,可直接一次性生成720行未来数据,无需循环。

内容的提问来源于stack exchange,提问作者W.tan

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.01 12:02:48