AutoML 中用于时序预测的日历特征
本文重点介绍 AutoML 为提高预测回归模型的准确性而创建的基于日历的特征。 由于假日对建模系统的行为有很大的影响,因此假日前后和假日期间的时间可能会使序列的模式产生偏差。 每个假日会在现有数据集上生成一个时段,学习者可向其分配效果。 这在假日等对特定产品产生高需求的场景中特别有用。 有关 AutoML 中预测方法的更多常规信息,请参阅方法概述文章。 有关在 AutoML 中训练预测模型的说明和示例,请参阅为时序预测设置 AutoML 一文。
作为特征工程的一部分,AutoML 将训练数据中提供的日期时间类型列转换为新的基于日历的特征列。 这些特征可帮助回归模型以多种节奏了解季节性模式。 AutoML 始终可根据时序的时间索引创建日历特征,因为这是训练数据中的必需列。 日历特征也由具有日期时间类型的其他列(如果存在)组成。 有关数据要求的详细信息,请参阅 AutoML 如何使用数据指南。
AutoML 考虑两类日历特征:完全基于日期和时间值的标准特征,以及特定于世界某个国家或地区的假日特征。 我们将在本文的其余部分介绍这些特征。
标准日历特征
下表显示了 AutoML 标准日历特征的完整集以及示例输出。 示例使用标准 YY-mm-dd %H-%m-%d
格式表示日期时间。
功能名称 | 说明 | 2011-01-01 00:25:30 的示例输出 |
---|---|---|
year |
表示日历年的数值特征 | 2011 |
year_iso |
表示 ISO 8601 中定义的 ISO 年份。 ISO 年从一年中头一个有星期二的那一周开始算。 例如,如果 1 月 1 日是星期五,则 ISO 年从 1 月 4 日开始。 ISO 年可能不同于日历年。 | 2010 |
half |
指示日期在上半年还是下半年的特征。 如果日期在 7 月 1 日之前,则为 1,否则为 2。 | |
quarter |
表示给定日期所在季度的数值特征。 它采用值 1、2、3 或 4,表示日历年的第一、第二、第三、第四季度。 | 1 |
month |
表示日历月的数值特征。 它采用 1 到 12 的值。 | 1 |
month_lbl |
表示月份名称的字符串特征。 | “一月” |
day |
表示月份日期的数值特征。 它采用 1 到 31 的值。 | 1 |
hour |
表示日期小时的数值特征。 它采用 0 到 23 的值。 | 0 |
minute |
表示小时内分钟数的数值特征。 它采用 0 到 59 的值。 | 25 |
second |
表示给定日期时间的秒的数值特征。 如果仅提供了日期格式,则假定为 0。 它采用 0 到 59 的值。 | 30 |
am_pm |
指示时间是上午还是下午的数值特征。 中午 12 点之前的时间为 0,中午 12 点之后的时间为 1。 | 0 |
am_pm_lbl |
指示时间是上午还是下午的字符串特征。 | “上午” |
hour12 |
表示 12 小时制的一天中的小时的数值特征。 前半天取值 0 到 12,后半天取值 1 到 11。 | 0 |
wday |
表示星期几的数值特征。 它采用 0 到 6 的值,其中 0 对应于星期一。 | 5 |
wday_lbl |
表示星期几名称的字符串特征。 | |
qday |
表示季度内某一天的数值特征。 它采用 1 到 92 的值。 | 1 |
yday |
表示一年中某一天的数值特征。 它采用 1 到 365 的值;如果是闰年,则采用 1 到 366 的值。 | 1 |
week |
表示 ISO 8601 中定义的 ISO 周的数值特征。 ISO 周始终从星期一开始,到星期日结束。 它采用 1 到 52 的值;对于 1 月 1 日是星期四的年份,或者 1 月 1 日是星期三的闰年,采用 1 到 53 的值。 | 52 |
并非在所有情况下都可创建完整的标准日历特征集。 生成的集取决于时序的频率,还取决于训练数据在时间索引之外是否还包含日期时间特征。 下表显示了为不同列类型创建的特征:
列用途 | 日历功能 |
---|---|
时间索引 | 在完整集中去掉与其他特征高度相关的日历特征。 例如,如果时序频率为每日,则将移除频率比每日更加精细的任何特征,因为它们没有提供有用的信息。 |
其他日期时间列 | 由 Year 、Month 、Day 、DayOfWeek 、DayOfYear 、QuarterOfYear 、WeekOfMonth 、Hour 、Minute 和 Second 组成的缩减集。 如果列是不带时间的日期,则 Hour 、Minute 和 Second 将为 0。 |
假日特征
AutoML 可选择地创建表示特定国家或地区的假日的特征。 这些特征在 AutoML 中使用接受 ISO 国家/地区代码的 country_or_region_for_holidays
参数进行配置。
注意
假日特征只能用于频率为每日的时序。
下表总结了假日频率:
功能名称 | 说明 |
---|---|
Holiday |
指定日期是国家假日还是区域性假日的字符串特征。 还会标记某个假日范围内的日期。 |
isPaidTimeOff |
如果该日期是给定国家或地区的“带薪休假假期”,则是采用值 1 的二进制特征。 |
AutoML 使用 Azure 开放数据集作为假日信息的来源。 有关详细信息,请参阅 PublicHolidays 文档。
为了更好地了解假日特征生成情况,请考虑以下示例数据:
为了使此数据具有美国假日特征,我们在预测设置中将 country_or_region_for_holiday
设置为“US”,如以下代码示例所示:
from azure.ai.ml import automl
# create a forcasting job
forecasting_job = automl.forecasting(
compute='test_cluster', # Name of single or multinode AML compute infrastructure created by user
experiment_name=exp_name, # name of experiment
training_data=sample_data,
target_column_name='demand',
primary_metric='NormalizedRootMeanSquaredError',
n_cross_validations=3,
enable_model_explainability=True
)
# set custom forecast settings
forecasting_job.set_forecast_settings(
time_column_name='timeStamp',
country_or_region_for_holidays='US'
)
生成的假日特征如以下输出所示:
请注意,生成的特征在其列名前面加上前缀 _automl_
。 AutoML 通常使用此前缀来区分输入特征和工程特征。
后续步骤
- 详细了解如何设置 AutoML 来训练时序预测模型。
- 浏览 AutoML 预测常见问题解答。
- 了解 AutoML 预测滞后功能。
- 了解 AutoML 如何使用机器学习生成预测模型。