节假日与特殊日期
日历变量和特殊日期是预测应用中最常见的额外变量类型之一。它们为时间序列的当前状态提供额外上下文,特别是对于 TimeGPT-1 等基于窗口的模型。这些变量通常包括添加每个观测值的月份、周、日或小时信息。例如,在高频率的小时数据中,提供当前的年份月份比输入窗口中有限的历史信息能提供更多上下文,从而改善预测。
在本教程中,我们将展示如何使用 date_features
函数自动向数据集添加日历变量。
1. 导入包
首先,我们导入所需的包并初始化 Nixtla 客户端。
👍 使用 Azure AI 端点
要使用 Azure AI 端点,请记住同时设置
base_url
参数
nixtla_client = NixtlaClient(base_url="您的 Azure AI 端点", api_key="您的 API 密钥")
2. 加载数据
我们将使用关于巧克力的 Google Trends 数据集,数据为月度数据。
month | chocolate | |
---|---|---|
0 | 2004-01-31 | 35 |
1 | 2004-02-29 | 45 |
2 | 2004-03-31 | 28 |
3 | 2004-04-30 | 30 |
4 | 2004-05-31 | 29 |
3. 使用节假日和特殊日期进行预测
鉴于日历变量的广泛使用,我们在预测方法中作为预处理步骤包含了常见日历变量的自动创建。让我们创建一个包含美国即将到来的节假日的未来数据框。
month | US_新年 | US_阵亡将士纪念日 | US_六月节全国独立日 | US_独立日 | US_劳动节 | US_退伍军人节 | US_感恩节 | US_圣诞节 | US_马丁·路德·金纪念日 | US_华盛顿诞辰 | US_哥伦布日 | |
---|---|---|---|---|---|---|---|---|---|---|---|---|
0 | 2024-05-31 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
1 | 2024-06-30 | 0 | 0 | 1 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
2 | 2024-07-31 | 0 | 0 | 0 | 1 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
3 | 2024-08-31 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
4 | 2024-09-30 | 0 | 0 | 0 | 0 | 1 | 0 | 0 | 0 | 0 | 0 | 0 |
我们对输入数据框执行相同的步骤。
month | chocolate | US_新年 | US_新年 (观察日期) | US_阵亡将士纪念日 | US_独立日 | US_独立日 (观察日期) | US_劳动节 | US_退伍军人节 | US_感恩节 | US_圣诞节 | US_圣诞节 (观察日期) | US_马丁·路德·金纪念日 | US_华盛顿诞辰 | US_哥伦布日 | US_退伍军人节 (观察日期) | US_六月节全国独立日 | US_六月节全国独立日 (观察日期) | |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
239 | 2023-12-31 | 90 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
240 | 2024-01-31 | 64 | 1 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | 0 | 0 | 0 | 0 | 0 |
241 | 2024-02-29 | 66 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | 0 | 0 | 0 | 0 |
242 | 2024-03-31 | 59 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
243 | 2024-04-30 | 51 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
太好了!现在,TimeGPT 将把这些节假日视为外生变量,而即将到来的节假日将帮助它进行预测。
📘 Azure AI 中的可用模型
如果您正在使用 Azure AI 端点,请务必设置
model="azureai"
nixtla_client.forecast(..., model="azureai")
对于公共 API,我们支持两种模型:
timegpt-1
和timegpt-1-long-horizon
。默认使用
timegpt-1
。有关如何以及何时使用timegpt-1-long-horizon
,请参阅此教程。
然后我们可以绘制每个节假日的权重,以查看哪些在预测对巧克力的兴趣方面更重要。
以下是 date_features
参数工作原理的详细说明
date_features
(布尔值、字符串列表或可调用对象): 此参数指定要考虑哪些日期属性。- 如果设置为
True
,模型将自动添加与给定数据框 (df
) 频率相关的最常见日期特征。对于每日频率,这可能包括星期几、月份和年份等特征。 - 如果提供字符串列表,它将考虑那些特定的日期属性。例如,
date_features=['weekday', 'month']
将仅添加星期几和月份作为特征。 - 如果提供可调用对象,它应该是一个以日期为输入并返回所需特征的函数。这使得计算自定义日期特征具有灵活性。
- 如果设置为
date_features_to_one_hot
(布尔值或字符串列表): 在确定日期特征后,您可能希望对其进行独热编码,特别是如果它们本质上是分类的(如星期几)。独热编码将这些分类特征转换为二进制矩阵,使其更适合许多机器学习算法。- 如果
date_features=True
,则默认情况下,所有计算出的日期特征都将被独热编码。 - 如果提供字符串列表,则仅对那些特定的日期特征进行独热编码。
- 如果
通过利用 date_features
和 date_features_to_one_hot
参数,可以有效地将日期属性的时间效应纳入预测模型,从而潜在地提高其准确性和可解释性。