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 代表月份名稱的字串特徵。 'January'
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 指出時間是早上還是晚上的字串特徵。 'am'
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 中使用 country_or_region_for_holidays 參數設定,該參數接受 ISO 國碼 (地區碼)

注意

假日特徵只能針對每日頻率的時間序列進行設定。

下表摘要說明假日特徵:

功能名稱 描述
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 通常會使用此前置詞來區分輸入特徵與工程特徵。

下一步