AutoML での時系列予測のためのカレンダー特徴量

この記事では、回帰モデルの予測精度を高めるために AutoML によって作成されるカレンダーベースの特徴量について説明します。 休日はモデル化されたシステムの動作に強い影響を与える可能性があるため、休日の前後とその最中の時間は、時系列のパターンに偏りを与える可能性があります。 各休日は、学習者が効果を割り当てることができる既存のデータセットに対して時間枠を生成します。 これは、特定の製品に対して高い需要を生み出す休日などのシナリオで特に役立ちます。 AutoML での予測方法に関する一般的な情報については、方法の概要に関する記事を参照してください。 AutoML で予測モデルをトレーニングする手順と例については、時系列予測用に AutoML を設定するの記事を参照してください。

AutoML での特徴エンジニアリングの過程で、トレーニング データで与えられた datetime 型の列が、カレンダーベースの特徴量を表す新しい列に変換されます。 これらの特徴量は、回帰モデルでの複数周期の季節的なパターンの学習に役立ちます。 時系列の時間インデックスはトレーニング データの必須の列であるため、AutoML で常にカレンダー特徴量を作成できます。 datetime 型の他の列 (存在する場合) からもカレンダー特徴量が作成されます。 データ要件の詳細については、「AutoML でのデータの使用方法」のガイドを参照してください。

AutoML では、カレンダー特徴量の 2 つのカテゴリが考慮されます。日付と時刻の値のみに基づく標準の特徴量と、世界の国または地域に固有の休日の特徴量です。 この記事の残りの部分でこれらの特徴量について説明します。

標準のカレンダー特徴量

次の表は、AutoML の標準のカレンダー特徴量の完全なセットと出力例を示しています。 この例では、datetime 表現に標準の 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、2、3、4 のいずれかの値になります。 1
month カレンダー月を表す数値の特徴量。 1 から 12 の値になります。 1
month_lbl 月の名前を表す文字列の特徴量。 '1 月'
day 月の日付を表す数値の特徴量。 1 から 31 までの値になります。 1
hour 1 日の時間を表す数値の特徴量。 0 から 23 までの値になります。 0
minute 1 時間に含まれる分を表す数値の特徴量。 0 から 59 までの値になります。 25
second 与えられた datetime の秒を表す数値の特徴量。 日付形式のみが指定されている場合は、0 と見なされます。 0 から 59 までの値になります。 30
am_pm 時刻が午前か午後かを示す数値の特徴量。 正午より前の場合は 0、正午より後の場合は 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 日が水曜日に当たる閏年の場合は 53 までの値になります。 52

すべてのケースで標準のカレンダー特徴量の完全なセットが作成されわけではありません。 生成されるセットは、時系列の頻度と、トレーニング データに時間インデックスに加えて datetime の特徴量が含まれているかどうかによって異なります。 次の表は、さまざまな列の種類に対して作成される特徴量を示しています。

列の目的 カレンダーの機能
時間インデックス 完全なセットから、他の特徴量と高い相関関係を持つカレンダー特徴量を除いたもの。 たとえば、時系列の頻度が毎日の場合、毎日よりも細かい頻度の特徴量は有用な情報を提供しないため、削除されます。
他の datetime 列 YearMonthDayDayOfWeekDayOfYearQuarterOfYearWeekOfMonthHourMinuteSecond で構成される縮小されたセット。 列が時刻のない日付である場合、HourMinuteSecond は 0 になります。

休日の特徴量

AutoML では、必要に応じて、特定の国または地域の休日を表す特徴量を作成できます。 これらの特徴量は、AutoML で ISO 国コードを指定できる country_or_region_for_holidays パラメーターを使用して構成します。

注意

休日の特徴量は、毎日の頻度を持つ時系列に対してのみ作成できます。

次の表は、休日の特徴量をまとめたものです。

機能名 説明
Holiday 日付が国または地域の休日であるかどうかを指定する文字列の特徴量。 休日から一定範囲の日もマークされます。
isPaidTimeOff 与えられた国または地域でその日が "有給休暇" である場合に 1 の値を取るバイナリの特徴量。

AutoML では、休日情報のソースとして Azure Open Datasets が使用されます。 詳細については、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 では通常、このプレフィックスを使用して、入力された特徴量とエンジニアリングされた特徴量を区別します。

次の手順