正在加载中...

展开本页目录
算法教程ETS-指数平滑

ETS-指数平滑

No.043 · 在线教程

ETS(Error–Trend–Seasonal)指数平滑模型是一类经典的时间序列预测方法,通过水平(Level)、趋势(Trend)与季节(Seasonal)分量的递推更新来刻画序列结构。系统支持无趋势/有趋势、无季节/有季节、加法/乘法季节,以及阻尼趋势等设置。

ETS-指数平滑

1. 方法概述

ETS(Error–Trend–Seasonal)指数平滑模型是一类经典的时间序列预测方法,通过水平(Level)、趋势(Trend)与季节(Seasonal)分量的递推更新来刻画序列结构。系统支持无趋势/有趋势、无季节/有季节、加法/乘法季节,以及阻尼趋势等设置。

设时间序列为 \(\{y_t\}_{t=1}^n\),基本目标是得到 \(\hat{y}_{t+h}\) 的预测值与置信区间。

2. ETS 模型结构与递推公式

ETS 的通用形式可表示为:

$$ \hat{y}_t = f(\ell_{t-1}, b_{t-1}, s_{t-m}) \tag{1} $$

其中 \(\ell_t\) 为水平分量,\(b_t\) 为趋势分量,\(s_t\) 为季节分量,\(m\) 为季节周期。

2.1 加法季节(Additive)

观测方程

$$ \hat{y}_t = \ell_{t-1} + \phi b_{t-1} + s_{t-m} \tag{2} $$

水平更新

$$ \ell_t = \alpha (y_t - s_{t-m}) + (1-\alpha)(\ell_{t-1}+\phi b_{t-1}) \tag{3} $$

趋势更新(阻尼趋势时 \(0<\phi\le 1\),否则 \(\phi=1\)):

$$ b_t = \beta (\ell_t-\ell_{t-1}) + (1-\beta)\phi b_{t-1} \tag{4} $$

季节更新

$$ s_t = \gamma (y_t-\ell_t) + (1-\gamma)s_{t-m} \tag{5} $$

2.2 乘法季节(Multiplicative)

观测方程

$$ \hat{y}_t = (\ell_{t-1} + \phi b_{t-1})\cdot s_{t-m} \tag{6} $$

水平更新

$$ \ell_t = \alpha\frac{y_t}{s_{t-m}} + (1-\alpha)(\ell_{t-1}+\phi b_{t-1}) \tag{7} $$

季节更新

$$ s_t = \gamma\frac{y_t}{\ell_t} + (1-\gamma)s_{t-m} \tag{8} $$

乘法模型要求 \(y_t>0\)。当启用 log/Box-Cox 变换时亦需正值。

2.3 预测公式(含阻尼趋势)

令 \(h\) 为预测步长,阻尼趋势的累计系数为

$$ \sum_{i=1}^{h}\phi^i = \phi\frac{1-\phi^h}{1-\phi} \tag{9} $$

则:

  • 加法季节

$$ \hat{y}_{t+h} = \ell_t + \left(\sum_{i=1}^{h}\phi^i\right)b_t + s_{t-m+h} \tag{10} $$

  • 乘法季节

$$ \hat{y}_{t+h} = \left(\ell_t + \left(\sum_{i=1}^{h}\phi^i\right)b_t\right)\cdot s_{t-m+h} \tag{11} $$

当无趋势或无季节时,上式自动退化为更简洁形式。

3. 频率与季节周期

  • 频率(freq)用于将时间列对齐为规则序列(如 D/W/ME/QE/YS)。
  • 季节周期 \(m\) 由 seasonal_periods 给出(如月度数据 \(m=12\))。
  • 若启用季节项,建议训练样本至少覆盖 \(2m\) 个周期。

4. 训练/测试切分

系统按时间顺序切分训练集与测试集:

$$ \text{train\_ratio}\in(0,1],\quad n_{train}=\lfloor n\cdot \text{train\_ratio}\rfloor \tag{12} $$

测试集用于计算误差指标与验证拟合效果。

5. 评价指标

均方误差(MSE)

