GluonTS时间序列预测快速入门教程
概述
GluonTS是一个功能强大的概率时间序列预测工具包,由MXNet提供支持。它提供了构建和评估时间序列预测模型所需的各种组件,特别适合需要进行概率预测的场景。本文将带您快速了解GluonTS的核心功能和使用方法。
核心组件
GluonTS主要包含以下几个关键部分:
- 预构建模型:包括多种开箱即用的预测模型
- 模型构建组件:如似然函数、特征处理管道、日历特征等
- 数据加载与处理:简化时间序列数据的准备工作
- 可视化与评估工具:帮助分析预测结果
- 数据集:包含多个公开可用的基准数据集
数据集处理
内置数据集
GluonTS提供了多个公开的时间序列数据集,涵盖不同频率和领域。这些数据集已经过预处理,可直接用于模型训练和评估。
from gluonts.dataset.repository import get_dataset, dataset_names
from gluonts.dataset.util import to_pandas
# 获取可用数据集列表
print(f"可用数据集: {dataset_names}")
# 加载特定数据集
dataset = get_dataset("m4_hourly")
每个数据集包含三个主要部分:
train
:用于训练的可迭代数据条目集合test
:用于推理的测试集,包含额外的预测窗口metadata
:数据集元数据,如频率、预测长度等
自定义数据集
GluonTS支持自定义数据集,只需满足以下基本要求:
- 可迭代
- 包含"target"和"start"字段
import numpy as np
import pandas as pd
from gluonts.dataset.common import ListDataset
# 创建随机数据集
N = 10 # 时间序列数量
T = 100 # 时间步长
prediction_length = 24
freq = "1H"
custom_dataset = np.random.normal(size=(N, T))
start = pd.Period("01-01-2019", freq=freq)
# 转换为GluonTS格式
train_ds = ListDataset(
[{'target': x, 'start': start} for x in custom_dataset[:, :-prediction_length]],
freq=freq
)
test_ds = ListDataset(
[{'target': x, 'start': start} for x in custom_dataset],
freq=freq
)
模型训练与预测
使用预建模型
GluonTS提供了多种预构建模型,我们以简单的前馈神经网络(SimpleFeedForwardEstimator)为例:
from gluonts.mx import SimpleFeedForwardEstimator, Trainer
# 配置模型参数
estimator = SimpleFeedForwardEstimator(
num_hidden_dimensions=[10], # 网络隐藏层维度
prediction_length=dataset.metadata.prediction_length, # 预测长度
context_length=100, # 输入上下文长度
trainer=Trainer(
ctx="cpu", # 使用CPU
epochs=5, # 训练轮数
learning_rate=1e-3, # 学习率
num_batches_per_epoch=100 # 每轮批次数
)
)
# 训练模型
predictor = estimator.train(dataset.train)
生成预测
训练完成后,我们可以使用模型生成预测:
from gluonts.evaluation import make_evaluation_predictions
# 生成评估预测
forecast_it, ts_it = make_evaluation_predictions(
dataset=dataset.test,
predictor=predictor,
num_samples=100 # 生成100条样本路径
)
# 转换为列表方便处理
forecasts = list(forecast_it)
tss = list(ts_it)
结果可视化与评估
预测结果可视化
GluonTS提供了方便的绘图功能,可以直观展示预测结果:
import matplotlib.pyplot as plt
# 获取第一条时间序列
ts_entry = tss[0]
forecast_entry = forecasts[0]
# 绘制结果
plt.plot(ts_entry[-150:].to_timestamp())
forecast_entry.plot(show_label=True)
plt.legend()
plt.show()
定量评估
我们可以使用内置评估器计算各种指标:
from gluonts.evaluation import Evaluator
# 初始化评估器
evaluator = Evaluator(quantiles=[0.1, 0.5, 0.9])
# 计算指标
agg_metrics, item_metrics = evaluator(tss, forecasts)
# 打印聚合指标
print(json.dumps(agg_metrics, indent=4))
常用评估指标包括:
- MASE:平均绝对缩放误差
- MSIS:M4竞赛使用的对称区间得分
- MAPE:平均绝对百分比误差
- RMSE:均方根误差
总结
本教程介绍了GluonTS的基本使用方法,包括:
- 加载和处理时间序列数据
- 训练预构建的预测模型
- 生成和可视化预测结果
- 评估模型性能
GluonTS的强大之处在于它简化了概率时间序列预测的流程,同时提供了足够的灵活性来处理各种预测场景。对于更复杂的应用,您可以探索GluonTS提供的其他模型和高级功能。
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考