深度学习模型
深度学习模型通过其强大的表示学习能力,能够自动捕捉时间序列数据中的复杂模式和长期依赖关系,特别适合处理大规模、高维度的时序数据。
LSTM/GRU模型
长短期记忆网络(LSTM)和门控循环单元(GRU)是专为处理序列数据设计的循环神经网络变体,能有效捕捉长期依赖关系。
from tensorflow.keras.models import Sequential
from tensorflow.keras.layers import LSTM, Dense, GRU, Dropout
# 准备序列数据
def create_sequences(data, seq_length):
X, y = [], []
for i in range(len(data) - seq_length):
X.append(data[i:i + seq_length, :-1])
y.append(data[i + seq_length, -1])
return np.array(X), np.array(y)
# 构建LSTM模型
model = Sequential([
LSTM(units=50, return_sequences=True, input_shape=(seq_length, n_features)),
Dropout(0.2),
LSTM(units=50),
Dropout(0.2),
Dense(1)
])
model.compile(optimizer='adam', loss='mse')
model.fit(X_train, y_train, epochs=50, batch_size=32, validation_split=0.2)
# GRU模型(通常比LSTM更轻量)
gru_model = Sequential([
GRU(units=50, return_sequences=True, input_shape=(seq_length, n_features)),
Dropout(0.2),
GRU(units=50),
Dropout(0.2),
Dense(1)
])
gru_model.compile(optimizer='adam', loss='mse')
Transformer系列模型
Transformer架构通过自注意力机制可以有效处理长序列和并行计算,近年来在时序预测领域表现出色。
Temporal Fusion Transformer (TFT)
TFT结合了循环层、自注意力机制和时间特定处理,特别适合多变量时序预测:
# 使用PyTorch实现的TFT模型示例
from pytorch_forecasting.models import TemporalFusionTransformer
from pytorch_forecasting.data import TimeSeriesDataSet
# 构建数据集
training_data = TimeSeriesDataSet(
data=df_train,
time_idx="time_idx",
target="target",
group_ids=["group_id"],
max_encoder_length=24,
max_prediction_length=12,
time_varying_known_categoricals=["dayofweek", "month"],
time_varying_known_reals=["time_idx"],
time_varying_unknown_categoricals=[],
time_varying_unknown_reals=["target"],
)
# 创建模型
tft = TemporalFusionTransformer.from_dataset(
training_data,
learning_rate=0.03,
hidden_size=32,
attention_head_size=1,
dropout=0.1,
hidden_continuous_size=16,
loss=QuantileLoss(),
)
Informer/TimesNet等创新模型
# Informer伪代码示例
# 参考https://github.com/zhouhaoyi/Informer2020
class Informer(nn.Module):
def __init__(self, enc_in, dec_in, c_out, seq_len, label_len, out_len, ...):
# 定义编码器、解码器和预测头
self.encoder = Encoder(...)
self.decoder = Decoder(...)
self.projection = nn.Linear(...)
def forward(self, x_enc, x_dec, enc_self_mask=None, dec_self_mask=None, dec_enc_mask=None):
enc_out = self.encoder(x_enc, attn_mask=enc_self_mask)
dec_out = self.decoder(x_dec, enc_out, ...)
return self.projection(dec_out)
时间特征编码
深度学习模型中,时间编码是提高性能的关键:
# 周期性嵌入
def time_features(dates):
# 时间特征:小时、星期几、月份...
hour = np.sin(2 * np.pi * dates.hour / 24.0)
day_of_week = np.sin(2 * np.pi * dates.dayofweek / 7.0)
day_of_month = np.sin(2 * np.pi * dates.day / 30.0)
month = np.sin(2 * np.pi * dates.month / 12.0)
return np.column_stack([hour, day_of_week, day_of_month, month])
优缺点与适用场景
优点
- 自动学习复杂特征表示
- 处理长序列和捕捉长期依赖关系
- 融合多源异构数据能力强
- 可以端到端训练,减少人工特征工程
缺点
- 需要大量训练数据
- 计算资源需求高
- 训练和调参复杂
- 模型可解释性相对较差
适用场景
- 高维复杂多变量时序
- 大规模数据集
- 需要捕捉复杂非线性模式
- 长期预测需求
- 异构数据融合场景
与其他模块的关系
深度学习模型与时序分析-数据预处理与趋势识别同样重要,但对数据量和质量要求更高。相比时序分析-传统统计模型和时序分析-机器学习模型,深度学习能够自动学习特征表示,但也常需要时序分析-特征构建与变量增强中的时间特征编码。在实际应用中,经常会将深度学习与其他模型结合,形成时序分析-混合方法。在时序分析-应用场景中,深度学习模型特别适用于复杂的业务预测和资源调度问题。