$$ \text{MSE}=\frac{1}{n}\sum_{t=1}^{n}(y_t-\hat{y}_t)^2 \tag{13} $$

均方根误差(RMSE)

$$ \text{RMSE}=\sqrt{\text{MSE}} \tag{14} $$

平均绝对误差(MAE)

$$ \text{MAE}=\frac{1}{n}\sum_{t=1}^{n}|y_t-\hat{y}_t| \tag{15} $$

平均绝对百分比误差(MAPE)

$$ \text{MAPE}=\frac{1}{n}\sum_{t=1}^{n}\left|\frac{y_t-\hat{y}_t}{y_t}\right| \tag{16} $$

6. AIC/BIC 与残差诊断

6.1 AIC / BIC

$$ \text{AIC}=2k-2\ell,\qquad \text{BIC}=k\ln n-2\ell \tag{17} $$

其中 \(k\) 为参数个数,\(\ell\) 为对数似然。

6.2 Ljung-Box 与 Jarque-Bera

Ljung-Box:

$$ Q=n(n+2)\sum_{k=1}^{m}\frac{\hat{\rho}_k^2}{n-k} \tag{18} $$

Jarque-Bera:

$$ JB=\frac{n}{6}\left(S^2+\frac{(K-3)^2}{4}\right) \tag{19} $$

用于检验残差自相关与正态性。系统也输出残差直方图、Q-Q 图、ACF/PACF 图。

7. 预测区间

系统基于残差标准差 \(\hat\sigma\) 计算近似区间:

$$ \hat{y}_{t+h} \pm z_{1-\alpha/2}\,\hat\sigma \tag{20} $$

其中 \(\alpha\) 为显著性水平,默认 \(0.05\)。

8. 输出结果与图表

Excel 常见 sheet:

  • 参数设置 / 模型摘要 / 诊断 / 预测 / 残差 / 原始数据 / 模型参数 / 图表清单

图表:

  • 预测曲线(含拟合值与预测区间)
  • 残差分布、QQ 图
  • 残差 ACF/PACF

9. 与代码实现的对应关系

本算法在程序中由 具体的算法2/ETS-指数平滑/core/calculator.py 实现。程序当前不是抽象地“输出预测结果”,而是将参数、拟合摘要、预测表、残差表和图表清单全部写入 xlsx,文档和论文都应按这些实际产物来组织。

9.1 程序实际导出的工作表

  • 参数设置:时间列、频率、趋势、季节、季节周期、训练比例、预测步数、显著性水平等;
  • 模型摘要:拟合统计量、AIC/BIC 与误差指标;
  • 诊断:Ljung-Box、Jarque-Bera 等诊断结果;
  • 预测:训练拟合、测试预测、未来预测及上下区间;
  • 残差:残差序列及相关字段;
  • 原始数据:原始序列;
  • 模型参数:平滑参数及估计结果;
  • 图表清单:图表名称与相对路径。

9.2 程序实际生成的图表

  • 预测曲线图:真实值、拟合值、未来预测及区间;
  • 残差分布图;
  • resid_qq:残差 QQ 图;
  • resid_acf:残差 ACF;
  • resid_pacf:残差 PACF。

9.3 实现说明与注意事项

  • 程序输出区间是基于残差方差近似得到,不应写成贝叶斯后验区间;
  • 程序 sheet 命名采用中文,若论文附录直接引用导出表,建议保持一致;
  • 若未启用季节项或阻尼趋势,正文不应仍按完整 ETS(A,A,A) 叙述;
  • 若使用乘法季节或 log/Box-Cox,应在数据说明中交代序列为正值;
  • 图表清单 记录相对路径,便于结果目录整体迁移和归档。

10. 论文写作模板

10.1 方法描述模板

“本文采用 ETS 指数平滑模型对时间序列进行建模与预测。模型包含水平、趋势与季节成分,采用加法/乘法结构并结合阻尼趋势(式(2)–(11))。模型参数通过极大似然或自动优化估计,预测区间由残差标准差与正态近似给出(式(20))。”

10.2 结果描述模板

