使用NeuralProphet做多变量时序预测时出现「Unexpected column {name}」报错
NeuralProphet添加滞后回归器后fit报错:ValueError: Unexpected column {name} in data
问题描述
在为NeuralProphet模型添加额外滞后回归器(lagged regressors)后,调用fit方法拟合模型时触发报错,报错信息为「ValueError: Unexpected column {name} in data」,请求排查问题原因。
代码示例
# 3 step ahead AR and lagged regressor model df = df_ercot m = NeuralProphet( n_forecasts=3, n_lags=3, learning_rate= 0.1, ) m = m.add_lagged_regressor(names=regions) #, only_last_value=True) m.highlight_nth_step_ahead_of_each_forecast(3) metrics = m.fit(df, freq="H")
错误栈信息
ValueError Traceback (most recent call last) <ipython-input-38-39259abef9ed> in <module> 9 m = m.add_lagged_regressor(names=regions) #, only_last_value=True) 10 m.highlight_nth_step_ahead_of_each_forecast(3) ---> 11 metrics = m.fit(df, freq="H") 4 frames /usr/local/lib/python3.7/dist-packages/neuralprophet/df_utils.py in normalize(df, data_params) 381 for name in df.columns: 382 if name not in data_params.keys(): ---> 383 raise ValueError("Unexpected column {name} in data") 384 new_name = name 385 if name == "ds": ValueError: Unexpected column {name} in data
问题原因及解决方法
核心原因
NeuralProphet在拟合前会校验输入数据的所有列是否都已被模型注册(包括日期列ds、目标列、手动添加的滞后回归列等),一旦发现未注册的列,就会抛出该错误。常见触发场景:
regions列表中的列名和df_ercot的实际列名不匹配(拼写错误、大小写不一致)- 目标列不是默认的
y,且未通过add_target显式注册 regions包含了不需要作为滞后回归器的列(比如日期列ds)
解决步骤
校验列名一致性
先打印DataFrame列名和指定的滞后回归列,确认两者完全匹配:print("DataFrame列名:", df_ercot.columns.tolist()) print("指定的滞后回归列:", regions)修正
regions中拼写错误或不存在的列名。显式注册目标列
如果你的目标列不是默认的y,必须手动添加:m = m.add_target(name="你的目标列名称")清理滞后回归列列表
确保regions只包含需要作为滞后回归器的列,不要包含ds或目标列。检查重复注册
避免重复调用add_lagged_regressor添加同一列,或添加不存在的列。
内容的提问来源于stack exchange,提问作者David Almasi
相关产品推荐
相关产品推荐

