Amazon Forecastのサンプルを動かして時系列予測してみた

re:Invent 2018で発表されたAmazon Forecastが、先日ついにGAされました! Amazon Forecastがどんなものなのか確かめてみるため、AWSのGA発表ブログの中で言及されているサンプルをやってみました。
2019.08.31

この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。

re:Invent 2018で発表されたAmazon Forecastが、先日ついにGAされました!

Amazon Forecastについては、弊社ブログで何度か取り上げられています。こちらも御覧ください。

AWSのGA発表ブログの中で言及されているサンプルを動かしてみて、Amazon Forecastがどんなものなのか確かめていきたいと思います。

CloudFormationでSageMaker(Jupyter)を構築する

まずはCloudFormationでAmazon Forecast構築のためのSageMaker(Jupyter)を構築します。

先ほどリンクしたGitHubのサンプルページに記載されているLaunchStackをクリックして、CloudFormationのスタック作成ページに飛びます。

特に変更する必要はないので、次へ進みます。

BucketName は、S3バケット名の重複が許されていないので、適当なバケット名に変更します。

特に変更する必要はないので、次へ進みます。

最後は確認画面になるので、特に問題なければIAMリソースが作成される場合があることを承認して、スタックを作成します。

CloudFormationのスタック作成が完了すると、SageMakerが作られているので、ここからJupyterを開きます。 これ移行の作業は、Jupyter上でPythonのSDKを利用して進めていきます。

Amazon Forecastで使用するデータを準備する

Amazon Forecastで時系列予測をするためのデータを準備します。

Jupyter上で notebooks フォルダを開いて、 1.Getting_Data_Ready.ipynb を開きます。

後は、Jupyter Notebookに記載されているとおり、順番に実行していきます。

pandas やら何やらをいろいろインポートして、pandasを利用してCSVデータを読み込みます。

読み込んだデータを 2014/01/01〜2014/10/31 のデータと、 2014/10/31〜2014/12/01 のデータに分けます。

これはのちほど 2014/01/01〜2014/10/31 のデータを元に時系列予測をして、 2014/10/31〜2014/12/01 の実測値とForecastによる予測値を比較するために分割しています。

S3のバケット名は、CloudFormation作成時に指定していたバケット名に変更します。そして、2014/01/01〜2014/10/31 のデータをS3に保存しています。

ここまで終わると、S3に保存したデータのファイルが追加されていることが確認できます。

次にAmazon Forecastのデータセットグループを作成します。

ここででてくる project の値は、次のJupyter Notebookで使用しますのでメモしておいてください。

ここまでくると、コンソール画面でForecastのデータセットグループが作成されていることが確認できます。

データセットを作成した後、データセットグループに追加します。

ここまでくると、コンソール画面でForecastのデータセットが作成されていることが確認できます。

次にForecast用のIAMロールを作成します。

実行した後、コンソール画面を見るとIAMロールが作成されていることが確認できます。

次に、S3に保存したCSVデータをインポートするジョブを動かします。数分時間がかかるので、Activeになるまで待ちます。

コンソール画面でも、インポートジョブがActiveになっていることを確認できます。

最後に、データセットグループのArnを出力します。

このArnは次のJupyter Notebookで使用しますのでメモしておいてください。

時系列予測のためにPredictorを作成する

予測のためにPredictorを作成します。

Jupyter上で notebooks フォルダを開いて、 2.Building_Your_Predictor.ipynb を開きます。

プロジェクト名を、1つ前に実行したJupyter Notebookで定義していた名前と同じ名前に変更します。

データセットグループのArnを、1つ前に実行したJupyter Notebookで最後に出力していたArnに変更します。

Predictorを作成します。20分ほど時間がかかるので、Activeになるまで待ちます。

コンソール画面でも、PredictorがActiveになっていることを確認できます。

ここでいよいよForecastを作成します。20分ほど時間がかかるので、Activeになるまで待ちます。

コンソール画面でも、ForecastがActiveになっていることを確認できます。

最後に、ForecastのArnを出力します。

このArnは次のJupyter Notebookで使用しますのでメモしておいてください。

Forecastで時系列予測をやってみる

長かった準備が終わりました。 Forecastで時系列予測をやってみます。

Jupyter上で notebooks フォルダを開いて、 3.Evaluating_Your_Predictor.ipynb を開きます。

ForecastのArnを、1つ前に実行したJupyter Notebookで最後に出力していたArnに変更します。

Forecastを使って、予測値をロードします。

このままではよくわからないので、グラフにプロットしていきます。

2014/10/31 の実測値をCSVを読み込んでプロットします。

Forecastの予測値をプロットします。

実測値と予測値を合わせてプロットすると、予測値と大きく変わらず推移していることがわかりました。

終わりに

Amazon Forecastを利用することで、簡単に時系列予測ができました。

どんなユースケースがあうのかはまだあまり理解できていないので、これからいろいろ試してみたいと思います。