1. 多变量时间序列预测的神经网络实现
时间序列预测一直是数据分析领域的重要课题。传统方法如SARIMA和VARMA在处理多变量预测时各有局限:前者需要为每个序列单独建模,后者则假设所有序列必须相关。而神经网络提供了一种更灵活的解决方案,能够使用单一模型同时预测多个时间序列,无论它们之间是否存在相关性。
我在实际项目中发现,神经网络方法还有两个显著优势:一是可以轻松引入外生变量(如节假日、促销活动等外部因素),二是能够一次性预测未来多个时间步长。这使得神经网络成为各种预测场景下的通用解决方案。
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. 数据准备与预处理
2.1 数据集介绍
我们使用2013-2016年印度德里的每日平均温度和湿度数据作为示例。这个数据集包含三个字段:日期时间、平均温度(meantemp)和湿度(humidity)。从初步可视化可以看出,这两个变量似乎存在反向相关性——温度升高时湿度往往降低。
注意:处理时间序列数据时,务必确保数据按时间顺序排列,避免未来信息泄露到过去。
2.2 数据标准化
虽然神经网络不要求数据平稳,但标准化能显著提高模型性能。我们使用MinMaxScaler将所有特征缩放到[0,1]区间:
python复制from sklearn.preprocessing import MinMaxScaler
scaler = MinMaxScaler(feature_range=(0, 1))
for col in ['meantemp', 'humidity']:
df[col] = scaler.fit_transform(df[[col]])
2.3 时间序列窗口转换
这是整个流程中最关键也最具挑战性的步骤。我们需要将时间序列数据转换为监督学习格式。核心思想是利用过去n个时间步的值来预测下一个时间步。
我编写了两个辅助函数来完成这个转换:
convert_to_supervised: 将一维序列转换为窗口格式rename_dataframe_supervised: 重命名列以反映时间偏移
对于窗口大小为6的双变量序列,转换后的X维度为(样本数×12),Y维度为(样本数×2)。以下是转换代码的核心部分:
python复制timesteps = 6
featu
