Amazon Web Services ブログ

追加学習なしの zero-shot で高精度な時系列予測 : Chronos-Bolt を AutoGluon で利用する

このブログはFast and accurate zero-shot forecasting with Chronos-Bolt and AutoGluon を翻訳したものです。

Chronos-Bolt は AutoGluon-TimeSeries の最新追加機能であり、元の Chronos [1]モデルと比較して最大 250 倍高速に追加学習なしで高精度な予測を実現します。

時系列予測は、小売、エネルギー、金融、ヘルスケアなどの産業全体で重要なビジネス決定を導く上で極めて重要な役割を果たしています。従来、予測は ETS や ARIMA などの統計モデル [2] に依存してきました。これらのモデルは、特にトレーニングデータが限られている場合に、今でも強力なベースラインとなっています。過去10年間で、深層学習の進歩により、DeepAR [3] や PatchTST [4] などのいわゆるグローバルモデルへのシフトが促進されました。これらのアプローチは、データセット内の複数の時系列データで横断的に単一の深層学習モデルをトレーニングします。例えば、幅広い e コマースカタログの売上や、何千もの顧客の観測可能な指標などが対象です。

Chronos [1] のような基盤モデルは、さまざまなドメインの時系列データを利用して単一のモデルを学習させるというアイデアをさらに大きく前進させました。これらのモデルは、膨大な時系列データで事前学習されています。学習データには実際のデータと合成データが含まれ、様々な分野、頻度、時系列の長さをカバーしています。その結果、追加学習なしの予測が可能となり、未知の時系列データセットに対しても正確な予測を提供します。時系列予測に取り組むハードルが低くなり、追加の学習なしで正確な予測が可能になるため、予測プロセス全体が大幅に簡素化されます。Chronos の各種モデルは、Hugging Face から 1 億 2000 万回以上ダウンロードされており、Amazon SageMaker AIAutoGluon-TimeSeries から利用できます。また、Chronos-T5Amazon SageMaker JumpStart を通じて利用できます。

Chronos-Bolt の紹介

Chronos-Bolt は T5 エンコーダー-デコーダーアーキテクチャ [5] に基づいており、約 1000 億個のデータポイントで学習されています。このモデルは、過去の時系列データを複数のデータポイントからなるパッチに分割し、それをエンコーダーに入力します。デコーダーはこれらの特徴表現を使用して、複数の将来時点の予測値を一度に生成します。この手法は「直接マルチステップ予測」として知られています。これは、自己回帰的なデコーディングを行う(将来の予測を1ステップずつ順次生成する)元の Chronos モデルとは異なるアプローチです。時系列データの分割と直接マルチステップ予測により、Chronos-Bolt は元のChronos モデルと比較して最大 250 倍高速で、20 倍のメモリ効率を実現しています。
以下のグラフは、512 個のデータポイントを入力として使用し、64 ステップ先までを予測する 1024 の時系列に対する、Chronos-Bolt と元の Chronos モデルの推論時間を比較しています。

Chronos-Bolt は、元の Chronos と比較して大幅に高速であるだけでなく、より高精度です。以下のグラフは、27 のデータセットにわたって集計された Chronos-Bolt の確率的予測および点予測の性能を、加重分位数損失 (Weighted Quantile Loss: WQL、予測の確率分布における分位点の精度) と平均絶対スケール誤差 (Mean Absolute Scaled Error: MASE、予測値の精度を測る指標) の観点から示しています。 (データセットの詳細については [1] を参照) 。注目すべきは、これらのデータセットを学習に使用していないにもかかわらず、追加学習をしていない Chronos-Bolt が、これらのデータセットで学習された一般的な統計モデルや深層学習モデル (*で強調表示) を上回る性能を示していることです。さらに、他の基盤モデルよりも優れた性能を発揮しています。これらの + で示されている基盤モデルは、我々のベンチマークで使用される一部のデータセットで事前学習されているため、厳密には追加学習なしのモデルとは異なります。特筆すべきは、Chronos-Bolt(Base) が予測精度の面で元の Chronos(Large) モデルを上回りながら、600 倍以上高速であることです。

Chronos-Bolt は現在、Hugging Face で4つのサイズ — Tiny(9M)、Mini(21M)、Small(48M)、Base(205M)—で利用可能であり、CPU でも使用できます。

