AutoML Tablesを自作データの予測で使ってみた

# はじめに
Google Cloud PlatformのAutoML Tablesで、手軽にデータの予測ができるようになりたい。
ということで試しに翌日の日経平均株価を予測してみました。この記事はその時のメモです。
過去5日分の日経平均株価から翌日の日経平均株価を予測してみます。

# データ作成
次のサイトから過去10年分の日毎の日経平均株価を取得させていただきました。
https://www.macrotrends.net/2593/nikkei-225-index-historical-chart-data
トレーニング用のCSVデータは、エクセルで次のように作りました。

```nikkei_225.csv
today,1ago,2ago,3ago,4ago,5ago
9547.79,9448.21,9514.44,9467.15,9449.46,9442.95
9574.32,9547.79,9448.21,9514.44,9467.15,9449.46
9411.28,9574.32,9547.79,9448.21,9514.44,9467.15
9351.4,9411.28,9574.32,9547.79,9448.21,9514.44
9354.32,9351.4,9411.28,9574.32,9547.79,9448.21
・・・（2437件のデータ）
```

1行目はタイトル行です。タイトル行は要るようです。
todayカラムが日々の株価で、これがターゲットカラムになります。nagoカラムがtodayのn日前の株価です。このデータから、5日前までの株価とtodayの株価の関係をモデル化するのが目標です。
2437行のデータがあります。注意点としまして、**1000件未満のデータではエラーが出ます**。

# インポート
Google Cloud Platformへログインします。
https://console.cloud.google.com/?hl=JA
ナビゲーションメニューから「Tables」＞「データセット」、そして「新しいデータセット」ボタンを押します。

![1.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/566826/45c72052-0ca7-b798-7fb2-5d48c762f3cc.png)
「新しいデータセットの作成」ダイアログに、適当なデータセット名を記入、「リージョン」は「グローバル」を選択、「データセットの作成」ボタンを押します。作成したデータセットの名前のところをクリックして、詳細ページに遷移します。

詳細ページ内の「インポート」タブの「パソコンからファイルをアップロードする」で、前節で作成したnikkei_225.csvを選択。「アップロード先のフォルダを選択してください。」の「BROWSE」ボタンを押して、右の「新しいパケットボタン」を押します。
![2.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/566826/7324e0a2-8b8f-7ec6-eaf9-589dbbeca908.png)

**「ロケーション」は「us-central1」を選択します**。機械学習はus-centralでしか学習できないようで、学習させるデータが保存されているバケットのロケーションも、そのロケーションに合わせる必要があるとのことです。実際異なるとエラーが出ます。
![3.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/566826/1c98bea0-9df8-602f-7d9a-7b98a979fcc2.png)

パケット名をnikkei_dataにしました。それを「SELECT」します。
![4.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/566826/b3dcbd2c-1b48-3f15-7ad9-5ddca1d2151f.png)
これまでの作業で、データは後述のCloud Storage上に保存されます。

# トレーニング

次に「トレーニング」タブで、ターゲット列に「today」を選び、「予算」はとりあず1にしました。そしてモデルトレーニングのボタンを押します。
![5.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/566826/81028ce4-ab4a-8bd0-4417-b79fc35cf6a3.png)

トレーニングは約30分かかりました。次がその結果です。モデルのサイズは531.804 MBでした。
![6.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/566826/9b11a2f0-f7c8-1304-fd59-2191be05ad8c.png)

# テスト

テストデータは次のような形式です。トレーニングデータに比べて、ターゲットカラムのtodayがありません。株価が5日間このようになった後、翌日の株価（today）がいくらになるか予測しようとするものです。

```nikkei_225_test.csv
1ago,2ago,3ago,4ago,5ago
29058.11,28946.14,28814.34,28860.08,29149.41
```

このテストデータnikkei_225_test.csvを、Cloud Strage上のパケットの中に置く必要があります。ナビゲーションメニューから「Cloud Storage」＞「ブラウザ」を選び、とりあえず先に作成したnikkei_dataパケットの中にアップロードしました。

![8.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/566826/087c0612-05b6-1eca-e81e-eebbafc2491f.png)

ナビゲーションメニューから「Tables」へ戻り、「テストと使用」タブ＞「バッチ処理」タブで、「Cloud StorageのCSV」を選択、「BROWSE」ボタンを押し、右画面のパケットの中から先ほどアップロードしたテストデータnikkei_225_test.csvを選択、「SELECT」ボタンを押します。

![9.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/566826/0e127e6c-2087-dc06-01f6-0694f48a5bbb.png)

続いて、結果ファイルの出力場所を設定します。「Cloud Storageパケット」を選び、「BROWSE」ボタンを押し、右に表示されるパケット「nikkei_data」を選択、「SELECT」ボタンを押します。最後に「バッチ予測を送信」ボタンを押します。

![10.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/566826/ef30d010-d47d-a152-c54e-0995142ebdc2.png)

処理時間は約2分かかりました。結果を取得するのに、再度ナビゲーションメニューから「Cloud Storage」へ行き、nikkei_dataパケットの詳細ページへ行きますと、「prediction-」とついたフォルダが作られてますので、その中から結果のファイルをダウンロードします。

![11.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/566826/ed66239f-e5ab-df4e-ba35-eac7837c6b98.png)

ダウンロードした結果ファイルが次になります。

```prediction-nikkei_225_20210606072556-2021-06-06T12_31_57.785530Z_tables_1.csv
1ago,2ago,3ago,4ago,5ago,predicted_today
29058.11,28946.14,28814.34,28860.08,29149.41,29042.482421875
```

予測値29042.482421875円が得られました。実際のその時の株価ですが28941.52円です。どうなんでしょう。まあ前日から値上がりしていることは当たっているようです。

以上です。

# その他

今回、テストは「バッチ予測」で行いましたが、「オンライン予測」という選択肢もあります。ただしオンライン予測を使用するには、クラウド上でモデルをデプロイする必要があります。そしてそのデプロイしたモデルをクラウド上に置くと1時間ごとに課金されるとのことです。

バッチ処理では、1件の予測に2分かかりましたが、ドキュメントによりますとオンライン予測では低レイテンシ（短い処理時間）とことこです。JSON形式のテストデータをcurlで送信して、結果をJSONで受け取ることができるとのことで、他のアプリケーションで利用できそうです。