こんにちは、データテクノロジーセンターの黒木です。

機械学習に興味があるものの、ハードルが高そうでなかなか手がつけられなかったのですが、機械学習を自動でしてくれるツールがあるということを知りました。

ということで、今回はAutoGluonのサイトにて紹介されている時系列予測のチュートリアルを実施してみましたので実施時の注意点などを紹介していきます。

AutoGluonとは

AutoGluonとはAWSが提供しているAutoML(自動機械学習)のためのツールです。

データさえあれば、複雑なパラメータの設定やモデルの選定等を行うことなく機械学習を行うことができます。(チュートリアルではデータセットも用意してありました)

機械学習にも様々ありますが、今回はその中でも時間経過による変化を予測する時系列予測を行いました。

概要

AutoGluonのサイトにある”Forecasting Time Series – Quick Start”のチュートリアルでCovid-19の罹患者予測モデルを作成しました。

また、今回はGoogle Colaboratoryを使用してPythonを記述することで環境構築などの作業を省略しています。

実行したチュートリアル自体はAutoGluonのサイトにありますので、この記事ではチュートリアル実施時の注意点や補足を記載しています。

実行時の注意/補足

モジュールのインストール

Google ColaboratoryにAutoGulonをインストールする際ですが、Jupyter Notebookと同様に先頭に”!”を付ければ問題なくインストールできます。

また、autogluon.timeseriesは、Apache MXNetに依存しているとのことですのでこちらもバージョンを指定の上インストールしておきましょう。

!pip install autogluon
!pip install mxnet>=1.9

データの読み込み

チュートリアルではcsvファイルをDataFrameとして読み込んだ後で時系列予測用にTimeSeriesDataFrameに変換しています。この変換のステップで時系列となるカラムを指定してあげます。

command: flask run --host 0.0.0.0 --port 80
df = pd.read_csv(
"https://autogluon.s3-us-west-2.amazonaws.com/datasets/CovidTimeSeries/train.csv", parse_dates=["Date"],
)
 
train_data = TimeSeriesDataFrame.from_data_frame(
df, id_column="name",
timestamp_column="Date", )

なお、TimeSeriesDataFrameはDataFrameを継承しているため変換後でもデータの加工などはDataFrameと同じ感覚でできそうです。

データの分割

読み込んだデータからテストデータと訓練用データを作成する際にprediction_lengthという変数を指定しています。

prediction_length = 5
test_data = train_data.copy() # the full data set
# the data set with the last prediction_length time steps included, i.e., akin to `a[:-5]`
train_data = train_data.slice_by_timestep(slice(None, -prediction_length))

これが何を指すのかわかりづらかったのですが、どうやらモデルの検証を行う際の幅を決めているようです。

チュートリアルではprediction_lengthを5に指定していますがその場合、データの末尾5日分を予測してモデルの検証を行っています。

テストデータからprediction_length分だけ切り落としたデータが訓練用データになっていました。

モデルの作成

モデル作成時には作成した複数のモデルから指標とした値が良いものをランク付けしてくれるようになっています。チュートリアルでは指標はMAPEになっています。

predictor = TimeSeriesPredictor(
path="autogluon-covidforecast",
target="ConfirmedCases",
prediction_length=prediction_length,
eval_metric="MAPE",
)

使用できる評価指標は以下の通りです。

  • mean_wQuantileLoss
  • quantile_levels
  • MAPE
  • sMAPE
  • MASE
  • MSE
  • RMSE

また、モデルをフィットさせる際にそのクオリティを引数”presets”で指定することができ、”high_quality”や”low_quality”等でフィッティングの精度を指定できます。

predictor.fit( train_data=train_data, presets="low_quality", )

精度とフィッティングの時間はトレードオフの関係のため、状況によって選ぶと良いかと思いますが、チュートリアルでとりあえず動かしてみたいという場合は”low_quality”で問題ありません。

選択できるpresetsの一覧は以下になります。

  • best_quality
  • high_quality
  • good_quality
  • medium_quality
  • low_quality
  • low_quality_hpo

ちなみに、引数time_limitでフィッティングの時間(秒数)を制限することもできます。

まとめ

簡単にではありますが、AutoGluonの時系列予測チュートリアルを行う際のポイントをまとめてみました。

機械学習やAutoGluonを始めてみようという方の参考になれば幸いです。