数据要求
本节解释了 TimeGPT
的数据要求。
TimeGPT
接受 长格式 的 pandas
和 polars
数据框,需要以下列:
ds
(时间戳): 时间戳格式为YYYY-MM-DD
或YYYY-MM-DD HH:MM:SS
。y
(数值): 要预测的目标变量。
(可选:您也可以传入一个没有 ds
列但具有 DatetimeIndex 的 DataFrame)
TimeGPT
也支持分布式数据框,例如 dask
、spark
和 ray
。
您也可以在 DataFrame 中包含外生特征作为附加列。更多信息请参阅此教程。
以下是 TimeGPT
有效输入数据框的示例。
timestamp | value | |
---|---|---|
0 | 1949-01-01 | 112 |
1 | 1949-02-01 | 118 |
2 | 1949-03-01 | 132 |
3 | 1949-04-01 | 129 |
4 | 1949-05-01 | 121 |
请注意,在此示例中,ds
列被命名为 timestamp
,y
列被命名为 value
。您有两种选择:
-
分别将列重命名为
ds
和y
,或者 -
保留当前列名并在使用
NixtlaClient
类中的任何方法时,通过time_col
和target_col
参数指定它们。
例如,当使用 NixtlaClient
类中的 forecast
方法时,您必须实例化该类,然后如下指定列名。
timestamp | TimeGPT | |
---|---|---|
0 | 1961-01-01 | 437.83792 |
1 | 1961-02-01 | 426.06270 |
2 | 1961-03-01 | 463.11655 |
3 | 1961-04-01 | 478.24450 |
4 | 1961-05-01 | 505.64648 |
在此示例中,NixtlaClient
会推断频率,但您可以使用 freq
参数明确指定它。
要了解如何实例化 NixtlaClient
类,请参阅TimeGPT 快速入门
多序列
如果您处理多个时间序列,请确保每个序列都有一个唯一标识符。您可以将此列命名为 unique_id
,或者在使用 NixtlaClient
类中的任何方法时,使用 id_col
参数指定其名称。此列应为字符串、整数或类别类型。
在此示例中,我们有五个序列,表示五个不同市场的每小时电价。列名已是默认名称,因此无需指定 id_col
、time_col
或 target_col
参数。如果您的列名不同,请根据需要指定这些参数。
unique_id | ds | y | |
---|---|---|---|
0 | BE | 2016-10-22 00:00:00 | 70.00 |
1 | BE | 2016-10-22 01:00:00 | 37.10 |
2 | BE | 2016-10-22 02:00:00 | 37.10 |
3 | BE | 2016-10-22 03:00:00 | 44.75 |
4 | BE | 2016-10-22 04:00:00 | 37.10 |
unique_id | ds | TimeGPT | |
---|---|---|---|
0 | BE | 2016-12-31 00:00:00 | 45.190582 |
1 | BE | 2016-12-31 01:00:00 | 43.244987 |
2 | BE | 2016-12-31 02:00:00 | 41.958897 |
3 | BE | 2016-12-31 03:00:00 | 39.796680 |
4 | BE | 2016-12-31 04:00:00 | 39.204865 |
处理大量时间序列时,请考虑使用分布式计算框架以高效处理数据。TimeGPT
支持 Spark、Dask 和 Ray 等框架。
外生变量
TimeGPT
也接受外生变量。您可以通过在 y
列之后添加额外列来将外生变量添加到您的数据框中。
unique_id | ds | y | Exogenous1 | Exogenous2 | day_0 | day_1 | day_2 | day_3 | day_4 | day_5 | day_6 | |
---|---|---|---|---|---|---|---|---|---|---|---|---|
0 | BE | 2016-10-22 00:00:00 | 70.00 | 57253.0 | 49593.0 | 0.0 | 0.0 | 0.0 | 0.0 | 0.0 | 1.0 | 0.0 |
1 | BE | 2016-10-22 01:00:00 | 37.10 | 51887.0 | 46073.0 | 0.0 | 0.0 | 0.0 | 0.0 | 0.0 | 1.0 | 0.0 |
2 | BE | 2016-10-22 02:00:00 | 37.10 | 51896.0 | 44927.0 | 0.0 | 0.0 | 0.0 | 0.0 | 0.0 | 1.0 | 0.0 |
3 | BE | 2016-10-22 03:00:00 | 44.75 | 48428.0 | 44483.0 | 0.0 | 0.0 | 0.0 | 0.0 | 0.0 | 1.0 | 0.0 |
4 | BE | 2016-10-22 04:00:00 | 37.10 | 46721.0 | 44338.0 | 0.0 | 0.0 | 0.0 | 0.0 | 0.0 | 1.0 | 0.0 |
使用外生变量时,您还需要提供其未来值。
unique_id | ds | Exogenous1 | Exogenous2 | day_0 | day_1 | day_2 | day_3 | day_4 | day_5 | day_6 | |
---|---|---|---|---|---|---|---|---|---|---|---|
0 | BE | 2016-12-31 00:00:00 | 70318.0 | 64108.0 | 0.0 | 0.0 | 0.0 | 0.0 | 0.0 | 1.0 | 0.0 |
1 | BE | 2016-12-31 01:00:00 | 67898.0 | 62492.0 | 0.0 | 0.0 | 0.0 | 0.0 | 0.0 | 1.0 | 0.0 |
2 | BE | 2016-12-31 02:00:00 | 68379.0 | 61571.0 | 0.0 | 0.0 | 0.0 | 0.0 | 0.0 | 1.0 | 0.0 |
3 | BE | 2016-12-31 03:00:00 | 64972.0 | 60381.0 | 0.0 | 0.0 | 0.0 | 0.0 | 0.0 | 1.0 | 0.0 |
4 | BE | 2016-12-31 04:00:00 | 62900.0 | 60298.0 | 0.0 | 0.0 | 0.0 | 0.0 | 0.0 | 1.0 | 0.0 |
unique_id | ds | TimeGPT | |
---|---|---|---|
0 | BE | 2016-12-31 00:00:00 | 51.632830 |
1 | BE | 2016-12-31 01:00:00 | 45.750877 |
2 | BE | 2016-12-31 02:00:00 | 39.650543 |
3 | BE | 2016-12-31 03:00:00 | 34.000072 |
4 | BE | 2016-12-31 04:00:00 | 33.785370 |
要了解如何将外生变量与 TimeGPT
结合使用,请参阅外生变量教程。
重要注意事项
使用 TimeGPT
时,数据不能包含缺失值。这意味着对于每个序列,时间戳不应有间隔,目标变量不应有缺失值。
更多信息,请参阅关于处理 TimeGPT 中缺失值的教程。
最低数据要求(适用于 AzureAI)
TimeGPT
目前支持任何数量的数据来生成点预测。也就是说,无论频率如何,每个序列调用 nixtla_client.forecast(df=df, h=h, freq=freq)
并期望获得结果所需的最小大小为一。
对于 Azure AI,在使用参数 level
、finetune_steps
、X_df
(外生变量)或 add_history
时,API 根据频率要求最低数据点数量。以下是每种频率的最低大小:
频率 | 最低大小 |
---|---|
每小时和亚小时(例如,“H”、“min”、“15T”) | 1008 |
每日(“D”) | 300 |
每周(例如,“W-MON”,..., “W-SUN”) | 64 |
每月及其他频率(例如,“M”、“MS”、“Y”) | 48 |
对于交叉验证,您需要考虑这些数量以及预测范围 (h
)、窗口数量 (n_windows
) 和窗口之间的间隔 (step_size
)。因此,在这种情况下每个序列的最小观测数量将由以下关系确定:
先前描述的最低数量 + h + step_size + (n_windows - 1)