“结果显示,ETS 模型在测试集上的 RMSE 为 \(\text{RMSE}\),MAE 为 \(\text{MAE}\),MAPE 为 \(\text{MAPE}\)。预测曲线与真实值拟合较好,残差诊断结果未显示显著自相关,说明模型拟合较为合理。”

10.3 图表题注模板(示例)

  • 图 1 ETS 拟合与预测曲线(含置信区间)。
  • 图 2 残差分布与 Q-Q 图。
  • 图 3 残差 ACF/PACF 图。

10.4 表格模板(示例)

表 1 ETS 模型参数与拟合指标

指标
AIC
BIC
RMSE
MAE
MAPE

表 2 ETS 参数估计值

参数 数值
\(\alpha\)
\(\beta\)
\(\gamma\)
\(\phi\)

表 3 预测期结果示例(节选)

日期/时间 实际值 预测值 下限 上限
2025-01-31
2025-02-28
2025-03-31

表 4 残差诊断结果示例

指标 说明
Ljung-Box (lag=10) p 值大于 0.05 通常表示残差无显著自相关
Jarque-Bera p 值大于 0.05 通常表示残差近似正态

11. UI 参数一一对应表(与界面一致)

UI 参数 符号/变量 作用 取值/说明
时间列 \(t\) 作为时间索引并排序 可选;若留空,按原顺序
解析日期 解析时间列 解析为 DatetimeIndex 推荐勾选
频率(freq) \(\Delta t\) 规则化频率 D/W/ME/QE/YS;不确定可留空
缺失处理 缺口填补 asfreq 后缺失处理 ffill / bfill / interpolate / drop
目标列(y) \(y_t\) 预测目标序列 数值列
Trend \(b_t\) 趋势项 无 / add / mul
Seasonal \(s_t\) 季节项 无 / add / mul
季节周期 \(m\) 季节长度 例如月度数据 \(m=12\)
阻尼趋势 \(\phi\) 趋势衰减 仅趋势项启用时可用
初始化方法 init 初始化策略 estimated / heuristic / legacy-heuristic
Box-Cox 变换 稳定方差 无 / log(需正值)
自动估计平滑参数 \(\alpha,\beta,\gamma\) 自动估计 勾选后忽略手动参数
手动 alpha/beta/gamma \(\alpha,\beta,\gamma\) 平滑系数 仅在取消自动估计时启用
训练比例 train_ratio 训练集占比 0.5–1.0
预测步数 \(h\) 向前预测期数 ≥1
alpha(显著性) \(\alpha\) 置信区间水平 默认 0.05

12. 英文模板段落与图表题注(可选)

英文方法段:

We employ the ETS (Error–Trend–Seasonal) exponential smoothing model to forecast the time series. The model decomposes the series into level, trend, and seasonal components, and uses additive/multiplicative structures with optional damped trend (Eq. 2–11). Parameters are estimated via maximum likelihood or automatic optimization, and prediction intervals are derived from residual variance (Eq. 20).

英文结果段:

The ETS model achieves RMSE of \(\text{RMSE}\), MAE of \(\text{MAE}\), and MAPE of \(\text{MAPE}\) on the test set. The fitted values track the observed series well, and residual diagnostics show no strong autocorrelation, indicating a reasonable fit.

英文图题模板:

  • Figure 1. ETS fitted and forecast curve with prediction intervals.
  • Figure 2. Residual distribution and Q–Q plot.
  • Figure 3. Residual ACF/PACF plots.

13. 注意事项

  • 乘法季节或 Box-Cox(log) 需要序列为正值;
  • 季节周期过大或频率不规则会显著增加拟合耗时;
  • 若数据量很大,建议先抽样验证参数,再进行全量拟合;
  • 频率不确定时可留空,系统自动推断;
  • 输出的图表清单可直接用于论文插图排版。

14. 单篇终审补充

