はじめに
Google Cloud PlatformのAutoML Tablesで、手軽にデータの予測ができるようになりたい。
ということで試しに翌日の日経平均株価を予測してみました。この記事はその時のメモです。
過去5日分の日経平均株価から翌日の日経平均株価を予測してみます。
データ作成
次のサイトから過去10年分の日毎の日経平均株価を取得させていただきました。
https://www.macrotrends.net/2593/nikkei-225-index-historical-chart-data
トレーニング用の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」>「データセット」、そして「新しいデータセット」ボタンを押します。
「新しいデータセットの作成」ダイアログに、適当なデータセット名を記入、「リージョン」は「グローバル」を選択、「データセットの作成」ボタンを押します。作成したデータセットの名前のところをクリックして、詳細ページに遷移します。
詳細ページ内の「インポート」タブの「パソコンからファイルをアップロードする」で、前節で作成したnikkei_225.csvを選択。「アップロード先のフォルダを選択してください。」の「BROWSE」ボタンを押して、右の「新しいパケットボタン」を押します。
「ロケーション」は「us-central1」を選択します。機械学習はus-centralでしか学習できないようで、学習させるデータが保存されているバケットのロケーションも、そのロケーションに合わせる必要があるとのことです。実際異なるとエラーが出ます。
パケット名をnikkei_dataにしました。それを「SELECT」します。
これまでの作業で、データは後述のCloud Storage上に保存されます。
トレーニング
次に「トレーニング」タブで、ターゲット列に「today」を選び、「予算」はとりあず1にしました。そしてモデルトレーニングのボタンを押します。
トレーニングは約30分かかりました。次がその結果です。モデルのサイズは531.804 MBでした。
テスト
テストデータは次のような形式です。トレーニングデータに比べて、ターゲットカラムのtodayがありません。株価が5日間このようになった後、翌日の株価(today)がいくらになるか予測しようとするものです。
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パケットの中にアップロードしました。
ナビゲーションメニューから「Tables」へ戻り、「テストと使用」タブ>「バッチ処理」タブで、「Cloud StorageのCSV」を選択、「BROWSE」ボタンを押し、右画面のパケットの中から先ほどアップロードしたテストデータnikkei_225_test.csvを選択、「SELECT」ボタンを押します。
続いて、結果ファイルの出力場所を設定します。「Cloud Storageパケット」を選び、「BROWSE」ボタンを押し、右に表示されるパケット「nikkei_data」を選択、「SELECT」ボタンを押します。最後に「バッチ予測を送信」ボタンを押します。
処理時間は約2分かかりました。結果を取得するのに、再度ナビゲーションメニューから「Cloud Storage」へ行き、nikkei_dataパケットの詳細ページへ行きますと、「prediction-」とついたフォルダが作られてますので、その中から結果のファイルをダウンロードします。
ダウンロードした結果ファイルが次になります。
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で受け取ることができるとのことで、他のアプリケーションで利用できそうです。