时间序列分析:从历史数据预测未来
产品经理的数学课 · 第27讲
时间序列分析:从历史数据预测未来
用户流量有高峰低谷,销售有季节波动。时间序列分析帮你从历史数据中发现模式,预测未来的趋势。
前言
你的产品流量数据:
- 周一:1000
- 周二:1200
- 周三:1100
- 周四:1300
- 周五:1500
- 周六:800
- 周日:700
问题:下周一的流量是多少?
观察:
- 整体趋势:工作日高,周末低(周期性)
- 随机波动:每天有小的随机变化
时间序列分析:把数据分解成趋势、季节性、残差,然后用这些模式预测未来。
核心概念
时间序列的组成
时间序列 = 趋势 + 季节性 + 残差
趋势(Trend):长期上升或下降
- 例子:用户数逐月增长
季节性(Seasonality):固定周期的重复模式
- 例子:周末流量低,工作日流量高
残差(Residual):去除趋势和季节性后的随机波动
- 例子:某天因为促销活动流量突然增加
分解方法
加法模型:Y = 趋势 + 季节性 + 残差
- 季节性波动幅度不随趋势变化
乘法模型:Y = 趋势 × 季节性 × 残差
- 季节性波动幅度随趋势变化
移动平均(Moving Average)
简单移动平均:过去 n 个值的平均
$$ MA_t = \frac{Y_t + Y_{t-1} + … + Y_{t-n+1}}{n} $$
指数移动平均:近期值权重更大
$$ EMA_t = \alpha Y_t + (1-\alpha) EMA_{t-1} $$
应用:
- 平滑数据,减少噪声
- 识别趋势
ARIMA 模型
ARIMA(AutoRegressive Integrated Moving Average):
- AR(自回归):当前值依赖于过去值
- I(差分):用差分去除趋势
- MA(移动平均):当前值依赖于过去的误差
参数:ARIMA(p, d, q)
- p:自回归阶数
- d:差分阶数
- q:移动平均阶数
选择参数:
- AIC/BIC 最小
- 残差自相关检验
预测评估
评估指标:
- MAE(平均绝对误差):|预测值 - 真实值| 的平均
- MAPE(平均绝对百分比误差):|误差|/真实值 的平均
- RMSE(均方根误差):√(误差² 的平均)
预测区间:95% 置信区间
- 下界:预测值 - 1.96 × 标准差
- 上界:预测值 + 1.96 × 标准差
产品经理的应用
应用场景一:用户流量预测
你的产品有 30 天的流量数据。
分解结果:
- 趋势:每周增长 2%
- 季节性:周末比工作日低 30%
- 残差:标准差 100
预测:下周一的流量
- 趋势:1000 × (1.02)^1 = 1020
- 季节性:周一比平均高 10%(1.1)
- 预测值:1020 × 1.1 = 1122
- 95% 置信区间:1122 ± 1.96 × 100 = [926, 1318]
行动:准备服务器容量应对 1300 的峰值。
应用场景二:销售预测
你的产品有 12 个月的销售数据。
ARIMA 模型:ARIMA(1,1,1)
预测:
- 下个月销售:1000 件
- 95% 置信区间:[900, 1100]
行动:
- 采购量:1000 件(预期值)
- 安全库存:100 件(应对上界)
应用场景三:异常检测
你的产品流量通常在 1000-1200 之间。
某天流量突然跳到 2000。
检测方法:
- 预测值:1100
- 预测区间:[900, 1300]
- 实际值:2000(超出预测区间)
行动:
- 检查是否有促销活动
- 检查是否有数据异常
- 如果是真实增长,更新模型
常见误区
误区一:时间序列总是平稳的
「直接对原始数据建模」
很多时间序列是非平稳的(有趋势、季节性)。需要:
- 差分去除趋势
- 季节性分解
- 对平稳序列建模
误区二:忽略季节性
「用简单的线性回归预测」
季节性是重要的模式。忽略它会导致:
- 预测偏差
- 置信区间不准确
必须分解季节性。
误区三:过拟合模型
「选择复杂的 ARIMA 模型」
复杂模型可能过拟合(在训练数据上表现好,预测差)。
选择简单模型:
- AIC/BIC 最小
- 残差检验通过
误区四:预测无限期
「预测未来 12 个月的流量」
预测越远,不确定性越大。通常:
- 短期预测(1-2 周):比较准确
- 长期预测(3-6 个月):不确定性很大
给出预测区间,不只是点估计。
PM/BA 应用
| 场景 | 时间序列工具 | 决策价值 |
|---|---|---|
| 流量预测 | 移动平均/ARIMA | 容量规划 |
| 销售预测 | 趋势分解 | 库存管理 |
| 异常检测 | 预测区间 | 及时干预 |
| 需求预测 | 季节性模型 | 采购计划 |
| 用户增长 | 趋势分析 | 目标设定 |
课后测验
题目 1
你的产品流量有明显的周季节性:工作日高,周末低。以下哪种方法最适合?
A. 简单移动平均
B. 线性回归
C. 带季节性分解的 ARIMA
D. 指数平滑
查看答案与解析
答案:C(带季节性分解的 ARIMA)
为什么选 C?
- 简单移动平均:只平滑,不预测趋势和季节性
- 线性回归:不处理季节性
- 指数平滑:处理趋势,但季节性处理较弱
- ARIMA:可以同时处理趋势、季节性、自相关
ARIMA 的优势:
- 自回归项(AR)捕捉自相关
- 差分项(I)处理趋势
- 移动平均项(MA)处理随机波动
- 季节性扩展(SARIMA)处理周期性
题目 2
你的 ARIMA 模型预测下个月销售 1000 件,95% 置信区间 [900, 1100]。以下哪种解释最准确?
A. 下个月一定卖 1000 件
B. 下个月有 95% 的概率卖 900-1100 件
C. 下个月卖 900-1100 件的概率是 95%
D. 下个月的销售量是 1000 件左右
查看答案与解析
答案:C(下个月卖 900-1100 件的概率是 95%)
预测区间的含义:
- 在长期重复预测中,95% 的预测区间会包含真实值
- 对于这一次预测,我们有 95% 的置信度真实值在 [900, 1100]
行动:
- 采购量:1000 件(预期值)
- 安全库存:100 件(应对上界)
- 如果卖不到 900 件,需要调查原因
题目 3
你的产品流量通常在 1000-1200 之间,某天突然跳到 2000。以下哪种做法最合适?
A. 忽略,可能是正常波动
B. 检查是否有促销活动或数据异常
C. 立即增加服务器容量
D. 删除这个异常值
查看答案与解析
答案:B(检查是否有促销活动或数据异常)
异常检测流程:
- 计算预测值和预测区间([900, 1300])
- 实际值 2000 超出预测区间
- 调查原因:
- 是否有促销活动?(真实增长)
- 是否有数据采集错误?(异常值)
- 是否有外部事件?(节假日)
行动:
- 如果是真实增长:更新模型,调整容量
- 如果是数据异常:修正数据,重新分析
- 如果是外部事件:记录事件,预测下次影响
本课要点
- 时间序列 = 趋势 + 季节性 + 残差
- 移动平均:平滑数据,识别趋势
- ARIMA:自回归 + 差分 + 移动平均
- 预测评估:MAE, MAPE, RMSE
- 预测区间:给出不确定性范围
延伸阅读
- Box, Jenkins, Reinsel, 《Time Series Analysis: Forecasting and Control》 — 时间序列分析的经典教材
- Hyndman & Athanasopoulos, 《Forecasting: Principles and Practice》 — 时间序列预测的现代方法
- Shumway & Stoffer, 《Time Series Analysis and Its Applications》 — 时间序列分析教材
下一步
下一课:因果推断:从观察数据中找因果关系 — 用因果推断方法从观察数据中找出真正的因果关系。
工具提示:用 Python 的 statsmodels 库或 R 的 forecast 包实现 ARIMA 模型——从简单的时间序列开始,理解趋势和季节性。