二次指数平滑
一、直观理解:水平会变,斜率也要更新
当序列呈现持续上升或下降趋势时,一次指数平滑的预测会滞后。二次指数平滑(Holt 线性趋势法)同时维护:
- 水平
- 趋势(斜率)
未来 步 = 当前水平 + 倍当前斜率。这像用一条“局部直线”顺着最近趋势往前推。
若趋势会逐渐减弱,可引入阻尼系数 :
阻尼 Holt 常比永不阻尼的线性外推更稳,尤其是中长期预测。
二、适用场景与优缺点
| 类型 | 说明 |
|---|---|
| 适用场景 | 有趋势、无季节;需要比 ARIMA 更轻量的趋势外推;短中期预测。 |
| 核心优点 | 两参数直观;对局部趋势适应快;实现简单;阻尼版可抑制过度外推。 |
| 局限与缺点 | 无季节;线性趋势假设在长期会失真;突变后需适应时间;参数网格需防过拟合。 |
有季节时用三次指数平滑(Holt-Winters)。
三、核心原理
Holt 法是局部水平+局部斜率的状态更新。 控制水平追踪速度, 控制斜率更新速度。 过大时斜率被噪声带着跑,预测呈锯齿;过小则趋势迟钝。
初始化:
- 或前若干点回归斜率
加性趋势假设每期增减一个近似常数;若增长是百分比型,可对 取对数后再 Holt,或使用乘性趋势变体。
四、参数选择
在训练期对 做网格搜索,目标为一组一步预测误差;若做多步,可用验证窗口的多步 RMSE。引入阻尼时增加 等候选。
务必对比:
- 一次指数平滑;
- 带漂移的随机游走 ;
- 线性回归对时间 。
五、MATLAB 示例
rng(6);
n = 100;
t = (1:n)';
y = 10 + 0.4*t + randn(n,1)*2; % 线性趋势 + 噪声
T0 = 80;
yTrain = y(1:T0); yTest = y(T0+1:end);
alphas = 0.1:0.1:0.9;
betas = 0.05:0.05:0.5;
best = struct("sse",Inf);
for a = alphas
for b = betas
l = yTrain(1);
tr = yTrain(2)-yTrain(1);
sse = 0;
for i = 2:numel(yTrain)
yhat = l + tr;
sse = sse + (yTrain(i)-yhat)^2;
lNew = a*yTrain(i) + (1-a)*(l+tr);
tr = b*(lNew-l) + (1-b)*tr;
l = lNew;
end
if sse < best.sse
best = struct("sse",sse,"a",a,"b",b,"l",l,"tr",tr);
end
end
end
fprintf("最优 alpha=%.2f beta=%.2f\n", best.a, best.b);
% 多步预测
h = numel(yTest);
yf = best.l + (1:h)'*best.tr;
rmse = sqrt(mean((yTest-yf).^2));
% 阻尼版(phi=0.9)示意
phi = 0.9;
w = cumsum(phi.^(1:h)');
yf_d = best.l + w*best.tr;
rmse_d = sqrt(mean((yTest-yf_d).^2));
% 基线:时间线性回归
mdl = fitlm((1:T0)', yTrain);
yf_lr = predict(mdl, (T0+1:n)');
rmse_lr = sqrt(mean((yTest-yf_lr).^2));
fprintf("测试 RMSE Holt=%.3f, 阻尼Holt=%.3f, 线性t=%.3f\n", ...
rmse, rmse_d, rmse_lr);
figure;
plot(1:T0,yTrain,"k"); hold on;
plot(T0+1:n,yTest,"k");
plot(T0+1:n,yf,"r","LineWidth",1.2);
plot(T0+1:n,yf_d,"b--","LineWidth",1.2);
xline(T0,"k--");
legend("训练","测试","Holt","阻尼Holt");
title("二次指数平滑(Holt)");
六、如何解释结果
报告:
- 趋势存在的图形证据;
- (及 )的选择方式;
- 期末水平与斜率的数值含义(每期平均增长多少);
- 测试误差与 SES/线性趋势/漂移 RW 对比;
- 是否采用阻尼及原因;
- 长期外推风险说明。
七、常见误区
1. 把短期斜率无限延长到很远未来
线性外推最危险的地方是 很大。优先阻尼或限制视野。
2. 过大
斜率噪声化,预测不稳。
3. 有季节仍用 Holt
残差会呈周期,应 Holt-Winters/SARIMA。
4. 混淆“拟合平滑值”与“预测协议”
评价必须按时间外推,不能把用了 的平滑态当预测。
八、小结
二次指数平滑(Holt)的核心是:
同时更新水平与斜率,让预测沿局部线性趋势前进;必要时用阻尼抑制长期过度外推。
它是有趋势、无季节序列的标准轻量方法,也是 ARIMA 的重要对照基线。验收看训练期外 RMSE/MAE 与残差是否仍隐藏季节,而不是只看曲线是否顺滑。