株価等を予測するAIの作成方法

本サイトでは日経平均株価をAIにより予測しています。
ただ、人によっては日経平均ではなく、TOPIXやWTI、FXなどの予測をAIにやらせてみたい方もいるかも知れません。また、同じ日経平均を予測するのであっても、例えば1週間後の値動きを予測させたいなど、自分の趣旨にあったAIがほしい、という方もいると思います。

ここでは、GoogleのAI「AutoML Tables」を用いた、株価等を予測するAIの作成方法を紹介したいと思います。
なお、プログラムに関する知識は一切必要ありません。難しいことはすべてGoogleがやってくれます。

株価予測AIの作成方法

以下がこれから説明していく概要となります。

  1. 何を予測するか。
  2. 予測したい指数等のデータ(数年分)は入手可能か。
  3. 予測したい指数等と相関がある他のデータはあるか。
  4. 自分だったら「3」のデータでどのように予想するか。
  5. データ入手
  6. Google AutoMLの登録
  7. Google AutoML Tablesを使いAIを作成する
  8. AIを使い株価等を予測する

何を予測するか

株価に限ったことではありませんが、まずはAIに何を予測させたいのかを決定します。

私であれば、これが「日経平均株価」でした。その日経平均株価から、さらに「1日の日経平均の始値から終値の変動」のみにターゲットを絞りました。
これは日経平均でなくても、例えばTOPIXや個別株、また、為替やWTIなどでも良いと思います。
まずは「AIを使って予測させたいもの」を決定します。
なお、取引数量(出来高)が少ないものは数値がブレやすく、AIとは相性が悪くなりがちです。そのため、極力出来高が多いものが望ましいです。

ここからは本サイトで扱っている「日経平均株価」を例にとって説明をしていきます。

AIに日経平均株価を予測させたい場合、日経平均株価の「何を」予測させ、具体的に「どのように」利用するかを想定します。
この「何を」と「どのように」を決定することが非常に重要です。

なぜなら、仮にデイトレードに関して言えば、終値だけが予測できても、そこから利益を得ることは困難だからです。(この例では「どのように」を考えていない。)
もちろん、終値をドンピシャで当てられるのであればこの限りではありませんが、やはり予測値には誤差が生じます。そのため、±200円程度は結果が変わることが多々あります。これでは終値だけを見ても上がるのか下がるのかが判断できません。
ですが、短期のトレードで、「1週間後の終値を予測する」などであれば、これも有効な手段になると考えられます。

私の例で言えば「当日の始値から終値の上昇か下落か」の予測させています。わかりやすく言うと当日の変動額である【終値−始値】の数値を予測させています。

このように予測させる数値は、何かと何かの計算結果後のものでも構いません。

私の場合ですが、ピンポイントで何かの数値を予測させようとしているわけではありません。上げるか下げるかのみに着目して予測させています。
こうすることで、始値がいくらから始まろうが、AIが導き出した結論に一貫性があるからです。(それでも外しますが…)

予測の一例を挙げるならば、私と同様、始値から終値の上下を予測するのも良いでしょうし、安値と高値の数値を予測し、その差分で利益を得るのも良いと思います。また、当日の始値から翌日の始値を予測するという変則的なパターンなどもあります。

このように、予測結果の使い方までを想定して「どの指数の、なんの値」を予測するかを明確にすることが肝心です。

予測をしたい指数等のデータ(数年分)は入手可能か

予測をしたい株価等のデータが入手可能かは、非常に重要です。
データの入手というものは思ったよりも困難で、メジャーなものは入手しやすいのですが、マイナーなものは入手するだけでも非常に手間がかかります。
入手しやすいものは日経平均や為替、TOPIX、マザーズ、JASDAQの他、海外ではNYダウ、DAX、FTSEやWTIなどでしょうか。他にも多々ありますので、これは自分の趣旨に沿ったものを選定します。(個別銘柄のデータは購入しないと入手できないかもしれません。)

もしここで、選定したもののデータが簡単に得られない場合は、その予測を諦め、別の指数等を選択したほうが良いかもしれません。
データの入手性の良し悪しは、作成したAI(トレーニングデータ)の改造・改良の行いやすさにも関わってきます。

予測をしたい指数等と相関がある他のデータはあるか

