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

Simple Exponential Smoothing时序预测predict输出重复值问题

问题描述

在Python中使用Simple Exponential Smoothing(简单指数平滑,简称SES)方法对带季节性的时序销售数据开展预测时,对拟合完成的模型调用predict函数,指定预测区间内的输出全部为重复的同一数值,需调整方法以得到合理预测结果。

关联素材

  • 待预测的季节性时序数据:
    季节性销售时序数据
  • 初始模型拟合代码:
fit4 = SimpleExpSmoothing(Holt_Data, initialization_method="heuristic").fit(
smoothing_level=0.8, optimized=False
)

fcast4 = fit4.forecast(3).rename(r"$\alpha=0.8$")
  • 初始模型拟合效果:
    简单指数平滑拟合效果图
  • 预测调用代码:
fit4.predict(start='2022-01-01',end='2023-01-01')
  • 异常预测结果可视化:
    常数预测值可视化图
原因说明

简单指数平滑输出常数预测是算法本身的固有特性,不是代码bug。SES的设计目标是适配无趋势、无季节性的平稳时序,它对未来任意步长的预测值都是历史观测值的指数加权平均,完全不具备刻画趋势变动、季节性周期波动的能力,只要预测范围超出训练集,输出必然是固定常数,没有任何参数调整空间能让SES输出带波动的预测结果。
你的销售数据存在非常明显的周期性季节波动,和SES的适用场景完全不匹配,才会出现不符合预期的预测结果。

调整方案

直接替换为适配带季节性时序的指数平滑模型即可,使用statsmodels库的ExponentialSmoothing(即霍尔特-温特斯模型),根据数据特征配置参数:

  • 参数选择逻辑
    • 若数据只有季节性波动、无明显长期上升/下降趋势:设置trend=None,根据序列波动特征选择seasonal="add"(加法季节性,波动幅度不随序列水平变化)或seasonal="mul"(乘法季节性,波动幅度随序列数值水平同步放大/缩小),同时指定季节周期长度seasonal_periods(月度年度周期填12、季度年度周期填4,根据实际业务周期调整)
    • 若数据同时存在长期趋势和季节性波动:设置trend="add"(线性趋势),搭配上述季节性参数即可
  • 修正后参考代码(以月度数据、线性趋势、加法季节性场景为例)
from statsmodels.tsa.holtwinters import ExponentialSmoothing

# 替换为支持趋势+季节性刻画的霍尔特-温特斯模型
fit4 = ExponentialSmoothing(
    Holt_Data,
    trend="add",
    seasonal="add",
    seasonal_periods=12, # 按实际数据周期修改
    initialization_method="heuristic"
).fit(
    smoothing_level=0.8,
    optimized=False # 若需要自动搜索最优平滑参数可改为True
)

# 执行区间预测
pred_result = fit4.predict(start='2022-01-01',end='2023-01-01')

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.27 16:09:21