AmazonForecastでコロナ感染者予測

# はじめに
AmazonForecastを使ってコロナ感染者の予測をしてみました。

https://aws.amazon.com/jp/forecast/

※2021/01/12：時系列データの情報を追記しました。


# 準備

AI学習のデータ準備は簡単です。インプットデータを用意するだけです。

## インプットデータ

### ソースデータ

以下の厚生労働省のオープンデータをソースとします。
https://www.mhlw.go.jp/stf/covid-19/open-data.html

今回は陽性者数でやってみますので、これをダウンロードします。

### 加工

ダウンロードしたままだと、以下のようなカラム等になっています。
これだとうまくインポートできないので、加工します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/216765/e7157d3d-8f02-4208-62b3-c30e1cbeddec.png)

加工後がこちら。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/216765/6b85746e-6934-c5a1-e92a-2e3985b6dcbc.png)

変更点としては、
 - 行頭を、英字表記にした
 - 日付をyyyy-MM-dd表記にした
 - item_idとしてラベルをつけた

これぐらいです。
ポイントとしては、ラベルをつけたというところで、一つのデータで、複数のデータを保有することもできるので、必ずこのidは付与しましょう。（イメージとしては例えば、同ファイルで陽性者数と死者数をカウントしたいときは、item_idを分けて記載すると良いです。）

## アップロード

AmazonForecastはS3がデータソースとなりますので、任意バケットに格納しておきます。


# 学習実施

いよいよAmazonForecastにて学習させます。

大まかな流れは以下です。

 1. データセットグループ作成
 2. データセット定義及びインポート
 3. 学習
 4. 予測

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/216765/8ab69731-c81c-f987-b126-4d83ba36f51b.png)


## データセットグループ作成

まずは、データセットのグループを作成します。

これが学習のひとまとまりになりますので、今回はCovid19_Forecastとしました。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/216765/83ee974b-c59d-e142-5543-69f7aadc2b7e.png)

ドメインですが、今回は用意されているものには該当しませんでしたので”カスタム”としました。
(その他気になる方は調べてみてください。EC2とか面白そうでした。）

## データセット定義及びインポート

続いて、データセットをインポートしていきます。
流れとしては、まずはデータの構造体を定義した上でのインポートとなります。

今回は時系列データなので、”TARGET_TIME_SERIES”を選択し、項目を入力していきます。
名前はpcr_positiveとし、期間は１日ごと、そしてスキーマはビルダーを使ってしまいましょう。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/216765/0565b70c-0136-09cf-f08c-bcb51941574d.png)


ポイントは、上記のソースデータを作った時のカラム名を記載することです。
また、日付データで、Formatもyyyy-MM-ddで入力することを注意してください。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/216765/00393126-4336-9bdf-c21f-0001ed5f4ae9.png)

インポートについては、ファイルの名前や、タイムゾーン、IAMの設定をして終わりです。
（S3から情報を取得するので、これらを触れるロールが必要です。自動作成でも良いです。）

件数としては３００件ぐらいでしたが、体感10分ぐらいで終わりました。

(私はデータの日付形式が誤っていたりitem_id付与忘れとかでちょっとひっかかりました。）

## 学習

データのインポートが完了したら続いて学習を行います。

Trainを選択して項目を入力していきます。

私の場合は適当にTrain1とかして、ForecastHorizonは100としました。
インポートしたデータのどれぐらいの期間を訓練として利用するかですが、データ量の1/3がいいようで、
今回は300件ありますので100としました。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/216765/c84634f7-0836-b838-4736-9524eb938992.png)

後半の項目はお好きなように選択していただければと思いますが、
面白かったのは、アルゴリズムを選択できるということです。
今回はあまりそこの比較はないので、AutoMLにしましたが、この辺りを設定してみると差が出て面白いかもしれません。
あとは休日判定を有効にするとかも違いが出るかもかなと思いました。（データ特性ですね。）

この設定で行ったところ結構時間かかりました、30分を超えたところで放置したので、それ以上ですね。

## 予測

さて、お待ちかねの予測です。
訓練を選択し、開始と終了の期間も入力します。
いくつかデータソースにしていると、キーも入力する必要があるそうです。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/216765/5d44a733-8f48-0c9c-388f-4dfb099b18f4.png)

結果はこちら。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/216765/63bcac11-2353-e7a3-8267-902d2c46ca16.png)

3月入ったところから相当増えてますね・・・こうならないようにきちんと対策はしましょうね。。。

# 関連する時系列追加(2021/01/12追記）

関連する時系列ということで気温を追加してみようと思います。

## データ取得及び準備

気象庁のサイト（https://www.data.jma.go.jp/risk/obsdl/index.php) から気温を取得（全国ができなかったため、代表地として東京にしています。）

また、前述の通りデータのカラム等の整理は実施が必要です。
もう一点、TARGET_TIME_SERIESの期間を含めて準備する必要があります。
例えば、今回はTARGETである感染者数は2020/01/16~ですが、RELATEDである気温は少なくとも2020/01/16を含めた形でデータを準備する必要があります。
（私はこれをきちんと把握しておらず、2020/03/01~のデータを準備していて何回やっても何回やっても予測ができないよあのCNN-QR何回やっても通らない状態でした。）

## 訓練

特に変化はないです。一点、気になるのはCNN-QRは相変わらずNGでした（なんかメッセージ出てましたが。）
なので、とりあえずARIMAが選択されたのでそれで実施することとしています。

## 予測

ということで、以下です。ドン。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/216765/7a928533-70ed-a600-897d-c50fba6c7d7f.png)

なんかすごい短調になっちゃいましたね。これならない方が良かったレベル。。。

# 終わりに

やってみると、本当にあっけなくできました。
あとは何のデータを入力するべきかを考えて行けば簡単にAI予測はできますね。

2021/01/12追記：年末にかけて相当増えてしまったので、この予測も外れてしまいましたね。。。
どちらかというと、０３月に来るはずだった第三波が先んじてきてしまった、という感じなのでしょうか・・・
一日も早い収束を祈っております。。。