AIに予測させるデータを決めたら、それをさらに吟味する必要があります。
予測したいデータが決定しても、それを予測するために必要な「他のデータ」が無ければAIは結果が出せません。
例えば日経平均の「始値→終値」を予測したいのであれば、「前日の終値」「NYダウの始値」「NYダウの終値」などです。

人が予想する場合も、「夜中の間にNY市場が随分上がったから今日は日経も上げてくるだろう」などと考えると思います。
そのようなデータをAIにも用意してあげる必要があります。これが『予測するために必要なデータ』となります。

ただ、注意が必要なこともあります。
人が見れば無意識的にわかることでも、AIに無意識はありません。「無意識」とは人による過去の経験に基づくものであるため、AIにも無意識を植え付けるならば、ちゃんとその過去の経験を教えてあげる必要があります。

一例を挙げるならば、先物の「金」の値動きをAIに予測させようとします。
「金」と相関性の高い指数は何があるでしょうか。株価指数なのか、為替なのか。
確かに株価や為替は非常に「金」と相関性のあるデータになります。しかし、直近データと過去データとでは相関性は異なり、数年分のデータ程度で相関を見出そうとしても非常に難しいのです。
この場合、非常に多くのデータをインプットして、AIに(人で言う)無意識を植え付ける必要があります。

さらに例を上げるとすれば「ビットコイン」などもそうです。
きっとAIに長期の予測をさせたら「上げ」しか言わないと思います。(いや、それであっているかもしれませんが…)

自分だったら相関のあるデータでどのように予想するか

自分(人)だったら、何を見て日経平均株価がどのように動くと予想するでしょうか。
さきほど、「夜中の間にNY市場が随分上がったから今日は日経も上げてくるだろう」などと言いましたが、そのような『人が感じる感覚的なもの』のことです。
他にも、「昨日は日経平均が上がりすぎたから今日は下がるんじゃないか」などもあります。
逆に「昨日は日経平均が上ったから今日も上がるんじゃないか」
『自分だったら何を見てどのように考えるか』を数値としてAIに教えてあげます。そしてその時の事実のみを入力します。

(例)
  1. 「ダウが上がったから」 → ダウが「28000」ドルから「28500」ドルになった結果、日経平均は「200」円上がった。
  2. 「ダウが下がったから」 → ダウが「28000」ドルから「27800」ドルになった結果、日経平均は「-200」円となった。
  3. 「日経平均が上がりすぎ」 → 昨日の日経平均が「24000」円から「24500」円になった結果、今日の日経平均は「-200」円となった。
  4. 「今日も上がる」 → 昨日の日経平均が「24000」円から「24100」円になった結果、今日の日経平均は「200」円上がった。

GoogleのAutoML Tablesを使う分には入力は極めて簡単です。CSVデータにこの数値を入れるだけです。
仮に1と4が同じ日(10月10日)、2と3が同じ日(10月11日)だったとすると下記のようになります。

Date225dow_odow_c225_o225_c
2020-10-11-20028000285002400024500
2020-10-1020028000278002400024100

ただ、ここで注意しなければならないことは、データを作成する上で、下記のようにしないことです。
「今日の日経平均が24000円から24100円になった結果、今日の日経平均は100円上がった」
これは案外多くの人がやってしまうミスとなります。(これを「ターゲット漏えい」などと言います。)
今日の日経平均が24000円から24100円になっていれば、当たり前のごとく今日は100円上がっているからです。

データの入手

とにかく大変なのがデータの入手です。使いたいデータを探しているだけで1日が終わります。そして結局見つからないんです…。
そのため、私は「トレーディングビュー」というサイトを使いました。

ただ、正直言って、ここは高いので1ヶ月間のお試し期間のうちに、使いたいデータをダウンロードしてしまいます。
1ヶ月間は無料で使えるので、その間に必要なデータを貰います。そして1か月経つ前に、無料プランに変更します。
なお、チャートデータのダウンロードは「Pro+」というプラン以上が必要となりますのでご注意ください。

また、念のため継続して使う可能性も考えて、無料だからといって一番上のプラン(Premium)にしないでください。「Pro+」で十分です。(無料期間が終わりそうになると、現在のプランでの50%割引オファーが来ます。)