ソリューションの概要

この記事では、AutoGluon-TimeSeries の使い慣れたインターフェースを使用して Chronos-Bolt を利用する方法を紹介します。AutoGluon-TimeSeries を使用することで、SageMaker のユーザーは時系列予測のためのモデルを構築およびデプロイできます。これには、Chronos-Bolt などの 基盤モデルや他のグローバルモデルが含まれ、さらに統計モデルと容易にアンサンブルして精度を最大化することができます。

Chronos-Bolt で追加学習なしの予測実行

本ブログでは Amazon SageMaker Studio Notebook 上で Chronos-Bolt を使って追加学習なしでの予測を実行する方法をご紹介します。
始めるには、Amazon SageMaker Studio Notebook またはターミナルで以下のコマンドを実行して、AutoGluon v1.2 をインストールする必要があります :

pip install autogluon.timeseries~=1.2.0

AutoGluon-TimeSeries は、時系列データセットを扱うために TimeSeriesDataFrame を使用します。TimeSeriesDataFrame は、縦型データ形式のデータフレームを想定しており、少なくとも以下の 3 つの列が必要です:データセット内の個々の時系列の ID を示す ID 列、タイムスタンプ列、そして生の時系列値を含むターゲット列です。タイムスタンプは均等な間隔で配置されている必要があり、欠損値は NaN で表されます。Chronos-Bolt はこれらを適切に処理します。以下のコードスニペットは、オーストラリアの 5 つの州の 30 分間隔の電力需要データを含むオーストラリア電力データセット [6] を TimeSeriesDataFrame にロードします :

from autogluon.timeseries import TimeSeriesDataFrame, TimeSeriesPredictor
 
train_data = TimeSeriesDataFrame.from_path( 
     "https://autogluon.s3.amazonaws.com/datasets/timeseries/australian_electricity_subset/train.csv", 
     id_column="item_id", 
     timestamp_column="timestamp", 
)

次のステップは、このデータを TimeSeriesPredictor でフィッティングします :

predictor = TimeSeriesPredictor(prediction_length=48).fit(train_data, presets="bolt_base")

ここでは、TimeSeriesPredictor が次の 48 ステップ(この場合は 1 日分)の予測を生成するよう指定しています。AutoGluon-TimeSeries は、予測モデルの構築時に使用できるさまざまなプリセットを提供しています。この例で使用されている bolt_base プリセットは、追加学習なしの予測のために Chronos-BoltのBase(205M)モデルバリアントを採用しています。追加学習なしの予測ではモデルの学習が不要なため、fit() の呼び出しはほぼ瞬時に完了します。これで予測モデルは追加学習なしの予測を生成する準備が整い、predict メソッドを使用して実行できます。

predictions = predictor.predict(train_data)

AutoGluon-TimeSeriesは、ターゲット値に対して点予測と確率的予測(分位数予測)の両方を生成します。確率的予測は予測値の不確実性の範囲を示しており、多くの計画立案において重要な役割を果たします。

予測結果を視覚化し、予測期間にわたって実際のターゲット値と比較することもできます :

test_data = TimeSeriesDataFrame.from_path( 
     "https://autogluon.s3.amazonaws.com/datasets/timeseries/australian_electricity_subset/test.csv", 
     id_column="item_id", 
     timestamp_column="timestamp", )

predictor.plot(test_data,predictions,max_history_length=200,item_ids=["T000002"])

Chronos-Bolt は追加学習なしで高精度の予測を生成します。以下のグラフは、点予測と 80% 信頼区間を示しています。

AutoGluon の Chronos-Bolt でファインチューニング

これまで、追加学習をさせずに zero-shot で予測を実行する推論専用のモードで Chronos-Bolt を使用してきました。しかし、AutoGluon-TimeSeries を使用すると、特定のデータセットに対して Chronos-Bolt をファインチューニングすることもできます。ファインチューニングには g5.2xlarge などの GPU インスタンスの使用をお勧めします。以下のコードスニペットでは、Chronos-Bolt(Small、48M) モデルに対して 2 つの設定を指定しています : 追加学習なしの zero-shot とファインチューニングです。AutoGluon-TimeSeries は、提供されたトレーニングデータを使用して、事前学習済みモデルの軽量なファインチューニングを実行します。モデルの追加学習なしバージョンとファインチューニング済みバージョンを識別するために、名前に接尾辞を追加します。