14.1 图题与表题对齐建议

  • 本文档应优先对应真实算法目录 具体的算法2/ETS-指数平滑,代表性结果目录建议绑定 具体的算法2/ETS-指数平滑/results/window3_baseline_test_window3_timeseries_dynami1_ets
  • 表题应直接对应 ets_baseline.xlsx 的真实工作表:参数设置模型摘要诊断预测残差原始数据模型参数图表清单
  • 图题应直接绑定该目录已存在的实体图片族:forecast_20260329_165431.pngresid_acf_20260329_165431.pngresid_pacf_20260329_165431.pngresid_hist_20260329_165431.pngresid_qq_20260329_165431.png
  • 若正文引用“预测图”“残差 ACF/PACF 图”“残差分布图”“Q-Q 图”,应保持与上述文件和 图表清单 sheet 的命名一致,不要再额外虚构 STL、分解图等当前目录并未落地的图。

14.2 终审说明

  • 当前 ETS 文档已经可以用 baseline 目录形成完整证据链:ets_baseline.xlsx、实体图文件、repro_ets_template_20260329_165432.pyrepro_inputs/ets_input.csv 均已齐备。
  • 复现脚本中的 SRC_FILE 实际写为 results/window3_baseline_test_window3_timeseries_dynami1_ets/repro_inputs/ets_input.csv,属于模块根目录相对路径复现,不是脚本同目录裸 CSV。
  • 因此论文中若描述“结果可复核”,宜写成“基于 ETS baseline 导出目录中的 repro_inputs/ets_input.csv 与复现脚本可重现主要结果表和图表”。

14.3 全量强化补充

  • 当前 ETS 文档应继续绑定真实算法目录 具体的算法2/ETS-指数平滑,代表目录为 具体的算法2/ETS-指数平滑/results/window3_baseline_test_window3_timeseries_dynami1_ets
  • 该目录首层主工作簿为 ets_baseline.xlsx,真实工作表为 参数设置模型摘要诊断预测残差原始数据模型参数图表清单
  • 当前主目录不是“一次运行只保留一组文件”的干净结构,而是累计保留了多轮复现结果:除主工作簿外,还叠加了多份 ETS-指数平滑复现结果_*.xlsx、多份 repro_ets_template_*.py 以及多组 forecast_*.pngresid_acf_*.pngresid_pacf_*.pngresid_hist_*.pngresid_qq_*.png
  • 如果论文只引用一组主结果,应优先锁定 20260329_165431 这一组图,即 forecast_20260329_165431.pngresid_acf_20260329_165431.pngresid_pacf_20260329_165431.pngresid_hist_20260329_165431.pngresid_qq_20260329_165431.png,不要把同目录下其他时间戳图混成同一轮主分析图。
  • 该目录中真实存在 repro_inputs/ets_input.csvrepro_ets_template_20260329_165432.py,脚本关键输入写法是 SRC_FILE = 'results/window3_baseline_test_window3_timeseries_dynami1_ets/repro_inputs/ets_input.csv',说明它采用的是“模块根目录相对路径回指 baseline 目录下的 repro_inputs”口径。
  • 因此 ETS 的复现说明不能写成“脚本同目录直接读取 CSV”,也不能写成“标准 SCRIPT_DIR/repro_inputs”;更准确的写法是:脚本从模块根目录相对路径定位 baseline 目录里的 repro_inputs/ets_input.csv,然后重建结果。
  • 当前目录中同时存在主基线输出、复现再生成果和 repro 脚本。正文与附录应明确:ets_baseline.xlsx 是主引用工作簿,ETS-指数平滑复现结果_*.xlsx 与后缀更晚的图文件属于再生产物。

15. 软件实现核查补充(2026-07)

  • 当前实现的主结果目录应写作 具体的算法2/ETS-指数平滑/results/window3_baseline_test_window3_timeseries_dynami1_ets,主工作簿为 ets_baseline.xlsx
  • 正文应优先锁定 20260329_165431 这一组图,不要把同目录下其他时间戳图混成同一轮主分析图。
  • repro_ets_template_20260329_165432.py 的关键输入是 results/window3_baseline_test_window3_timeseries_dynami1_ets/repro_inputs/ets_input.csv,属于“模块根目录相对路径回指 baseline 目录”口径,不是脚本同目录快照。
  • 如果论文与附录要写复现链路,应明确区分主基线、再生产物和历史脚本,不要把多轮结果合并成一次导出。