关于sktime WindowSummarizer与递归外生变量预测的技术咨询
sktime WindowSummarizer 结合外生特征与y滞后的问题解答
以下是参考的官方示例代码:
import pandas as pd from sktime.transformations.series.summarize import WindowSummarizer from sktime.datasets import load_airline, load_longley from sktime.forecasting.naive import NaiveForecaster from sktime.forecasting.base import ForecastingHorizon from sktime.forecasting.compose import ForecastingPipeline from sktime.forecasting.model_selection import temporal_train_test_split y = load_airline() kwargs = { "lag_feature": { "lag": [1], "mean": [[1, 3], [3, 6]], "std": [[1, 4]], } } # 假设X_train、X_test、y_train、y_test、fh已通过temporal_train_test_split等方式定义 Z_train = pd.concat([X_train, y_train], axis=1) Z_test = pd.concat([X_test, y_test], axis=1) pipe = ForecastingPipeline( steps=[ ("a", WindowSummarizer(n_jobs=1, target_cols=["POP", "TOTEMP"])), ("b", WindowSummarizer(**kwargs, n_jobs=1, target_cols=["GNP"])), ("forecaster", NaiveForecaster(strategy="drift")), ] ) pipe_return = pipe.fit(y_train, Z_train) y_pred2 = pipe_return.predict(fh=fh, X=Z_test)
问题1:未来数据集是否需要提供X的未来取值?
- 必须提供,前提是X为外生特征(非基于y生成的外部变量),比如示例中的
POP、TOTEMP。 - 原因:训练阶段模型依赖这些外生特征的历史值生成窗口统计特征(如滑动均值、滞后值),预测未来时,对应时间点的X取值是生成特征的必要输入,缺失会导致特征转换失败,直接报错。
- 例外:如果X完全由y的滞后/滑动特征生成,无外部变量,那么未来预测时无需额外提供X——这类特征可通过递归预测出的y值逐步生成。
问题2:使用RecursiveTabularRegressionForecaster时,修改X常量值预测结果未变化的原因
- 核心结论:RecursiveTabularRegressionForecaster不会自动递归生成X的滞后特征,X的特征处理完全依赖你提前配置的Pipeline步骤(如WindowSummarizer的参数)。
- 常见原因:
- X未参与模型训练:如果Pipeline中未对X做有效特征转换,或转换后的特征未被模型纳入训练逻辑,模型未学习到X的影响,修改X自然不会改变结果。
- X的特征配置无区分度:若X是常量,且你配置的窗口特征(如均值、标准差)基于X自身计算,结果会和原常量一致,模型无法从这类特征中获取有效信息。
- X的未来值未正确传入:递归预测时,X的未来值需手动提供,如果修改的常量未对应到预测的时间点,也不会影响结果。
内容的提问来源于stack exchange,提问作者PineapplePizza
相关产品推荐
相关产品推荐