まずは下記サイトに移動し、「無料お試しを開始」から登録します。

tradingview登録画面

「Pro+」のプラン(30日間無料でお試しください)を選択します。

あとは特にわかりにくいところもなく登録できます。

チャートをデータとして保存する方法は少しわかりにくいため、日経平均を例にして説明します。
まずは、最初のページのティッカーというところの右側に「225」と打ち込みます。すると、それに関連したシンボルが表示されます。
この中から「NI225」を選択します。

トレーディングビューのシンボル検索

日経225のチャートが表示されますので「フル機能チャート」を押します。

10年間程度の日毎のデータを取得したい場合は、左上から「1日」を選び、下のカレンダーマークのところから「2010-01-01」などを選択します。
カレンダーでの選択は「選んだ日から今日までのデータを表示」という意味になります。

トレーディングビューの過去データの表示方法

その後、左上の三本線の部分を押して、「チャートデータをエクスポート」を選択します。

トレーディングビューのチャートデータのエクスポート方法

なお、初期状態では日時形式が「UNIXタイムスタンプ」になっていますので、これを「ISO日時」に変更してからエクスポートします。

トレーディングビューの日時形式

すると下記のようなCSVファイルがダウンロードできますので、これを加工して必要なデータを収集していきます。

過去のチャートデータ

なお、CSVデータにはtime列に不要な文字が入っていますので、適宜消してください。(手作業では無理があるので、エクセルやスプレッドシートで関数を使って消してください。例えば「=LEFT(A2,10)」とかで日付以外が消えます。)

あとは、この繰り返しでAI予測に必要なデータを収集し、一つのCSVファイルとします。
例として、実際に予測に使えるサンプルをダウンロードできるようにしておきます。

「ダウの推移のみを見て日経平均の始値から終値の動きを予測する」

「AI_Sample」ダウンロード(ブラウザで開いてしまう場合は右クリックして直接保存してください。)

AIがもし喋れたら「いやいやいや…、いくら俺でもそんなことできねーよ!」って言われそうなサンプルです。
ただ、これでもAIはしっかりと予測をしてくれます。健気です…。

中身は下記のようになっています。

予測に使うCSVのサンプル

このCSVファイルを「Google AutoML Tables」に送り込み、AIにトレーニングをさせます。
その後、実際に予測をさせるときは、B列の「225Delta」という列がない状態で、「Google AutoML Tables」に送れば225Deltaの予測結果が返ってくるという流れです。
まずは「このような感じなのか」とイメージだけ掴めれば良いと思います。やり方は後述します。

Google AutoML Tablesの登録

(googleのアカウント自体は持っているものとして話を進めます。)
なお、かなり長い間無料で使えますので、その間に色々と試しみてください。

Google Cloudに移動し「無料で開始」を押します。

Google AutoML Tablesの利用方法1

「利用規約」チェックを入れ、「続行」を押します。

Google AutoML Tablesの利用方法2

アカウントの種類は「個人」とし、その他必要な情報を入力します。
なお、支払い方法としてクレジットカードを入力しますが、無料トライアルの間に勝手に課金されるようなことはありません。

Google AutoML Tablesの利用方法3

左のメニューから「Strage」を選択し、「課金を有効にする」を押し、請求先アカウントを選択します。

Google AutoML Tablesの利用方法4

「バケットを作成」を押します。

Google AutoML Tablesの利用方法5

バケットに名前(フォルダ名のようなもの)を付け、「Region」を選択、「Standard」を選択、「均一」を選択、「作成」を押します。

Google AutoML Tablesの利用方法6

これで、CSVデータをgoogleにアップロードする準備ができました。
続いて、AutoML Tablesを使えるようにします。

左にメニューから「テーブル」を選択し、「APIを有効にする」を押して、その後「使ってみる」を押します。

Google AutoML Tablesの利用方法7

これでGoogle AutoML Tablesの使用準備も完了です。

Google AutoML Tablesを使いAIを作成する

それでは早速 AutoML Tablesを使って、先程の「ダウの推移のみを見て日経平均の始値から終値の動きを予測する」を例にして、日経平均を予測させてみます。

「Strage」から先程作成したバケットを選択し、「ファイルをアップロード」を押し、「AI_Sample.csv」をアップロードします。
なお、バケットの中は自分がわかりやすいようにフォルダ分けなどをしても構いません。
ここでは「model」「prediction」「result」と3つのフォルダを作成しています。

