Prophetで日経平均株価を予測 #1 ~Prophetモデルでとりあえず予測してみた~

バイト先で出会ったおじいさんが学生のうちに株をやることをやたら進めてきたので、専門分野のデータサイエンスの知識を活用して株価予測できないか試してみた記録．

#目次
**1.Prophetで日経平均株価を予測 #1 ~Prophetモデルでとりあえず予測してみた~**
[2.Prophetで日経平均株価を予測 #2 ~株価を対数収益率に変換しモデリング~](https://qiita.com/japanesebonobo/items/676611771ed351a14b1d)

#やったこと
今回はPythonライブラリのProphetを用いて直近5年分(2014/9/30～2018/9/30)の日経平均株価データから今後約１年の日経平均株価を予測した．

#開発環境
Python 3.6.5
Jupyter Notebook

サンプルコードは以下．

```py

import pandas as pd
import matplotlib.pyplot as plt
from fbprophet import Prophet

data = pd.DataFrame()
file_name = 'N225.csv'
data2 = pd.read_csv(file_name, skiprows=1,header=None, names=['ds','Open','High','Low','Close','y','Volume'])

data = data.append(data2)
print(data)

model = Prophet()
model.fit(data)

future_data = model.make_future_dataframe(periods=250, freq = 'd')
future_data = future_data[future_data['ds'].dt.weekday < 5]

forecast_data = model.predict(future_data)

fig = model.plot(forecast_data)
model.plot_components(forecast_data)
```
以下サンプルコードを詳しく説明

#必要なライブラリのインポート

・pandas・・・csv形式のデータをPython上でデータフレームとして扱うために必要なライブラリ。
・matplotlib.pyplot・・・Pythonでデータを分析した結果をグラフで表示するためのライブラリ。
・Prophet・・・Pythonで時系列解析を実装できるFacebookが開発したライブラリ（pipでインストールが必要）
``` $ pip install fbprophet ```
これでインストールできない場合、以下リンクなどを参考にしてください．
https://github.com/facebook/prophet/issues/201

```py

import pandas as pd
import matplotlib.pyplot as plt
from fbprophet import Prophet
```

#日経平均株価データのダウンロード

日経平均株価データはYAHOO!FINANCEのWebサイトからダウンロード可能
リンク：https://finance.yahoo.com/quote/%5EN225/history?ltr=1

取得したい期間を自由に指定してcsv形式でダウンロード
今回は2014/9/30~2018/9/30の5年分のデータを取得して使用

#データをJupyterに取り込む

padasを用いて空のデータフレームを定義
次に先ほどダウンロードしたデータをfile_nameに格納

格納しただけではProphetで予測モデルを作成できないので、names=でデータの変数名を再定義
Prophetで扱う時間データはds、日経平均株価の調整済み終値(データの列名はAdj Close)をyと定義
(目的変数が日経平均株価の調整済み終値、説明変数が日付として時系列解析するイメージ)

```py
data = pd.DataFrame()
file_name = 'N225.csv'
data2 = pd.read_csv(file_name, skiprows=1,header=None, names=['ds','Open','High','Low','Close','y','Volume'])
```

data2として定義した日経平均株価データを先ほど定義したデータフレームに流し込む
print()でデータがきちんと取り込めているか確認

```py
data = data.append(data2)
print(data)
```
データのイメージ
![スクリーンショット (81).png](https://qiita-image-store.s3.amazonaws.com/0/296645/4b421000-0d36-cdac-5a31-be9332e9512d.png)

#Prophetで予測モデル作成

モデルの作成は先ほどのデータを流し込むだけで簡単に作成できる
ハイパーパラメータの調整なしである程度の精度のいいモデルを作ってくれる
Prophetすばらしい.さすがFacebook製といったところである

```py
model = Prophet()
model.fit(data)
```

#日経平均株価を予測する期間を指定し予測
model.make_future_dataframe()で予測する期間を指定
periods=で予測する日数(1年の日数は、365日なので365と指定)
freq=で予測する単位(今回は日単位なので'd'とする)

2行目で土日の予測を除外(株価は土日は動かないため)

最後にforecast_data=にモデルの予測結果を格納

```py
future_data = model.make_future_dataframe(periods=250, freq = 'd')
future_data = future_data[future_data['ds'].dt.weekday < 5]

forecast_data = model.predict(future_data)
```

#予測結果の視覚化

```py
fig = model.plot(forecast_data)
```
model.plot()で予測結果をプロットした結果は以下
![image.png](https://qiita-image-store.s3.amazonaws.com/0/296645/b246fe35-6e77-be2d-0952-3376ed617a14.png)

予測結果は2018年の年末には日経平均株価は約2万5千円まで上昇して
上がったり落ちたりを繰り返して推移するといったものになった

青の実線がデータをもとに引いた予測線で、水色の範囲で誤差の範囲（多分）を表している
予測が未来のものになるほど水色の範囲が広がっているので
直近の予測に比べ信頼性は薄いことが確認できる

```py
model.plot_components(forecast_data)
```
model.plot_components()でトレンドや周期性についての分析ができる
![image.png](https://qiita-image-store.s3.amazonaws.com/0/296645/f8fef5d6-6bff-0d98-38e8-5c00948060ea.png)
・2016年の年末から上昇トレンド
・9月に底値を迎えそこから年末にかけ上昇する周期性がみてとれる

#最後に
Prophetの詳細は以下リンクなど参考
https://www.slideshare.net/hoxo_m/prophet-facebook-76285278　

今回の予測はデータサイエンスの一手法である時系列解析を一通りやってみた結果です
この結果をうのみにして大損こいたなどの事象には責任をとれません