一句话回答
移动平均(滚动平均)是一串平均值,每个平均值都取最近固定个数的数据,用来抹平时间序列里的短期噪声,显示背后的趋势。
公式: SMAₜ = (xₜ + xₜ₋₁ + … + xₜ₋ₙ₊₁) / n
什么是移动平均?
移动平均把序列里的每个点替换成最近 n 个点的平均值。它抹平每天的波动,让趋势更容易看出来:
SMAₜ = (xₜ + xₜ₋₁ + … + xₜ₋ₙ₊₁) / n
对按天统计的网站和产品数据,通常用 7 日窗口:每个平均值里正好有一个周一、一个周二……所以每周的周期就抵消了。
一个 7 日示例
两周的每日注册数(示例数字)和 7 日向后平均:
| 日期 | 注册 | 7 日平均 |
|---|---|---|
| 周一 | 120 | — |
| 周二 | 132 | — |
| 周三 | 128 | — |
| 周四 | 125 | — |
| 周五 | 110 | — |
| 周六 | 70 | — |
| 周日 | 65 | 107.1 |
| 周一 | 126 | 108.0 |
| 周二 | 140 | 109.1 |
| 周三 | 135 | 110.1 |
| 周四 | 131 | 111.0 |
| 周五 | 116 | 111.9 |
| 周六 | 72 | 112.1 |
| 周日 | 69 | 112.7 |
原始数据每周在 65 到 140 之间来回摆动,平均值说出了真实情况:周与周之间稳定增长约 5%。
简单、加权和指数移动平均
| 类型 | 怎么分配权重 | 适合 |
|---|---|---|
| 简单(SMA) | 窗口内平均分配 | 想要干净、好解释的趋势 |
| 加权(WMA) | 越近的值权重线性越大 | 窗口固定、又想少点滞后 |
| 指数(EMA) | 每一步:EMAₜ = α·xₜ + (1 − α)·EMAₜ₋₁ | 想要反应快,适合监控 |
在上面的序列上用 α = 0.25 的 EMA,周六的下滑一天之内就能反映出来,而 7 日 SMA 几乎不动。这对告警有用,对汇报就没那么有用。
怎么选窗口
- 7 天:有每周周期的日数据。
- 28 天(四个完整周):更平稳的月度视角,又没有自然月带来的噪声。
- 91 天(13 周):看季度趋势。
窗口越长越平滑,但滞后越多。n 天的向后窗口大约滞后 (n − 1) / 2 天。居中窗口(前 3 天、后 3 天)没有滞后,但最后 3 天算不出来。
常见错误
- 直接平均比率。 三天的转化率分别是 5%、3%、4%(访客分别为 200、1,000、300),平均是 4.0%,但合并后的转化率是 (10 + 30 + 12) / 1,500 = 3.5%。应该在窗口内把分子、分母分别加总。
- 把最后一个点当作「现在」。 7 日向后平均里还包含上周的数据。
- 把真实事件也抹平了。 一天的故障会变成一个平缓的小坑,原始序列要保留可见。
- 用它掩盖小样本的噪声。 如果每天的数很小,直接改用按周统计。
在 TapCub 里
TapCub 的图表显示的是原始的按天(或按小时、周、月)数值;把粒度切到按周,不用计算就能得到类似的平滑效果。要画真正的 7 日移动平均,用数据报表里按天的表格,导出后先算转化数和访客数的滚动合计,再相除。想让告警自动处理每周周期,监控的「预测基线」和「异常检测」条件都会和同星期几比较。另见异常检测。
相关阅读
这个解释清楚吗?
我们会根据反馈修改和补充这篇内容。
提交没有成功,请稍后再试。
谢谢你的反馈,我们会据此改进这篇内容。你已经反馈过这篇了,谢谢。