predictor = TimeSeriesPredictor(prediction_length=48, eval_metric="MASE").fit( 
     train_data, 
     hyperparameters={ 
         "Chronos": [ 
             {"model_path": "bolt_small", "ag_args": {"name_suffix": "ZeroShot"}}, 
             {"model_path": "bolt_small", "fine_tune": True, "ag_args": {"name_suffix": "FineTuned"}}, 
         ] 
     }, 
     enable_ensemble=False, 
     time_limit=600, 
)

予測モデルは、time_limit で指定された最大 10 分間フィッティングされます。フィッティングが完了した後、テストデータに対して 2 つのモデルバリアントを評価し、リーダーボードを生成します :

predictor.leaderboard(test_data)

ファインチューニングの結果、テストデータにおける MASE の値が示すように、予測精度が大幅に向上しました。AutoGluon-TimeSeries のすべてのモデルは、評価指標の値が大きいほど性能が良いという形式で結果を表示します。つまり、MASE のような多くの予測誤差指標は、表示時に -1 を乗じて変換されます。

外部情報を用いた Chronos-Bolt の拡張

Chronos-Bolt は単変量モデルであり、予測を行う際に対象となる時系列の過去データのみを使用します。しかし、実際のシナリオでは、対象となる時系列に関連する追加の外部情報(休日やプロモーションなど)が利用可能なことがよくあります。予測時にこれらの情報を使用することで、予測精度を向上させることができます。AutoGluon-TimeSeries には共変量回帰(外部特徴量を用いた回帰)モデルが実装されており、これを Chronos-Bolt のような単変量モデルと組み合わせることで予測に外部情報を活用できます。AutoGluon-TimeSeries の共変量回帰モデルは、各時点のターゲット列を予測するために、利用可能な外部特徴量とその他の固定的な特徴量を使用する表形式データの回帰モデルです。この回帰モデルによる予測値はターゲット列から差し引かれ、その残差を単変量モデルが予測します。

Chronos-Bolt と共変量回帰モデルの組み合わせ方を示すために、食料品の販売データセットを使用します。このデータセットには、scaled_pricepromotion_emailpromotion_homepage という 3 つの外部特徴量が含まれており、unit_sales の予測を行います:

train_data = TimeSeriesDataFrame.from_path(
    "https://autogluon.s3.amazonaws.com/datasets/timeseries/grocery_sales/train.csv",
    id_column="item_id",
    timestamp_column="timestamp",
)

以下のコードは、今後 7 週間 unit_sales を予測するために TimeSeriesPredictor を設定します。TimeSeriesPredictor の構築時に、予測対象とするターゲット列と利用可能な外部特徴量の名前を指定しています。Chronos-Bolt に対して 2 つの設定を定義しています : 1 つ目は外部特徴量を考慮せず、unit_sales の過去の時系列データのみを使用する追加学習なしの設定、2 つ目は外部特徴量を活用する設定で、CatBoost モデルを covariate_regressor として使用します。また、target_scaler も使用しており、これにより時系列データは学習前に比較可能なスケールに調整され、通常より高い精度が得られます。

predictor = TimeSeriesPredictor(
    prediction_length=7,
    eval_metric="MASE",
    target="unit_sales",
    known_covariates_names=["scaled_price", "promotion_email", "promotion_homepage"],
).fit(
    train_data,
    hyperparameters={
        "Chronos": [
            {"model_path": "bolt_small", "ag_args": {"name_suffix": "ZeroShot"}},
            {
                "model_path": "bolt_small",
                "covariate_regressor": "CAT",
                "target_scaler": "standard",
                "ag_args": {"name_suffix": "WithRegressor"},
            },
        ],
    },
    time_limit=600,
    enable_ensemble=False,
)

予測モデルの学習後、テストデータセットで評価を行い、リーダーボードを生成することができます。共変量回帰モデルと Chronos-Bolt を組み合わせることで、外部特徴量を使用しない場合と比べて予測性能が大幅に向上します。

