これまでの取り組み
前回の ディープラーニングで日経平均を予想してみる の投稿では、Google TensorFlowとkerasを使い、LSTMという手法で日経平均を予測しようとしたけれどもうまく予測できませんでした。
うまく行かなかったことは残念でしたが、Google TensorFlowとkerasを使うことで、データサイエンティストでない初心者でも、特に数学の知識も必要なく、簡単にディープラーニングを使うことができるということが分かりました。
今回やりたいこと
Google TensorFlowは、様々な分野で使うことを想定した汎用的なディープラーニングのライブラリでした。今回は、このTensorFlowではなく、Facebookが公開している時系列データ予測のための、人工知能ライブラリProphetを使って、日経平均を予測してみます。
Facebook Prophetとは
"Tools that help analysts to use their expertise most
effectively enable reliable, practical forecasting of business time series."
Prophetは、信頼でき、実用的な、ビジネスの時系列予測を、最も効率的に容易にするツールだそうです。
また、ビジネスでの使用を想定しているため、アナリストの専門知識を反映させたり、調整したりすることもできるように設計されているようです。
Prophetについて、詳しくはこちら:
Prophet入門【Python編】Facebookの時系列予測ツール
【Day-13】『Prophet入門』簡単に高精度を実現するFacebook謹製の時系列予測ライブラリ
Prophet Quick Start
Prophetを使った日経平均予測
ものは試しで、早速、Prophetを使ってみましょう。
日経平均のデータ取得
Yahoo!Financeから過去5年分の日経平均データを取得します。(CSV File形式)
Yahoo!Finance Nikkei 225 (^N225)
Prophetを使って予測するコード
Prophetのコードは、TensorFlowとkerasのコードよりずっと短いです。
(その分、中身はほとんどブラックボックスですね。。。)
import pandas as pd
import numpy as np
from fbprophet import Prophet
df = pd.read_csv('^N225.csv') #日経平均のCSVを読み込み
# print(df.head())
df2 = df.loc[:, ['Date', 'Close']] #日付と終値を抽出
df2 = df2.rename(columns={'Date': 'ds', 'Close': 'y'}) #系列名をds, yに変更
# print(df2.head())
df2['y'] = np.log(df2['y']) # logで正規化
m = Prophet()
m.daily_seasonality = True #オプション
m.fit(df2)
future = m.make_future_dataframe(periods=180) #180日将来まで予測
future.tail()
forecast = m.predict(future)
forecast[['ds', 'yhat', 'yhat_lower', 'yhat_upper']].tail()
m.plot(forecast).savefig('n1.png') #予測結果のグラフをpngファイルで保存
m.plot_components(forecast).savefig('n2.png') #予測結果のグラフをpngファイルで保存
予測結果
180日先までの日経平均予測結果です。なかなか、それっぽい株価が予測されています。
中央の青線によると、半年後の株価は、年初の最高値付近まで上昇する可能性が高いといったところでしょうか。しかし、ばらつきが非常に大きいので、予測の精度は低そうと言えます。
Prophetは、予測結果をトレンドと年、週の周期に分けて分析してくれます。トレンドは、2017年以降は上昇トレンド、年の周期では、年末年始は株価が上がりやすいという分析結果が出ていますね。
まとめ
FacebookのProphetは、LSTMを使った分析よりも、はるかに妥当そう(に見える)分析結果を出してくれるようです。さすが、時系列分析に特化したツールと言うだけありますね。Prophetの中身がどうなっているのかも、気になってきました。
なお、この株価予測があっているかどうかは、また半年後ということで、、、