AutoML の予測方法の概要
この記事では、時系列データの準備や予測モデルの構築のために Azure Machine Learning の AutoML で使用される手法について説明します。 AutoML で予測モデルをトレーニングする手順と例については、「時系列予測用に AutoML を設定する」を参照してください。
AutoML の予測手法
AutoML では、複数の方法を使用して時系列値を予測します。 これらの方法は、大まかに 2 つのカテゴリに分類できます。
- ターゲット数量の履歴値を使用して将来の予測を行う時系列モデル
- 予測変数を使用してターゲットの値を予測する回帰 (説明) モデル
例えば、食料品店の特定ブランドのオレンジ ジュースの毎日の需要を予測する必要がある場合を考えてみましょう。 式では、$t$ 日におけるこのブランドの需要を $y_t$ とします。 時系列モデルでは、次の式により過去の需要の関数を使用した、$t+1$ での需要を予測します。
$y_{t+1} = f(y_t, y_{t-1}, \ldots, y_{t-s})$
関数 $f$ には、多くの場合、過去に観測された需要を使用して調整するパラメーターが含まれます。 $f$ が予測に使用する過去の量 ($s$) は、モデルのパラメーターと見なすこともできます。
オレンジジュースの需要の例では、時系列モデルに過去の需要に関する情報のみが使用されるため、精度が十分でない可能性があります。 価格、曜日、祝日期間など、将来の需要に影響する可能性がある要因は他にもたくさんあります。 次の式で、これらの予測変数を使用する回帰モデルについて考えてみましょう。
$y = g(\text{price}, \text{day of week}, \text{holiday})$
繰り返しになりますが、関数 $g$ には通常、正則化を制御する値を含む一連のパラメーターがあります。これらは、過去の需要の値と予測因子を使用して AutoML によって調整されます。 式から $t$ を省いて、回帰モデルが "同時に" 定義された変数間の相関パターンを使用して予測を行っていることを強調します。 $g$ から $y_{t+1}$ を予測するには、$t+1$ が何曜日に当たるか、祝日かどうか、$t +1$ 日のオレンジ ジュースの価格はいくらかを知る必要があります。 最初の 2 つの情報は、カレンダーを使えば簡単に特定できます。 小売価格は通常、事前に設定されているため、オレンジ ジュースの価格もおそらく前日にはわかります。 ただし、10 日先の価格はわからない場合があります。 この回帰の有用性は、どのくらい先の予測が必要か (予測期間ともいう) と、予測因子の将来の値がどの程度わかっているかによって制限されることを理解することが重要です。
重要
AutoML の予測回帰モデルでは、ユーザーによって提供されるすべての特徴が、将来にわたって (少なくとも予測ホライズンまで) 認識されていることを前提としています。
AutoML の予測回帰モデルを拡張して、ターゲットと予測子の過去の値を使用することもできます。 結果は、時系列モデルと純粋回帰モデルの特性を持つハイブリッド モデルになります。 過去の数量は、回帰における追加の予測変数であり、ラグ数量と呼びます。 ラグの "順序" は、値がどれだけ遡ってわかっているかを示します。 たとえば、オレンジ ジュースの需要の例の場合、ターゲットの順序が 2 のラグの現在値は、2 日前に観測されたジュースの需要です。
時系列モデルと回帰モデルのもう 1 つの注目すべき違いは、予測を生成する方法です。 時系列モデルは一般に再帰関係によって定義され、一度に 1 つずつ予測を生成します。 将来にわたって多くの期間を予測するために、予測ホライズンまで反復し、以前の予測をモデルにフィードバックして、必要に応じて次の 1 期間先の予測を生成します。 対照的に、回帰モデルは、全予測期間の "すべての" 予測を一度に生成する、直接予測器といえます。 再帰モデルは、以前の予測をモデルにフィードバックするときに予測エラーが増すため、直接予測モデルの方が再帰的手法よりも望ましい場合があります。 ラグ特徴量が含まれている場合、回帰モデルが直接予測器として機能できるように、AutoML ではいくつかの重要な変更がトレーニング データに加えられます。 詳細については、「AutoML における時系列予測のラグ特徴量」を参照してください。
AutoML でのモデルの予測
Machine Learning の AutoML では、次の予測モデルを実装しています。 各カテゴリで、モデルは組み込むことができるパターンの複雑さ (モデル容量ともいう) の順で大まかに一覧表示されています。 最後に観測された値を単純に予測する Naive モデルが低容量なのに対し、何百万ものチューニング可能なパラメーターを持つディープ ニューラル ネットワーク (DNN) である Temporal Convolutional Network (TCNForecaster) は大容量です。
AutoML には、精度をさらに向上させるために、重み付けを行った、パフォーマンスの高い複数のモデルを組み合わせるアンサンブル モデルも含まれています。 予測には、Caruana のアンサンブル選択アルゴリズムを使用して、構成と重みを求めるソフト投票アンサンブルを使用します。
Note
予測モデルのアンサンブルには、次の 2 つの重要な注意事項があります。
- TCN は現在、アンサンブルに含めることはできません。
- 既定では、AutoML でスタック アンサンブル メソッドは無効になっています。 これは AutoML の既定の回帰タスクと分類タスクに含まれています。 スタック アンサンブルは、最適なモデル予測にメタモデルを当てはめ、アンサンブルの重みを見つけます。 内部のベンチマーク作業で、この戦略は時系列データを過学習する傾向が強いことがわかりました。 この結果から、汎化性能が低くなる可能性があるため、既定ではスタック アンサンブルは無効になっています。 必要に応じて、AutoML 構成でこのアンサンブルを有効にすることができます。
AutoML でのデータの使用方法
AutoML では、時系列データを "ワイド" 表形式で受け入れます。 各変数には、それに対応する独自の列がある必要があります。 AutoML では、予測問題の場合、時間軸となる列が 1 つ必要です。 この列は、datetime 型に解析できる必要があります。 最も単純な時系列データ セットは、時間列と数値のターゲット列で構成されます。 ターゲットは、将来予測を行おうとしている変数です。 次の表は、この形式の値の例を示しています。
timestamp | 数量 |
---|---|
2012-01-01 | 100 |
2012-01-02 | 97 |
2012-01-03 | 106 |
... | ... |
2013-12-31 | 347 |
より複雑なケースでは、データセットに時間インデックスと一致する他の列が含まれる場合があります。
timestamp | SKU | price | アドバタイズ済み | 数量 |
---|---|---|---|---|
2012-01-01 | JUICE1 | 3.5 | 0 | 100 |
2012-01-01 | BREAD3 | 5.76 | 0 | 47 |
2012-01-02 | JUICE1 | 3.5 | 0 | 97 |
2012-01-02 | BREAD3 | 5.5 | 1 | 68 |
... | ... | ... | ... | ... |
2013-12-31 | JUICE1 | 3.75 | 0 | 347 |
この 2 番目の例には、タイムスタンプとターゲット数量のほかに、SKU、小売価格、アイテムがアドバタイズされたかどうかを示すフラグもあります。 この 2 番目のデータセットによって、JUICE1 SKU と BREAD3 SKU の 2 つのシリーズがあることがわかります。 SKU 列は、時系列 ID 列となります。この列の値でグループ化することで、それぞれが 1 つのデータ系列を含む 2 つのグループが生成されるためです。 モデルをスイープする前に、AutoML によって入力構成とデータの基本的な検証が行われ、エンジニアリングされた特徴が追加されます。
データの長さの要件
予測モデルをトレーニングするには、十分な量の履歴データが必要です。 このしきい値の数量は、トレーニングの構成によって異なります。 検証データを指定する場合、時系列ごとに必要なトレーニング観測の最小数は、次のように求めます。
$T_{\text{user validation}} = H + \text{max}(l_{\text{max}}, s_{\text{window}}) + 1$
この式で、$H$ は予測期間、$l_{\text{max}}$ は最大ラグ順序、$s_{\text{window}}$ はローリング特徴量のウィンドウ サイズです。 クロス検証を使用する場合、観測値の最小数は次のように求めます。
$T_{\text{CV}} = 2H + (n_{\text{CV}} - 1) n_{\text{step}} + \text{max}(l_{\text{max}}, s_{\text{window}}) + 1$
こちらのバージョンでは、$n_{\text{CV}}$ はクロス検証フォールドの数、$n_{\text{step}}$ は CV ステップ サイズ、つまり CV フォールド間のオフセットです。 これらの数式の背後にある基本的なロジックは、時系列ごとに少なくとも 1 つのトレーニング監視期間を常に持つ必要があるということです。これには、ラグやクロス検証分割のためのパディングが含まれます。 予測のクロス検証の詳細については、「AutoML のモデル選択」を参照してください。
欠落しているデータの処理
AutoML の時系列モデルでは、一定の間隔を置いた定期的な観測が必要です。これには、月単位や年単位の観測などが含まれ、観測間隔の日数は異なっていてもかまいません。 モデリング プロセスを開始する前に、AutoML でデータ系列に欠損値がないこと、"および" 観測値が一定間隔であることを確認する必要があります。 つまり、欠損データには次の 2 つのケースがあります。
- 表形式データの一部のセルに値がない。
- 時系列の頻度に応じて想定される観測値に対応する "行" がない。
最初のケースでは、AutoML は一般的な構成可能な手法を使用して欠損値を補完します。 次の表は、想定される行が欠損している例を示しています。
timestamp | 数量 |
---|---|
2012-01-01 | 100 |
2012-01-03 | 106 |
2012-01-04 | 103 |
... | ... |
2013-12-31 | 347 |
このデータ系列は一見、日次の頻度に見えますが、2012 年 1 月 2 日 (2012-01-02) の観測値がありません。 この場合、AutoML はこの欠損値のために新しい行を追加してデータを補完しようと試みます。 その結果、quantity
列の新しい値と、データ内の他の列は、他の欠損値と同様に補完されます。 このプロセスを実行するには、このケースで見られるとおり、AutoML でデータ系列の頻度を認識して観測値の欠落を埋められるようにする必要があります。 この頻度は AutoML によって自動的に検出されますが、必要に応じて、ユーザーが構成で指定することもできます。
欠損値を埋める補完方法は、入力で構成できます。 次の表に既定の方法を挙げています。
列の種類 | 既定の補完メソッド |
---|---|
移行先 | 前方埋め込み (最後の観測を繰り越す) |
数値特徴量 | 中央値 |
カテゴリ特徴量の欠損値は、欠損値に対応する別のカテゴリを含めることで、数値エンコード中に処理されます。 この場合、補完は暗黙的です。
自動化された特徴エンジニア リング
モデリングの精度を向上させるために、通常は AutoML によってユーザー データに新しい列が追加されます。 エンジニアリングされた特徴量には、既定の項目またはオプションの項目を含めることができます。
エンジニアリングされた特徴量 (既定):
- 時間インデックスから抽出するカレンダー特徴量 (曜日など)
- 時系列 ID から派生したカテゴリ特徴量
- 数値型へのカテゴリ型のエンコード
エンジニアリングされた特徴量 (オプション):
- 特定の地域に関連付けられている祝日に関するインジケーター特徴量
- ターゲット数量のラグ
- 特徴列のラグ
- ターゲット数量のローリング ウィンドウの集計 (ローリング平均など)
- 季節性分解 ((Loess (STL) を使用した季節成分とトレンド成分の分解)
特徴量化は、ForecastingJob クラスを使用した AutoML SDK で、または Azure Machine Learning スタジオの Web インターフェイスから構成できます。
非定常な時系列の検出と処理
時間の経過に伴って平均と分散が変化する時系列を非定常といいます。 確率的傾向を示す時系列は、本質的に非定常です。
次の画像は、このシナリオを可視化したものです。 グラフには、ほぼ上昇傾向にあるデータ系列が描画されています。 データ系列の前半と後半の平均値を計算して比較すれば、その違いを把握できます。 プロットの前半のデータ系列の平均は、後半の平均よりも小さくなっています。 データ系列の平均が、レビューする時間間隔に依存するという事実は、時変モーメントの一例です。 このシナリオで、データ系列の平均は最初のモーメントです。
次の画像は、一階差分の $\Delta y_{t} = y_t - y_{t-1}$ をとって元のデータ系列を描画したグラフを示しています。 この系列の平均は時間範囲でほぼ一定ですが、分散は変化しているように見えます。 このシナリオでは、一次定常時系列の例が示されています。
AutoML の回帰モデルでは、本質的に、確率的傾向や、非定常時系列に関連する他の既知の問題に対処することはできません。 そのため、そのような傾向がある場合にはサンプル外の予測精度が低くなることがあります。
AutoML では、時系列データセットが自動的に分析され、そのレベル (定常性) が判別されます。 非定常時系列が検出されると、AutoML で自動的に差分変換が適用され、非定常の動作の影響を軽減します。
モデルのスイープ
欠損データの処理と特徴量エンジニアリングを使用してデータが準備されると、AutoML はモデル推奨サービスを使用して一連のモデルとハイパーパラメーターをスイープします。
モデルは検証またはクロス検証のメトリックに基づいてランク付けされ、任意で、上位のモデルをアンサンブル モデルで使用できます。 最適なモデルまたはトレーニング済みモデルのいずれかを検査、ダウンロード、またはデプロイして、必要に応じて予測を生成できます。 詳細については、「AutoML での予測のためのモデルのスイープと選択」を参照してください。
モデルのグループ化
データセットに複数の時系列が含まれる場合、データをモデル化する方法は複数あります。 時系列 ID 列のデータでグループ化し、データ系列ごとに独立したモデルをトレーニングすることができます。 より一般的な方法は、データをそれぞれ複数の (関連性の高い) データ系列を含むグループにパーティション分割し、グループごとにモデルをトレーニングすることです。
AutoML 予測でのモデルのグループ化には、既定で混合アプローチが使用されます。 時系列モデル (および ARIMAX と Prophet) では、1 つのグループに 1 つの系列が割り当てられ、他の回帰モデルではすべての系列が 1 つのグループに割り当てられます。
以下は各モデル タイプでのグループの使用状況を示しています。
別個のグループの各データ系列 (1:1): Naive、Seasonal Naive、Average、Seasonal Average、Exponential Smoothing、ARIMA、ARIMAX、Prophet
同じグループの全データ系列 (N:1): Linear SGD、LARS LASSO、Elastic Net、K Nearest Neighbors、Decision Tree、Random Forest、Extremely Randomized Trees、Gradient Boosted Trees、LightGBM、XGBoost、TCNForecaster
AutoML の多くのモデル ソリューションを使用することで、より汎用性の高いモデルのグループ化が可能になります。 詳細については、「多くのモデル - 自動 ML ノートブック」を参照してください。