Google AutoML Tablesの利用方法8

続いて、左のメニューからテーブルを選択し、「新しいデータセット」、「データセットの作成」を押します。

Google AutoML Tablesの利用方法9

データのインポート画面で、「Cloud Storage から CSV ファイルを選択」を選択し、「BROWSE」から先程の「AI_Sample」を選択し、「インポート」を押します。(この程度のデータであれば2,3分程度でインポートは完了するはずです。)

Google AutoML Tablesの利用方法10

(今回は適当に作ったデータのためNullableを無効にする必要がありますが、通常は予測させたいデータは欠損がないため、Nullableは最初から無効になっているのが普通です。Nullableの詳細はgoogleのドキュメントに記載されていますのでここでは省略します。)
「Nullable」を無効にし、ターゲット列から「225Delta」を選択し、「モデルトレーニング」を押し、詳細画面が現れたら、予算には「1」を入力し、「モデルトレーニング」を押します。(予算についてはgoogleのドキュメントに記載されていますのでここでは省略します。)

Google AutoML Tablesの利用方法11

これでAIのトレーニングが開始されます。これから1時間程度放っておくと、AIモデルが作成されます。

Google AutoML Tablesの利用方法12

Google AutoML TablesのAIを使い株価等を予測する

AIモデルが作成されると下記のような画面になります。

Google AutoML Tablesの利用方法13

「評価」を押すと、どのパラメータがどの程度予測結果に影響を及ぼすかのグラフが表示されます。

Google AutoML Tablesの利用方法14

それではこのAIモデルに日経平均株価を予測させます。
まずは予測をさせるためのデータをアップロードします。
左側のメニューから「Strage」を選択し、「ファイルをアップロード」を押します。

Google AutoML Tablesの利用方法15

下記のようなCSVファイルを選択します。なお、このデータにはこれから予測させる日経平均のデータ(225Delta)の列がない状態にします。
(ここではサンプルとして2021年1月18日の日経平均株価を予測する、実際のCSVファイルを置いておきます。)

「AI_Sample_20210118data」ダウンロード(ブラウザで開いてしまう場合は右クリックして直接保存してください。)
DateDOW_E__SDOW_yE__2yEDOW_2yE__3yEDOW_3yE__4yEDOW_4yE__5yEDOW_5yE__6yE
2021-01-18-112.51-177.26-68.95-8.2260-89.28

アップロードが完了したら、左のメニューから「テーブル」→「モデル」に戻り、「テストと使用」を押します。
「Cloud Strage の CSV」にチェックを入れ、先程アップロードしたCSVファイルを選択します。
さらに「Cloud Strage バケット」にチェックを入れ、予測結果を出力するフォルダを選択します。
そして、「バッチ予測を送信」を押せば予測開始です。
5分もあれば、「最近の予測」欄に緑色のチェックが入り、CSVデータが出力されます。

Google AutoML Tablesの利用方法16

予測結果を見るために、左側のメニューから「Strage」に戻り、結果を出力したフォルダに移動します。
すると、「prediction-〇〇」というフォルダが作成されていますので、その中にある「tables_1」を開きます。(次の画面で「認証済みURL」からダウンロードできます。)

Google AutoML Tablesの利用方法17

ダウンロードしたCSVデータを開くと「predicted_〇〇」という列が作成されています。
これが今回予測を行った結果となります。
下記の例でいうと、2021年1月18日の日経平均株価は「始値から1.30366円下がって終了する」ということになります。

Google AutoML Tablesの利用方法18

以上で、株価等を予測するAIの作成方法の説明は終わりです。

人工知能の核をゼロから自分で作ることなんてできません。仮に出来ても、かなり頭の悪い子になると思います…。
今回は実際にAIを作成したわけではなく、AIを鍛えるためのトレーニングデータを作成したに過ぎません。
世界一優秀な人工知能に、自分が作成したトレーニングデータを教え込んで、それをアウトプットしてもらう…。すごい時代になったものです。

余談にはなりますが、プログラムなどの開発環境は、今後このように「ノーコード」へと進化していくものと思われます。

AutoML

Posted by Wert