关于skforecast.ForecasterAutoreg预测逻辑的疑问:12滞后为何输出12步预测?
问题:skforecast多元时间序列预测的滞后逻辑困惑
我正在使用skforecast处理常规多元时间序列,训练集trainX、trainy共36步,测试集testX、testy共12步。我通过以下代码以12步历史滞后(lag)训练回归器:
model = ForecasterAutoreg(regressor=RandomForestRegressor(), lags=12) model.fit(y=trainX.y, exog=trainX[trainX.columns[1:]])
当我用该模型对测试特征进行预测时:
len(testX) # =12 predy = model2.predict(steps=steps, exog=testX[testX.columns[1:]]) len(predy) # =12 as well
模型返回了与testX长度一致的12步预测结果。我对此感到困惑:我认为预测必须基于12步历史滞后数据,但testX第一个预测值predy[0]似乎没有对应的前12步数据,为何模型能输出全部12步预测?我哪里理解有误?
解答
你混淆了训练时的滞后特征构建逻辑和预测时的初始滞后数据源:
- 训练阶段,
lags=12是指从训练数据trainX.y中提取每个样本对应的过去12步y值作为特征,结合同期的外生变量(trainX的其他列),让模型学习“历史12步y+同期外生变量→当前y”的映射规律。 - 预测阶段,
ForecasterAutoreg会自动使用训练集的最后12步y值作为初始滞后数据,来生成第一个预测值predy[0];后续每一步预测时,都会用上一步的预测结果补充到滞后序列中,再结合testX对应行的外生变量生成新的预测值。 - 你设置的
steps=12恰好和testX的长度匹配,所以模型会连续生成12步预测,每一步都对应testX中的一行外生变量。
简言之:第一个预测的历史滞后数据来自训练集末尾,后续预测依赖滚动生成的预测值补充滞后项,不需要测试集本身提供历史数据。
内容的提问来源于stack exchange,提问作者Fredrik
相关产品推荐
相关产品推荐

