使用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步未来数据,这一点文档未明确说明。 - 解决途径:
- 循环生成多步预测:若保留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) - 移除AR项:若业务场景允许删除
n_lags=7参数,可直接一次性生成720行未来数据,无需循环。
- 循环生成多步预测:若保留AR项,需循环调用预测方法,每次生成1步预测并追加到数据框,直到达到目标步数。示例逻辑如下:
内容的提问来源于stack exchange,提问作者W.tan
相关产品推荐
相关产品推荐

