# 从基础到预测：指数平滑法详解

> 循序渐进学习指数平滑法，从SES到Holt和Holt-Winters。包含公式、商业案例、R和Python代码及模型选择

Source: https://www.electe.net/zh/%E9%82%AE%E5%AF%84/exponential-smoothing

Site guide: https://www.electe.net/zh/llms.txt

某区域零售经理研究上一季度的SKU销售数据，却依然无法回答一个基本的运营问题：在下一波季节性销售高峰到来之前，应该备多少库存？在另一间办公室里，一位信贷分析师盯着违约率，思考近期的上升是暂时性冲击还是持久性变化。预测正处于这些决策与其后果之间——包括缺货、多余的营运资金占用、收入损失，以及不必要的风险。

**指数平滑法**为中小企业提供了一个介于电子表格平均值和复杂机器学习流程之间的实用折中方案。该方法对近期观测值的权重高于较早的观测值，同时计算过程足够透明，便于向管理者、财务团队或运营负责人解释。它对数据量要求相对较低，并能在众多时间序列上快速完成计算。

您将学习该方法的运作原理，何时使用简单指数平滑法、Holt法或Holt-Winters法，以及如何评估预测结果，而不是仅凭一条看起来令人信服的曲线就轻信预测。您还将看到，一个人工的电子表格流程如何演变为持续监控的分析系统。

## 目录

- 为什么指数平滑法在商业预测中仍然重要
-
  - 团队持续使用它的三个原因
- 指数平滑法的内部运作原理
-
  - alpha在实践中的含义
- SES、Holt和Holt-Winters变体比较
-
  - 让模型匹配信号特征
- 销售、库存与风险领域的真实商业案例
- 在R和Python中实现指数平滑法
-
  - 一份简洁的伪代码方案
- 使用MAE、RMSE、MAPE和交叉验证评估模型
-
  - 一个小型对比示例
  - 使用滚动起点验证法
  - 在不放弃判断力的前提下调优参数
- 从电子表格预测到自动化AI分析
-
  - 自动化带来的改变
- 将指数平滑法付诸实践的关键要点
-
  - 建立第一个模型后的常见问题

## 为什么指数平滑法在业务预测中仍然重要

只有当预测能够支持决策时,它才有价值。零售商在下达补货订单之前,需要对未来需求做出估算。财务团队在分配关注度之前,需要对预期风险指标有一个站得住脚的判断。在这两种情况下,简单的历史平均值可能反应过慢,而复杂模型又可能难以维护或解释。

