対象銘柄および関連業界のいくつかの銘柄の株価情報を使って学習させ、明日の取引の始値を予測するプログラム stock-explorer を GitHub に公開しました。いままで Bitbucket にリポジトリを作って非公開で開発をしていましたが、ある程度の成果を確認できたのでリポジトリを移して公開し、時間をかけて汎用的用途に使えるように機能を実装していこうと考えています。
もともと、2018 年 12 月 19 日にソフトバンクグループの国内通信子会社、ソフトバンクが東京証券取引所第1部に上場したこと [1] を契機に、当日までの株価の情報だけで明日(未来)の株価を、機械学習でどこまで予測できるか評価したいと思ったことが、開発を始めた動機です。
※ 新しく始まる株価データを使って機械学習をする、という意味で契機と捉えました。
一年あまりの期間、毎晩 Yahoo!ファイナンスの株価情報をダウンロードして、そのうちいくつかの銘柄を数種類の機械学習のアルゴリズムで学習させ、仮想的に 100 万円を単純な投資アルゴリズムで運用してみました。その結果、2019 年末時点で、予測精度はともかく、PLS のアルゴリズムで予測したヤフーの運用結果が際立って良かったのでスクリーンショットを下記に載せました。
※ 人力で毎晩処理をするのは大変なので、24 時間稼働させられる安価でファンレスな PC を買って cron で毎晩決まった時間に処理するようにしています。
GitHub の下記のサイトにリポジトリを公開しています。
ソースを入手するには下記のように git でクローンしてください。
[bitwalk@fedora-pc ダウンロード]$ git clone https://github.com/bitwalk123/stock-explorer.git
Cloning into 'stock-explorer'...
remote: Enumerating objects: 43, done.
remote: Counting objects: 100% (43/43), done.
remote: Compressing objects: 100% (32/32), done.
remote: Total 43 (delta 16), reused 28 (delta 9), pack-reused 0
Unpacking objects: 100% (43/43), done.
[bitwalk@fedora-pc ダウンロード]$
プログラムの詳細は、これから上記 GitHub のサイトに詳しく説明して行く予定ですが、まだできていません。ただ、日々の株価データを取得し、学習・予測し、データベースを更新する処理は support/update.R が担っています。スクリプトの中身はハードコーディングしている箇所がまだ数多く残っています。本体の stock-explorer はデータベースから読み取ってブラウザ上にプロットを表示するだけの Shiny アプリです。
雑感
R の caret パッケージ [2] を利用すると、簡単に機械学習のアルゴリズムを利用できるので、専用のサーバーを用意して何種類もの機械学習のアルゴリズムをチューニングなしで試してみました。RMSE を精度の基準と考えるならば、'bridge' (Bayesian Ridge Regression) が試した中では一番精度が良いと言えます。精度で二番手になるのが多くの場合、PLS でした。利用できる CPU の性能と学習にかかる計算時間を考えると、欲張ったデータ量を学習させようとすれば PLS が現実的な解になるのかもしれません。ただし、まだまだ試すべきアルゴリズムはたくさんありますので、結論にはできません、
株価予測のモニターを始めた当初は、株価のだいたい 1% ぐらいの精度 (RMSE) で次の取引の始値を予測できれば上出来だと思っていましたが、期間を含めてデータが多くなってくればそのぐらいの精度で予測できそうな様子です。しかし(当然ですが)外的要因を加味することができていません。
例えば、ヤフーと LINE の統合についての報道 [3] が 11 月 13 日の夜に出たときに、翌日のヤフーの株価は急騰しましたが、現状ではその情報を予測に反映させる術がありません。そのため、予測が実際のトレンドに一日遅れで追従することになります。これでは精度としての RMSE がそこそこ良くても、まだまだ使い物になりません。
そこで、ウェブスクレイピングを応用して、予測に寄与する情報を収集できればと試行錯誤を始めています。
参考サイト
- ソフトバンク上場、終値1282円 公開価格を15%下回る :日本経済新聞 [2018-12-19]
- The caret Package
- ヤフーとLINE経営統合へ ネット国内首位に :日本経済新聞 [2019-11-13]
- bitWalk's: Rで株価を扱う 〜 始値を予測してみた [2019-02-03]
- bitWalk's: Rで株価を扱う 〜 quantmod パッケージ [2019-01-16]
にほんブログ村