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

带1个外生变量的单变量预测:未按指定日期生成预测结果

PyCaret时间序列预测未使用指定日期的原因及解决方法

以下是导致预测未使用future_exog_df中指定日期的常见原因及对应解决方案:

1. 外生变量数据集的日期索引格式不匹配

PyCaret的时间序列模块要求数据集的索引必须是DatetimeIndex,且频率与训练数据完全一致(此处为月度)。如果future_exog_df的日期是普通字符串、未设置为索引,或是DatetimeIndex但频率不匹配,PyCaret会自动生成基于训练数据末尾的连续日期,而非使用你指定的日期。

解决方法:将future_exog_df的日期列转换为DatetimeIndex,并设置正确的月度频率:

import pandas as pd

# 假设日期列名为'date'
future_exog_df['date'] = pd.to_datetime(future_exog_df['date'])
# 设置索引为日期,并指定月度起始频率(MS),与训练数据保持一致
future_exog_df = future_exog_df.set_index('date').asfreq('MS')

2. 未正确指定预测步长(fh参数)

当传入X参数时,PyCaret默认根据X的行数确定预测步长,但如果未显式指定fh(forecast horizon),或fh的长度与X的行数不匹配,可能导致日期逻辑混乱。此外,若X的索引未与训练数据的末尾日期衔接(比如训练数据到2023-12,X的日期却跳至2024-03),也会引发问题。

解决方法:显式指定fh,或确保X的索引是训练数据末尾之后的连续月度日期:

# 方法1:显式指定预测步长为6(对应2024年1-6月)
predict_model(model, fh=6, X=future_exog_df)

# 方法2:确保X的索引与训练数据衔接且连续
# 训练数据索引末尾为2023-12,X的索引需为2024-01至2024-06的连续月度日期

3. 外生变量列名与训练数据不匹配

如果future_exog_df中的外生变量列名与训练数据中的列名不一致(比如训练数据是Aggregate_FinalGoodsDemand,而future_exog_df是Aggregate_FinalGoods_Demand),PyCaret无法识别外生变量,会直接忽略X参数,按默认逻辑生成日期。

解决方法:检查并确保列名完全一致:

# 查看训练数据的列名
print(merged_df.columns)
# 保留与训练数据一致的外生变量列
future_exog_df = future_exog_df[['Aggregate_FinalGoodsDemand']]

4. 训练阶段未正确配置外生变量

在setup阶段,如果未通过exogenous参数指定外生变量,后续predict_model传入X时,模型不会使用外生变量,也不会参考X中的日期,而是生成默认日期。

解决方法:在setup时明确指定外生变量:

from pycaret.time_series import TSForecastingExperiment

exp = TSForecastingExperiment()
exp.setup(
    data=merged_df,
    target='Recieved_Qty_Component',
    exogenous='Aggregate_FinalGoodsDemand',  # 正确指定外生变量
    fh=12,  # 训练时的预测步长,可按需调整
    fold=3
)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.12 19:07:25