指数平滑法之所以仍然有价值,是因为它专注于序列本身的结构。根据你所选择的变体,它可以估算当前的**水平(level)**、延伸可见的**趋势(trend)**,并表示重复出现的**季节性(seasonality)**。这种方法作为一种实用的预测方法,诞生于20世纪中期的运筹学领域。Robert G. Brown 的相关工作大约可追溯至**1944年**,当时他为美国海军服务;Charles C. Holt 于**1957年**在一份海军研究办公室(ONR)备忘录中记录了一项奠基性的趋势扩展方法;Peter Winters 则在**1960年**发表的一篇里程碑式论文中,将该方法推广至季节性场景。([Gardner 的历史回顾](https://bauer.uh.edu/gardner/Exponential-Smoothing.pdf))

### 团队持续使用它的三个原因

- **数据需求低:** 你可以仅凭单一历史序列构建出有用的基线,而无需搭建庞大的特征库。
- **参数可解释:** 平滑值表明预测对新信息作出反应的速度。
- **计算速度快:** 递归更新的计算量足够轻量,适用于电子表格原型、笔记本电脑分析,或大量业务序列的处理。

这种透明度很重要。管理者能够理解近期销售下滑为何改变了预测结果,分析师也能够对模型进行审查,而不必将其当作一个黑箱。该方法还为评估更高级的方法提供了一个基线。

关于模型选择的更广泛背景,可将指数平滑法与[ARIMA e modelli AI previsioni](https://www.electe.net/post/time-series-forecasting)进行比较,尤其是在外部驱动因素或更复杂的时间关系起作用的情况下。

## 指数平滑法的底层工作原理

其核心思想是一种加权平均——既记住过去,又优先考虑当下。可以想象一位管理者透过柔焦镜头审视需求历史:最新的观测值清晰可见,前一个观测值依然可见,而更早的观测值则逐渐淡出,但没有一个会完全消失。

NIST 工程统计手册将这一决定性特征描述为对较早观测值赋予**指数递减的权重**。这使得指数平滑法在计算上比等权重移动平均法更高效——后者会对其所选窗口内的每个值赋予相同的影响力。([NIST 手册](https://www.itl.nist.gov/div898/handbook/pmc/section4/pmc437.htm))

对于简单指数平滑法,一步预测可以写为:

**Fₜ₊₁ = α × Yₜ + (1 − α) × Fₜ**

一个等价的拟合水平形式为:

**Lₜ = α × Yₜ + (1 − α) × Lₜ₋₁**

这里,**Yₜ** 是最新观测值,**Fₜ** 是先前的预测值,**Lₜ** 是更新后的水平值,**α** 是介于零和一之间的平滑参数。

### alpha 在实际应用中的含义

较高的 alpha 会使最新观测值具有较大的影响力。这在需求快速变化时会有所帮助,但也可能导致预测追逐随机噪声。较低的 alpha 会得到更为平稳的估计,能够抵御孤立的波动,不过在需求真正发生变化后,反应可能会较慢。

> **实用原则:** 选择 alpha 实际上是一项业务决策,只是披着统计参数的外衣。你所决定的,是预测应以多快的速度对需求冲击、促销活动或流失激增做出反应。

下表展示了当权重计算为 α 乘以 (1 减 α) 的相应幂时,观测值的影响力如何递减。这些数字是平滑规则的示例计算结果,并非实际业务数据集的观测值。

之前的周期数Alpha = 0.2Alpha = 0.5Alpha = 0.800.20000.50000.800010.16000.25000.160020.12800.12500.032030.10240.06250.006440.08190.03130.001350.06550.01560.0003

当 alpha 等于 0.8 时，最新观测值占主导地位，较旧的观测值会迅速衰减。当 alpha 等于 0.2 时，模型保留更长的记忆，这适合稳定的序列，但在结构性变化后可能延迟适应。

## 比较 SES、Holt 和 Holt-Winters 变体

从数据的形态入手，而不是算法的名称。简单指数平滑（**SES**）仅估计当前水平。Holt 增加了趋势成分。Holt-Winters 在水平和趋势之上再加入季节性。

SES 适用于相对稳定的序列，例如重复出现的支持工单，或成熟产品的需求，这些序列没有明显的上升趋势或重复周期。其预测通常会稳定在最新的平滑水平附近，而不是朝某个方向持续变化。

Holt 方法引入了趋势估计。该模型使用第二个平滑参数 **beta**，将当前基线与该基线的变化方向区分开来。这使其更适合稳步上升或下降、且没有重复季节性模式的营收序列。

Holt-Winters 增加了由 **gamma** 和季节长度（通常表示为 **m**）控制的季节成分。其加法形式适用于季节性波动幅度大致保持稳定的情况。当季节性波动随整体水平增大或缩小时，其乘法形式更为合适，这种模式常见于零售和旅游需求中。（[Datarekha 关于指数平滑的解读](https://datarekha.com/time-series/exponential-smoothing/)）

### 将模型与信号相匹配

变体组成部分额外参数最适用于示例用例SES水平Alpha无趋势或季节性的稳定序列成熟产品需求Holt水平和趋势Alpha、beta具有持续方向的序列逐渐变化的营收Holt-Winters水平、趋势和季节性Alpha、beta、gamma、季节长度具有趋势和周期性循环的序列季节性零售需求

更多的组件会带来更多拟合噪声的机会。零售商不应仅仅因为 Holt-Winters 听起来更高级就选择它。如果序列缺乏可靠的季节性,季节性状态可能只会增加不稳定性,而不会带来有用的信息。

一个实用的思维测试很简单。问问基线是否在变化,变化是否重复出现,以及随着基线的改变,季节性波动的幅度是否保持恒定。这些答案会指向 SES、Holt、加法 Holt-Winters 或乘法 Holt-Winters。

## 跨销售、库存与风险的真实商业案例

一个模型是否合适,取决于它是否与业务信号相匹配。请看三种不同的运营环境。

某地区零售商跟踪每周 SKU 需求。该序列随时间上升,并在节假日期间呈现出周期性高峰,而当整体需求水平较高时,季节性波动也更大。**乘法 Holt-Winters** 是自然的选择,因为它所表示的水平、趋势和季节性的振幅会随序列本身缩放。关键参数是 alpha、beta、gamma 以及观测到的季节周期长度。预测周期应与零售商的补货和规划周期相匹配,而不是默认采用通用周期。

某仓库经理负责易腐商品。基线消耗量正在缓慢上升,但一次性促销活动导致某一周出现异常高值。**Holt 方法**能够体现这种渐进变化,而不会把促销当作永久性的季节模式来处理。在使用预测结果设定再订货数量之前,经理应先检查拟合值和残差,尤其是在提前期较长、高估成本较高的情况下更应如此。

某信用风险团队监控月度违约率。该序列较短,趋势较弱,且近期受宏观经济状况影响。**SES** 能够提供一个反应灵敏的基线,适用于最新观测值理应比长期历史平均值更具影响力的情形。相对较高的 alpha 值可能会带来更快的反应,但分析师应对这一选择进行检验,而不是想当然地认为每一次近期波动都会持续下去。

对于实际的库存工作流程,一份[Shopify 库存预测指南](https://hello.quikly.com/blog/inventory-forecasting-methods)有助于将模型选择与补货决策及平台数据连接起来。统计模型能够生成预测,但业务流程仍然需要考虑提前期、促销活动、产品变化以及服务目标。

场景最佳变体关键参数预测周期零售季节性SKU需求乘法型Holt-WintersAlpha、beta、gamma、季节长度补货或计划周期存在缓慢漂移的易腐库存Holt模型Alpha和beta再订购提前期窗口短期、弱趋势违约率序列SESAlpha下一个监测周期

希望以更自动化的工作流程来比较这些选择的团队,可以了解 [AI销售预测](https://tools.electe.net/previsione-vendite),同时让决策者能够查看模型诊断和运营背景信息。

## 在R和Python中实现指数平滑

您可以使用一个数值序列、一个预测周期和一个模型选择来构建预测原型。实现方案应返回的不仅仅是一条未来曲线。请保存拟合值、估计状态、参数和残差,以便日后评估结果。

### 简明伪代码方案

1. 加载并验证数值型时间序列。
2. 设定预测周期，以及 alpha、beta、gamma 和季节长度的候选值。
3. 根据观测数据的形态拟合 SES、Holt 或 Holt-Winters 模型。
4. 存储水平、趋势、季节性指数、拟合值和点预测结果。
5. 在未用于拟合的观测数据上评估预测效果。
6. 在验证过程确认模型合适后重新拟合。

在 R 中，`forecast` 包提供了 `ets()` 用于自动选择误差、趋势和季节性成分，也提供了 `HoltWinters()` 用于显式拟合 Holt-Winters 模型：

library(forecast)

series <- ts(data$units, frequency = seasonal\_length)

ets\_fit <- ets(series)
ets\_forecast <- forecast(ets\_fit, h = horizon)

hw\_fit <- HoltWinters(
series,
alpha = NULL,
beta = NULL,
gamma = NULL
)
hw\_forecast <- predict(hw\_fit, n.ahead = horizon)

plot(hw\_forecast)

在 Python 中，`statsmodels` 通过 `ExponentialSmoothing` 提供了同一系列的模型。`fit()` 和 `forecast()` 调用构成了一个简洁的工作流程：

from statsmodels.tsa.holtwinters import ExponentialSmoothing

series = data\["units"\]

model = ExponentialSmoothing(
series,
trend="add",
seasonal="mul",
seasonal\_periods=seasonal\_length
)

fit = model.fit(optimized=True)
forecast = fit.forecast(horizon)

print(forecast)

自动优化减少了手动调参的工作量，但并不能省去人工审查的必要。请确认所选模型形式符合数据特征，并确保预测结果没有出现不合理的形态。如果你还在为异常观测值构建监控机制，这篇[关于如何选择异常检测软件的指南](https://supercenter.app/blog/anomaly-detection-software)提供了评估相邻工具的实用标准。

在分享结果之前，请检查各项系数，确认方差估计值非负，将拟合值与观测值进行比较，并验证预测结果是否符合历史数据中呈现的季节性形态。

## 使用 MAE、RMSE、MAPE 和交叉验证评估模型

一个紧密贴合历史数据的模型，预测效果仍可能不佳。可靠的检验方法是样本外表现，即预测结果与拟合时未使用的观测数据之间的对比情况。

**平均绝对误差（MAE）**以原始单位表示平均绝对偏差。如果你预测的是销售数量，那么 MAE 同样以销售数量为单位，这使管理者能够轻松理解。

**均方根误差（RMSE）**在开平方根后同样以原始单位表示，但它会赋予较大误差更大的影响力。当单次重大误差会带来不成比例的运营成本时——例如严重缺货或异常巨大的人员配置缺口——应使用该指标。

**平均绝对百分比误差(MAPE)**以百分比的形式表示误差。这使得跨产品的比较更加容易，但当实际值接近零时，计算会变得不稳定或产生误导。因此，即使某个低销量SKU的绝对业务影响很小，用MAPE衡量时它也可能显得更差。

### 一个简单的对比示例

假设三个候选模型在同一组留出观测数据上产生了以下绝对误差：

模型绝对误差MAERMSEMAPESES2, 4, 64.004.3220.00%Holt1, 5, 74.334.6921.67%Holt-Winters3, 3, 53.673.8318.33%

这些数字是为了说明这些指标如何运作而构造的示例,并非业务基准。在此,Holt-Winters 在所有三项指标上都胜出,但不同的误差模式可能改变排名。例如,一个大多数误差较小、但有一次严重失误的模型,在 MAE 下可能看起来尚可接受,而 RMSE 则会暴露出其中的运营风险。

### 使用滚动起点验证

单次训练-测试划分可能掩盖模型的弱点。滚动起点评估会在不断扩展的训练窗口上反复拟合模型,然后对下一个预测周期或若干未来周期进行评分。这一过程能更好地模拟模型在新的实际数据到来时的运行情况。

当季节性因素很重要时,应使用至少覆盖一个完整季节周期的验证窗口。否则,测试可能永远无法暴露出周期性的峰值或谷值。应在相同的起点、预测期和观测值上比较候选模型。

### 调整参数,但不放弃判断

先从优化器针对 alpha、beta 和 gamma 给出的输出开始,然后检查结果是否符合业务逻辑。优化器只是使某个既定的误差目标最小化,而不考虑你的库存成本、客户服务政策或风险偏好。

对于噪声较大的中小企业数据,初始 alpha 范围设为 **0.1 到 0.4** 可以作为一个实用的探索区间,但不应将其当作放之四海而皆准的规则。所提供的技术指导建议,对任何落在边界值上的参数都应加以质疑,而不是不加审视地直接接受。

请使用以下检查方法:

- **检查残差:**留意是否还残留趋势、季节性或自相关。带有结构的残差序列表明模型还有未能解释的信息。
- **检验季节性形式:**加法季节性适用于波动幅度稳定的情形。乘法季节性适用于波动幅度随水平值增长而扩大的情形。
- **警惕过拟合:**高度灵活的季节性模型可以完美贴合历史数据,却在未来周期中失效。
- **尊重数据长度:**Holt-Winters 需要足够的历史数据才能识别重复出现的季节性行为。若用不足两个完整季节周期的数据进行拟合,季节性估计将存在不稳定的风险。
- **识别结构性断裂:**产品发布、疫情冲击、政策变化或定价方案调整都可能使原有水平失效。与其让模型缓慢吸收这一断裂,不如重置或重新初始化水平值。

最好的模型不是组件最多的那个,而是能产生有用的未来估计值、经得起实际验证、并且对使用预测结果采取行动的人来说仍然可以解释清楚的那个。

## 从电子表格预测到自动化人工智能分析

许多中小企业都是从一套熟悉的流程开始的:有人导出月度销售数据,在电子表格中调整 alpha 值,将预测结果复制到规划文件中,再通过邮件将一份静态版本发送给相关方。对于少量序列而言,这种流程或许可行,但一旦数据更新、产品线扩展,或者需要将实际结果与先前的预测进行比较,这种流程就会变得脆弱不堪。

平台化的工作流程既能保留指数平滑法的透明度,又能消除重复性的操作。ELECTE 是一款面向中小企业的人工智能数据分析平台,能够接入业务数据、完成分析前的数据准备、拟合多种预测候选模型,并支持自动化报告生成。管理者可以将预测结果与历史序列一并查看,而不必依赖孤立的电子表格数值。

### 自动化带来的改变

- **可重复性:**每当有新的观测数据到来,同一套数据准备和评估逻辑都会自动运行。
- **模型比较:**可以同时评估多个 ETS 候选模型,而不必依赖单一的手动调优公式。
- **监控:**历史预测结果可与实际值一并存储,使性能下降变得可见。
- **沟通:**报告可以以业务用户能够理解的形式呈现预测结果、假设条件和异常情况。

这并不意味着经典统计方法已经过时。指数平滑法仍然是一个透明的基准,人工智能层可以对其进行监控、覆盖或解释。该平台的**平滑预测器(Smooth Forecaster)**被设计用于减少短期波动,让用户能够专注于潜在趋势。

对于正在替换人工文件处理流程的团队,[ELECTE 电子表格指南](https://www.electe.net/post/fogli-di-calcolo)提供了有关将电子表格工作流程转向更加互联的分析流程的相关背景信息。

## 将指数平滑法付诸实践的要点总结

将以下清单作为您下一次预测周期的实用起点。

1. **先绘制序列图:**在选择 SES、Holt 或 Holt-Winters 模型之前,先绘制数据图表,判断数据是具有稳定水平、趋势、重复的季节性,还是存在结构性断裂。
2. **先优化,再审查:**让拟合程序估算 alpha、beta 和 gamma 参数,但要核实所得的响应速度是否与业务对新信息的反应方式相符。
3. **在保留数据上进行验证:**使用 MAE 或 RMSE 将预测结果与未来的实际观测值进行比较,当实际数值接近零时,避免仅依赖 MAPE。
4. **按规律周期重新拟合:**每季度重新拟合一次,使模型能够随客户行为、产品结构和运营条件的变化而调整。
5. **监控整个流程:**将预测值与实际值一并存储,以便像 ELECTE 这样的平台能够标记性能下降情况,并支持与其他模型进行比较。

### 建立第一个模型后常见的问题

**需要多少数据?**对于 Holt-Winters 模型,建议至少准备**两个完整的季节性周期**的数据,以便模型能够区分周期性变动与噪声。稳定的 SES 模型通常需要大约**30 个或更多的观测值**,序列过短则可能导致参数估计不可靠。

**缺失值应该如何处理？**指数平滑法需要一个可用的序列，因此在拟合之前应通过适当的插值或前向填充方法处理缺口。请记录处理过程，因为插补可能会影响水平值及后续评估。

**应该如何处理异常值？**在更改数值之前，先审查其原因。Winsorization处理、对极端值具有抵抗力的预处理方法，或带有显式异常值处理的模型，都可以防止某个异常观测值扭曲由alpha驱动的水平值，但真实发生的事件可能需要作为业务信号予以保留。

**什么情况下应避免使用指数平滑法？**当序列高度非线性、依赖多个外部变量、存在重大结构性断裂，或需要指数平滑法无法可靠表示的长期预测时，应选择其他方法。在这些情况下，ARIMA、Prophet、回归分析或机器学习集成方法可能更为合适。

预测同样支持财务和合规决策，但它并不构成财务或合规建议。风险团队应将模型输出与获批的治理流程、人工审核及书面政策相结合。在处理客户、员工或交易数据时，请应用贵组织及适用法律所要求的隐私控制和数据保留规则。

---

ELECTE将数据准备、预测、自动化报告和人工智能驱动的监控整合在一起，帮助中小企业摆脱手动更新电子表格的方式。访问[ELECTE](https://www.electe.net)，了解您的团队如何将指数平滑法及其他预测方法转化为更清晰、持续审核的业务洞察。
