共计 1571 个字符,预计需要花费 4 分钟才能阅读完成。
问题定义:时序预测的典型挑战
以波士顿电力数据集为例,时序预测面临几个典型挑战:

-
季节性:电力消耗呈现明显的日周期和季节周期。例如夏季空调使用增加导致负荷升高,公式表示为:
$$y_t = S_t + T_t + R_t$$
其中 $S_t$ 为季节性分量 -
突变点:极端天气或突发事件会导致负荷突然变化,传统方法难以捕捉
-
多尺度依赖:需要同时建模短期(小时级)和长期(月级)依赖关系
技术对比
| 模型类型 | 核心原理 | 适用场景 | 数学表达 |
|---|---|---|---|
| ARIMA | 差分 + 自回归移动平均 | 平稳时序、短期预测 | $(1-\sum_{i=1}^p \phi_i L^i)(1-L)^d y_t = (1+\sum_{i=1}^q \theta_i L^i)\epsilon_t$ |
| LSTM | 门控记忆单元 | 非平稳时序、中长期预测 | $f_t = \sigma(W_f \cdot [h_{t-1}, x_t] + b_f)$ |
| Transformer | 自注意力机制 | 超长序列、跨周期依赖 | $Attention(Q,K,V)=softmax(\frac{QK^T}{\sqrt{d_k}})V$ |
实战代码
ARIMA 实现(pmdarima)
# 自动定阶 ARIMA
from pmdarima import auto_arima
model = auto_arima(
train_data,
seasonal=True, # 启用季节性检测
m=24, # 日周期为 24 小时
trace=True, # 打印搜索过程
error_action='ignore' # 忽略无效参数组合
)
# 模型评估
forecast = model.predict(n_periods=test_len)
smape = 100/len(test) * np.sum(2*np.abs(forecast-test)/(np.abs(forecast)+np.abs(test)))
LSTM 实现(PyTorch Lightning)
class LSTMModule(pl.LightningModule):
def __init__(self, input_size=24, hidden_size=64):
super().__init__()
self.lstm = nn.LSTM(
input_size=input_size,
hidden_size=hidden_size,
batch_first=True # 输入格式为(batch, seq, feature)
)
self.linear = nn.Linear(hidden_size, 1)
def forward(self, x):
# x 形状: [batch, seq_len, features]
lstm_out, _ = self.lstm(x) # 输出包含所有时间步
return self.linear(lstm_out[:, -1]) # 只取最后时间步
生产考量
- 计算资源:
- ARIMA:仅需 CPU,内存占用 <1GB
- LSTM:GPU 加速明显,训练需 8GB 显存
-
Transformer:GPU 必需,16GB 显存起
-
在线学习:
- LSTM 可通过
partial_fit增量更新 -
Transformer 需 LoRA 等微调技术
-
可解释性:
- ARIMA:直接解析系数
- LSTM:使用 SHAP 分析特征重要性
- Transformer:可视化注意力权重矩阵
避坑指南
- 小数据场景(<1 万样本)优先选择 ARIMA
- 存在超过 100 步的长期依赖时,应使用 LSTM 的变体(如 Seq2Seq)
- Transformer 必须验证位置编码的有效性:
- 尝试移除位置编码
- 比较正弦编码与可学习编码的效果
开放问题
三类模型各有优劣:
– ARIMA 计算高效但难以捕捉非线性
– LSTM 适合中等长度序列但并行性差
– Transformer 长程依赖强但数据需求大
如何设计融合架构? 可能的思路:
1. 使用 ARIMA 处理线性分量,残差交给 LSTM
2. 用 Transformer 提取全局特征,LSTM 捕捉局部模式
3. 集成预测:加权平均各模型输出
正文完