test_data = TimeSeriesDataFrame.from_path(
    "https://autogluon.s3.amazonaws.com/datasets/timeseries/grocery_sales/test.csv",
    id_column="item_id",
    timestamp_column="timestamp",
)
predictor.leaderboard(test_data)

ただし、外部特徴量が常に有効とは限りません。データセットによっては、追加学習なしのモデルの方が高い精度を示す場合もあります。そのため、複数のモデルを試し、検証用データで最も予測精度が高いモデルを選択することが重要です。

結論

Chronos-Bolt を使用することで、実務者は追加学習なしで高品質な予測を素早く生成できます。AutoGluon-TimeSeries は、Chronos-Bolt の簡単なファインチューニング、共変量回帰モデルとの統合、そして様々な予測モデルとのアンサンブルを可能にすることで、この機能をさらに強化します。上級ユーザー向けには、この記事で紹介した以上に予測モデルをカスタマイズできる包括的な機能セットを提供しています。AutoGluon の予測モデルは、AutoGluon-Cloud と公式の Deep Learning Containers を使用して SageMaker に簡単にデプロイできます。
AutoGluon-TimeSeries を使用した正確で堅牢な予測モデルの構築について詳しく学ぶには、チュートリアルをご覧ください。X(旧 Twitter ) で AutoGluon をフォローし、GitHub でスターを付けることで、最新情報を入手できます!

参考文献

[1] Ansari, Abdul Fatir, Lorenzo Stella, Ali Caner Turkmen, Xiyuan Zhang, Pedro Mercado, Huibin Shen, Oleksandr Shchur, et al. “Chronos: Learning the language of time series.” Transactions on Machine Learning Research (2024).
[2] Hyndman, R. J., and G. Athanasopoulos. “Forecasting: principles and practice 3rd Ed.” O Texts (2018).
[3] Salinas, David, Valentin Flunkert, Jan Gasthaus, and Tim Januschowski. “DeepAR: Probabilistic forecasting with autoregressive recurrent networks.” International Journal of Forecasting 36, no. 3 (2020): 1181-1191.
[4] Nie, Yuqi, Nam H. Nguyen, Phanwadee Sinthong, and Jayant Kalagnanam. “A time series is worth 64 words: long-term forecasting with transformers.” In The Eleventh International Conference on Learning Representations (2023).
[5] Raffel, Colin, Noam Shazeer, Adam Roberts, Katherine Lee, Sharan Narang, Michael Matena, Yanqi Zhou, Wei Li, and Peter J. Liu. “Exploring the limits of transfer learning with a unified text-to-text transformer.” Journal of Machine Learning Research 21, no. 140 (2020): 1-67.
[6] Godahewa, Rakshitha, Christoph Bergmeir, Geoffrey I. Webb, Rob J. Hyndman, and Pablo Montero-Manso. “Monash time series forecasting archive.” In NeurIPS Track on Datasets and Benchmarks (2021).


著者について

Abdul Fatir Ansariは、Amazon Web Servicesのシニアアプライドサイエンティストとして、機械学習と予測分析に特化し、時系列などの構造化データのための基盤モデルを専門としています。シンガポール国立大学で博士号を取得し、画像と時系列データのための深層生成モデルを研究しました。

 

 

Caner Turkmenは、Amazon Web Servicesのシニアアプライドサイエンティストとして、機械学習と予測分析が交差する研究課題に取り組んでいます。AWSに参画する前は、金融サービスと通信部門を担当するデータサイエンティストとして経営コンサルティング業界で働いていました。イスタンブールのボアジチ大学でコンピュータ工学の博士号を取得しています。

 

Oleksandr Shchurは、Amazon Web Servicesのシニアアプライドサイエンティストとして、AutoGluonにおける時系列予測に取り組んでいます。AWSに参画する前は、ドイツのミュンヘン工科大学で機械学習の博士号を取得し、イベントデータの確率モデルに関する研究を行いました。時系列データの機械学習と生成モデリングを研究分野としています。

 

Lorenzo Stellaは、Amazon Web Servicesのシニアアプライドサイエンティストとして、分析と意思決定のための機械学習、予測分析、生成AIに取り組んでいます。イタリアのIMTLuccaとベルギーのKUルーヴェン大学でコンピュータサイエンスと電気工学の博士号を取得し、機械学習と最適制御応用のための数値最適化アルゴリズムを研究しました。