この記事では、時系列データの準備や予測モデルの構築のために Azure Machine Learning の AutoML で使用される手法について説明します。
学習内容:
- AutoML で時系列モデルと回帰モデルを使用して予測する方法
- AutoML がデータから機能を準備およびエンジニアする方法
- 使用できる予測モデルと使用するタイミング
AutoML で予測モデルをトレーニングする手順と例については、「時系列予測用に AutoML を設定する」を参照してください。
AutoML の予測手法
AutoML では、複数の方法を使用して時系列値を予測します。 これらのメソッドは、次の 2 つのカテゴリに割り当てることができます。
- ターゲット数量の履歴値を使用して将来の予測を行う時系列モデル
- 予測変数を使用してターゲットの値を予測する回帰 (説明) モデル
次の手順: これらの方法を理解したら、 予測ジョブを構成 する方法、または AutoML が最適なモデルを選択する方法を調べる方法について説明します。
例えば、食料品店の特定ブランドのオレンジ ジュースの毎日の需要を予測する必要がある場合を考えてみましょう。 式では、$t$ 日におけるこのブランドの需要を $y_t$ とします。 時系列モデルでは、次の式により過去の需要の関数を使用した、$t+1$ での需要を予測します。
$y_{t+1} = f(y_t, y_{t-1}, \ldots, y_{t-s})$
関数 $f$ には、多くの場合、過去に観測された需要を使用して調整するパラメーターが含まれます。 $f$ が予測に使用する過去の量 ($s$) は、モデルのパラメーターと見なすこともできます。
オレンジジュースの需要の例では、時系列モデルに過去の需要に関する情報のみが使用されるため、精度が十分でない可能性があります。 その他の多くの要因は、価格、曜日、休日など、将来の需要に影響を与える可能性があります。 次の式で、これらの予測変数を使用する回帰モデルについて考えてみましょう。
$y = g(\text{価格}, \text{曜日}, \text{休日})$
繰り返しになりますが、関数 $g$ には通常、正則化を制御する値を含む一連のパラメーターがあります。これらは、過去の需要の値と予測因子を使用して AutoML によって調整されます。 式から $t$ を省いて、回帰モデルが "同時に" 定義された変数間の相関パターンを使用して予測を行っていることを強調します。 $g$ から $y_{t+1}$ を予測するには、$t+1$ が何曜日に当たるか、祝日かどうか、$t +1$ 日のオレンジ ジュースの価格はいくらかを知る必要があります。 最初の 2 つの情報は、カレンダーを使えば簡単に特定できます。 小売価格は通常、事前に設定されているため、オレンジ ジュースの価格もおそらく前日にはわかります。 ただし、10 日先の価格はわからない場合があります。 この回帰の有用性は、どのくらい先の予測が必要か (予測期間ともいう) と、予測因子の将来の値がどの程度わかっているかによって制限されることを理解することが重要です。
重要
AutoML の予測回帰モデルでは、少なくとも予測期間まで、提供するすべての特徴が将来に認識されることを前提としています。
AutoML の予測回帰モデルを拡張して、ターゲットと予測変数の履歴値を使用することもできます。 結果は、時系列モデルと純粋回帰モデルの特性を持つハイブリッド モデルになります。 過去の数量は、回帰における追加の予測変数であり、ラグ数量と呼びます。 ラグの "順序" は、値がどれだけ遡ってわかっているかを示します。 たとえば、オレンジ ジュースの需要の例の場合、ターゲットの順序が 2 のラグの現在値は、2 日前に観測されたジュースの需要です。
時系列モデルと回帰モデルのもう 1 つの注目すべき違いは、予測を生成する方法です。 再帰関係では、一般に、一度に 1 つずつ予測を生成する時系列モデルが定義されます。 将来の多くの期間を予測するために、予測期間まで反復し、以前の予測をモデルに戻して、必要に応じて次の 1 期間先の予測を生成します。 対照的に、回帰モデルは、全予測期間の "すべての" 予測を一度に生成する、直接予測器といえます。 再帰モデルは、以前の予測をモデルにフィードバックするときに予測エラーが増すため、直接予測モデルの方が再帰的手法よりも望ましい場合があります。 ラグ特徴量が含まれている場合、回帰モデルが直接予測器として機能できるように、AutoML ではいくつかの重要な変更がトレーニング データに加えられます。 詳細については、「AutoML における時系列予測のラグ特徴量」を参照してください。
AutoML でのモデルの予測
Azure Machine Learning の AutoML では、次の予測モデルが実装されています。 各カテゴリで、モデルは組み込むことができるパターンの複雑さ (モデル容量ともいう) の順で大まかに一覧表示されています。 最後に観測された値を単純に予測する Naive モデルが低容量なのに対し、何百万ものチューニング可能なパラメーターを持つディープ ニューラル ネットワーク (DNN) である Temporal Convolutional Network (TCNForecaster) は大容量です。
ディープ ラーニング モデルの詳細については、以下をご覧ください。 複雑な時系列パターンを使用している場合は、 AutoML での予測に関するディープ ラーニング モデル (DNN) を参照してください。
AutoML には、精度をさらに向上させるために、重み付けを行った、パフォーマンスの高い複数のモデルを組み合わせるアンサンブル モデルも含まれています。 予測には、カルアナ アンサンブル選択アルゴリズムを使用して構成と重みが見つかるソフト 投票アンサンブルを使用します。
注
予測モデルのアンサンブルには、次の 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 | 価格 | アドバタイズ済み | 数量 |
|---|---|---|---|---|
| 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 は系列値が不足せず 、 観測値が通常であることを確認します。
AutoML は、次の 2 種類の不足データを処理します。
- 不足しているセルの値: 表形式データの一部のセルに値がありません
- 不足している行: 時系列の頻度を指定すると、予期される観測値に対応する行がありません
AutoML は、両方の種類の不足データを自動的に検出して補完します。
最初のケースでは、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 は、数値エンコード時に欠損値に対応する別のカテゴリを含めることで、カテゴリ特徴の欠損値を処理します。 この場合、補完は暗黙的です。
自動化された特徴エンジニア リング
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 ノートブック」を参照してください。