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

并非在所有情况下都可创建完整的标准日历特征集。 生成的集取决于时序的频率,还取决于训练数据在时间索引之外是否还包含日期时间特征。 下表显示了为不同列类型创建的特征:

列用途 日历功能
时间索引 在完整集中去掉与其他特征高度相关的日历特征。 例如,如果时序频率为每日,则将移除频率比每日更加精细的任何特征,因为它们没有提供有用的信息。
其他日期时间列 YearMonthDayDayOfWeekDayOfYearQuarterOfYearWeekOfMonthHourMinuteSecond 组成的缩减集。 如果列是不带时间的日期,则 HourMinuteSecond 将为 0。

假日特征

AutoML 可选择地创建表示特定国家或地区的假日的特征。 这些特征在 AutoML 中使用接受 ISO 国家/地区代码country_or_region_for_holidays 参数进行配置。

注意

假日特征只能用于频率为每日的时序。

下表总结了假日频率:

功能名称 说明
Holiday 指定日期是国家假日还是区域性假日的字符串特征。 还会标记某个假日范围内的日期。
isPaidTimeOff 如果该日期是给定国家或地区的“带薪休假假期”,则是采用值 1 的二进制特征。

AutoML 使用 Azure 开放数据集作为假日信息的来源。 有关详细信息,请参阅 PublicHolidays 文档。

为了更好地了解假日特征生成情况,请考虑以下示例数据:

sample_data

为了使此数据具有美国假日特征,我们在预测设置中将 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'
)

生成的假日特征如以下输出所示:

sample_data_output

请注意,生成的特征在其列名前面加上前缀 _automl_。 AutoML 通常使用此前缀来区分输入特征和工程特征。

后续步骤