Amazon Forecastのサンプルを動かして時系列予測してみた
re:Invent 2018で発表されたAmazon Forecastが、先日ついにGAされました!
Amazon Forecastについては、弊社ブログで何度か取り上げられています。こちらも御覧ください。
- データ資産を活用しビジネスを加速させるAI -Amazon Forecast- | DevelopersIO
- [速報] 時系列予測サービスAmazon Forecastが発表されました #reinvent | DevelopersIO
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を利用することで、簡単に時系列予測ができました。
どんなユースケースがあうのかはまだあまり理解できていないので、これからいろいろ試してみたいと思います。