概要
以前、DeepLearningを使って、気象情報から東京電力管内の電力需要を予測してみることをしてみました。
このときは、予測の為の学習データに、天候情報というメトリックをそのまま使うことができました。
株価でも同じようなことはできるはずですが、学習させる説明変数として、twitterのつぶやきを使ってみることを思いつきました。
なんせ、日々大量の人たちが大量のつぶやきを行っています。
世界でラーメンを食べている様子だって、分析できてしまいます。
これを使わない手はない!
ということで、つぶやきビッグデータから、株価の予測に挑戦してみます。
やっていること
Yahooファイナンスで公開されている、過去の株価情報を用いて、株価を再現する。
- Yahoo!ファイナンス
- twitterの過去ログ
- 予測した対象企業の公式twitter
- 過去ログの取得方法は、いろいろあるのでググってください。
データの使い方について
- 上記の2つの情報で、2014/01/01~2016/12/31までの期間を学習データとする。
- 学習させたモデルで、2014/01/01~2016/12/31までの期間の電力需要の再現を試みる。
- 学習データの90%を実際に学習に使い、残る10%で評価を行う。
使用したアルゴリズム
データの準備や機械学習で、以下のようなアルゴリズムを利用しています。
twitterデータのベクトル化
- 言語を学習データとするために、ベクトル化を行っています。
- doc2vecを使用しています。前後の単語の文脈も学習結果に取り込みたいためです。
- 200次元ベクトルに変換しています。
学習プロセス
- Neural Networkを使った、Deep Learningを使っています。
- 隠れ層は3層、隠れ層のノード数は600、出力は1層です。
フレームワーク
- chainerを使用しています。
早速、結果のグラフ
計算して再現(上)したものと予測(下)したものをグラフ化しました。
全体のトレンドこそ合っているように見えますが、細かい動きが多く、バタついていますね。
再現グラフ(下)でも、実際の株価(破線)に対して予測値(シアンの実線)は大きく上下していて、
予測できたとは言えるレベルではないです。
結果の解釈
予測結果は、ご覧の通りあまりよくありません。
ちょっとこの原因を考えてみることにします。
毎日つぶやいていない
まず公式twitterのデータを見てみると、毎日つぶやいているわけではありませんでした。
なので、つぶやきデータがある日とそうでない日では、予測された株価への影響が大きいことが予想できます。
学習データの内容が偏っている
それに、今回は、学習データに公式twitterデータだけを使いました。
実際には、おそらくその公式twitterは、自社情報の拡散が目的ですから、ポジティブな情報しか含まれないはずです。
ネガティブな情報やイベントが含まれないというのは、より良い学習データとは言えませんね。
株価の特性を踏まえた学習データではない
さらに、当たり前ですが、株価というものは周期性があるということが広く知られています。
週初めと週の終わり、月初と月末、大型連休付近など、特徴ある振る舞いをするものです。
(あ、もちろん個別銘柄だと、そうした傾向は薄くなります)
前日の終値やその差分など、自己相関を示すパラメタをいくつか取り入れたほうが、より再現率は高くなるはずです。
・・・・といった解釈が正しいかどうか、全くブラックボックスでわからないところがDeep Learningですね。
引き続き、学習データを工夫させていこうかと思います。