在此示例中,我们将介绍 core.NeuralForecast 类的数据集输入要求。

core.NeuralForecast 方法作为全局模型运行,接收一组时间序列而不是单个序列。该类使用交叉学习技术来拟合灵活的共享模型,例如神经网络,从而提高了其泛化能力,这在 M4 国际预测竞赛中得到了体现(Smyl 2019,Semenoglou 2021)。

您可以使用 Google Colab 的 GPU 运行这些实验。

长格式

多个时间序列

将您的时间序列存储在 pandas 数据框(dataFrame)中,采用长格式,即每一行代表特定序列和时间戳的观察值。我们来看一个使用 datasetsforecast 库的示例。

Y_df = pd.concat( [series1, series2, ...])

!pip install datasetsforecast
import pandas as pd
from datasetsforecast.m3 import M3
Y_df, *_ = M3.load('./data', group='Yearly')
Y_df.groupby('unique_id').head(2)
unique_iddsy
0Y11975-12-31940.66
1Y11976-12-311084.86
20Y101975-12-312160.04
21Y101976-12-312553.48
40Y1001975-12-311424.70
18260Y971976-12-311618.91
18279Y981975-12-311164.97
18280Y981976-12-311277.87
18299Y991975-12-311870.00
18300Y991976-12-311307.20

Y_df 是一个数据框(dataFrame),包含三列:unique_id,用于标识每个时间序列的唯一 ID;ds 列,包含时间戳;以及 y 列,包含序列的值。

单个时间序列

如果您只有一个时间序列,则必须包含 unique_id 列。例如,考虑 AirPassengers 数据集。

Y_df = pd.read_csv('https://raw.githubusercontent.com/Nixtla/transfer-learning-time-series/main/datasets/air_passengers.csv')
Y_df
timestampvalue
01949-01-01112
11949-02-01118
21949-03-01132
31949-04-01129
41949-05-01121
1391960-08-01606
1401960-09-01508
1411960-10-01461
1421960-11-01390
1431960-12-01432

在此示例中,Y_df 只包含两列:timestampvalue。要使用 NeuralForecast,我们必须包含 unique_id 列并重命名之前的列。

Y_df['unique_id'] = 1. # We can add an integer as identifier
Y_df = Y_df.rename(columns={'timestamp': 'ds', 'value': 'y'})
Y_df = Y_df[['unique_id', 'ds', 'y']]
Y_df
unique_iddsy
01.01949-01-01112
11.01949-02-01118
21.01949-03-01132
31.01949-04-01129
41.01949-05-01121
1391.01960-08-01606
1401.01960-09-01508
1411.01960-10-01461
1421.01960-11-01390
1431.01960-12-01432

参考文献