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

关于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的参数)。
  • 常见原因:
    1. X未参与模型训练:如果Pipeline中未对X做有效特征转换,或转换后的特征未被模型纳入训练逻辑,模型未学习到X的影响,修改X自然不会改变结果。
    2. X的特征配置无区分度:若X是常量,且你配置的窗口特征(如均值、标准差)基于X自身计算,结果会和原常量一致,模型无法从这类特征中获取有效信息。
    3. X的未来值未正确传入:递归预测时,X的未来值需手动提供,如果修改的常量未对应到预测的时间点,也不会影响结果。

内容的提问来源于stack exchange,提问作者PineapplePizza

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.20 20:57:35