第 15 章「时序数据与预测」是机器学习在金融、运维、IoT、气象、供应链、交通等行业中最具实用价值的应用方向之一。
这一章的目标,是帮助读者理解时间序列的结构、建模方法、预测思路与异常检测技术。
第15章 时序数据与预测
时间序列(Time Series)是指按时间顺序排列的一系列数据点。 与普通数据不同,它具备明显的时序依赖性(temporal dependency),过去的状态往往影响未来。
例如:
- 股票价格、CPU 负载、温度、销售额、网站访问量等。 机器学习在处理这些问题时,必须考虑“时间”这一维度带来的信息与约束。
15.1 时间序列分解与趋势建模
🧩 1️⃣ 时间序列的组成要素
一个时间序列通常可以拆解为四个部分:
| 成分 | 含义 | 示例 |
|---|---|---|
| 趋势(Trend) | 数据整体变化方向 | 房价总体上升趋势 |
| 季节性(Seasonality) | 固定周期的波动 | 每年夏季空调销量上升 |
| 周期性(Cyclic) | 不规则长周期变化 | 经济周期、市场波动 |
| 随机性(Noise) | 不可预测的随机波动 | 临时促销、突发事件 |
时间序列分解(Time Series Decomposition) 就是将观测序列分解为: [ Y_t = T_t + S_t + R_t ] 其中:
- ( T_t ):趋势项(trend)
- ( S_t ):季节项(seasonal)
- ( R_t ):残差项(residual)
📊 常用工具:
- STL(Seasonal-Trend decomposition using Loess)
- X-11、X-12-ARIMA(经济数据分析常用)
- Prophet(Facebook 推出的趋势建模工具)
🔹 2️⃣ 趋势建模方法
趋势部分可以用多种方式建模:
- 线性趋势模型:( T_t = a + bt )
- 多项式趋势模型:( T_t = a + bt + ct^2 + … )
- 指数平滑(Exponential Smoothing):让近期数据权重更高
📘 实践技巧:
- 趋势建模适合长期预测;
- 季节性建模适合周期性波动;
- 去除季节成分后再建模,可以降低模型复杂度。
15.2 ARIMA 与传统预测模型
🧩 1️⃣ ARIMA 模型(AutoRegressive Integrated Moving Average)
ARIMA 是最经典的统计预测模型之一,常用于平稳时间序列的建模。
其基本形式: [ ARIMA(p, d, q) ]
- ( p ):自回归(AR)阶数
- ( d ):差分次数(使序列平稳)
- ( q ):滑动平均(MA)阶数
原理简述:
- AR(自回归):当前值依赖于过去若干时刻的值; [ X_t = \phi_1 X_{t-1} + \phi_2 X_{t-2} + … + \epsilon_t ]
- MA(滑动平均):当前值依赖于过去若干时刻的误差; [ X_t = \epsilon_t + \theta_1 \epsilon_{t-1} + … ]
- I(积分/差分):用于消除趋势,使序列平稳。
🔍 适用场景:
- 电力负载预测
- 销售量趋势预测
- KPI 序列分析
🔹 2️⃣ 扩展模型
- SARIMA(季节性 ARIMA):考虑季节成分
- ARIMAX:在 ARIMA 基础上加入外部变量(例如天气、节假日)
- VAR(向量自回归):多维时间序列之间的联动建模
🔹 3️⃣ 传统的非统计模型
除了 ARIMA,还有其他传统预测算法:
| 模型 | 思想 | 特点 |
|---|---|---|
| Exponential Smoothing (Holt-Winters) | 对近期数据权重更高 | 简单、实时性好 |
| Kalman Filter | 动态系统状态估计 | 可在线更新 |
| SVR (Support Vector Regression) | 核方法预测 | 对非线性趋势有效 |
15.3 特征化时间序列(滑动窗口)
统计模型强调时间依赖,而机器学习模型(SVM、RF、XGBoost)需要“样本-特征”形式的输入。 因此,要把时间序列转化为特征矩阵,这一步叫做特征化(Feature Engineering for Time Series)。
🔹 1️⃣ 滑动窗口(Sliding Window)
最常用的特征构造方法:
例如:
时间序列:[x1, x2, x3, x4, x5, ...]
窗口大小 = 3
样本1:(x1,x2,x3) → 预测 x4
样本2:(x2,x3,x4) → 预测 x5
模型学到的就是 “过去3个点” 与 “下一个点” 之间的映射关系。
🧮 常见衍生特征:
- 统计特征:均值、方差、最大值、最小值
- 滞后特征(lag features):( x_{t-1}, x_{t-2}, … )
- 差分特征(delta):( x_t - x_{t-1} )
- 滑动均值(rolling mean)
📊 常用于:
- 设备监控(预测未来温度、电流)
- 金融量化(预测下一时刻价格)
🔹 2️⃣ 特征 + 机器学习模型组合
| 模型 | 优点 | 典型场景 |
|---|---|---|
| Random Forest | 非线性建模、可解释 | 工业时序监控 |
| Gradient Boosting (XGBoost, LightGBM) | 精度高 | 销售预测、KPI预测 |
| SVR | 对小样本友好 | 金融短期预测 |
15.4 异常检测与序列聚类
时间序列中,检测异常模式往往比预测更有商业价值。
🔹 1️⃣ 异常检测(Anomaly Detection)
目标:找出“不符合正常时间模式”的点或片段。
常见方法:
| 类型 | 方法 | 思路 |
|---|---|---|
| 统计类 | 3σ 法则、IQR、Z-score | 超过统计范围即异常 |
| 模型类 | ARIMA 残差分析 | 残差过大判定异常 |
| 机器学习类 | Isolation Forest, One-Class SVM | 学习正常分布后检测异常 |
| 深度学习类 | Autoencoder 重建误差 | 若重建失败 → 异常 |
🧭 典型应用:
- 服务器指标异常(CPU、内存、延迟)
- 设备振动监测
- 金融欺诈检测
🔹 2️⃣ 序列聚类(Time Series Clustering)
将相似的时间序列归为一类,用于模式发现、用户画像、设备分组。
关键难点:
- 序列长度不同;
- 时间对齐问题。
常用方法:
| 方法 | 思路 | 说明 |
|---|---|---|
| K-means + DTW 距离 | 动态时间规整(Dynamic Time Warping)衡量相似性 | 可对齐时间轴 |
| Feature-based Clustering | 提取特征后聚类 | 简单高效 |
| Shape-based Clustering | 比较序列形状 | 适合相位差小的场景 |
✅ 小结
| 方向 | 核心思想 | 代表算法 |
|---|---|---|
| 时间序列分解 | 拆解趋势 + 季节性 | STL, Prophet |
| 预测模型 | 用历史预测未来 | ARIMA, Holt-Winters |
| 特征化 | 把序列转为机器学习输入 | 滑动窗口, 滞后特征 |
| 异常检测 | 发现不正常模式 | ARIMA 残差, Isolation Forest |
| 序列聚类 | 发现时间模式群体 | DTW + K-means |
