Learning
VOL. VI · NO. 27 · Mathematics · 01 JAN 1970

时间序列分析:从历史数据预测未来

数学 · 01 JAN 1970 · 8 min read · 1,892 words
· · ·

产品经理的数学课 · 第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(检查是否有促销活动或数据异常)

异常检测流程

  1. 计算预测值和预测区间([900, 1300])
  2. 实际值 2000 超出预测区间
  3. 调查原因:
    • 是否有促销活动?(真实增长)
    • 是否有数据采集错误?(异常值)
    • 是否有外部事件?(节假日)

行动

  • 如果是真实增长:更新模型,调整容量
  • 如果是数据异常:修正数据,重新分析
  • 如果是外部事件:记录事件,预测下次影响

本课要点

  1. 时间序列 = 趋势 + 季节性 + 残差
  2. 移动平均:平滑数据,识别趋势
  3. ARIMA:自回归 + 差分 + 移动平均
  4. 预测评估:MAE, MAPE, RMSE
  5. 预测区间:给出不确定性范围

延伸阅读

  • 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 模型——从简单的时间序列开始,理解趋势和季节性。