Appleの株が３００ドルを超えたということでProphetで今後を予測してみた




![740x-1.png.jpeg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/240982/f8399d55-0274-99d8-ea51-c08d0ca8d8cf.jpeg)


Appleの株が300ドルを超えて過去最高になったということで、ずっとアップル好きだしどんな感じなのかfacebookが作った「Prophet」（既存のデータから予測が簡単にできるパッケージ）を使って過去、今後について調べてみました.



>
Apple crosses $300 for the first time, extending record high https://t.co/hvugREWKp6 pic.twitter.com/315Qu26NLx
— Bloomberg Markets (@markets)
January 2, 2020


##実行環境
Python 3.7.6
macOS Mojave 10.14.6
Jupyter Notebook
##知りたいこと

・今までの流れ
・今後のトレンド
・買い時

##Prophetとは？

Facebookが開発した時系列予測ライブラリです。 （時系列データのトレンドを把握できるだけでなく、トレンドの変化点の検出も出来る。 ）

しかも、めちゃくちゃ簡単に。
もちろん回帰タスクも可能。
重回帰やSVR等の線形/非線形回帰モデルとは異なり、基本的には説明変数を必要としない。
どちらかというとARIMA(SARIMA)モデルのように、時系列でみたときのデータの変動からトレンド曲線を導出するアルゴリズム。
Prophetでは予測線をスプライン曲線(与えられた任意の点の各点を滑らかに結ぶ曲線)として表現している。モデル式は下記。

![https---qiita-image-store.s3.ap-northeast-1.amazonaws.com-0-380802-b0701dcc-6dc9-c26c-44dc-a6312609e442.png.jpeg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/240982/02a3874d-2ee7-0497-1129-ec45f120b5ea.jpeg)

g(t)がトレンド成分、 s(t)が季節成分、 h(t)が祝日などのイレギュラーな効果成分、 εが誤差項となる。
(詳細は論文を確認願います。https://facebook.github.io/prophet/)

（上記の説明はこちらから引用させていただきました。https://qiita.com/Kosuke0306Ikko/items/5bf86f8903b74887255d ）

##実行

Prophet用のライブラリが未インストールの場合は、ターミナルからpipでインストール。

```
$ pip install fbprophet
```

まずはライブラリをインポート。

 ```

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

%matplotlib inline

```

アップルの株のCSVは<a href="https://finance.yahoo.com/quote/AAPL/history?p=AAPL&amp;guccounter=2">Yahooファイナンス</a>から落とせます。2015年からのデータを落としてきた）</p>
CSVを読み込み。（AAPL.csv)

 ```

data=pd.DataFrame()
file_name='AAPL.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.describe())

```

 
![スクリーンショット 2020-01-04 11.30.34.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/240982/be731467-1187-da3b-7050-54e16eabc5be.png)


2015年からの平均値が150ドルあたり。今回の３００ドルは平均値の２倍を叩き出しているってことね。すげ。

 

それからモデルを作成。

```

#モデルの作成。たった2行。すごい。
model=Prophet()
model.fit(data)

```

ここから未来予測。1000日後まで。

```

#未来予測。1000日で設定。
future_data = model.make_future_dataframe(periods=1000, 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)

```

こんな感じ。


![Unknown.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/240982/57ec8a6e-dc2b-be38-aa7f-381ada613dbf.png)


ざっくりいうと夏頃に落ち込んで、年末年始に上がる傾向。
アップル株を買うなら、7月あたりが良いのかも。


##ソースコード 

```

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

%matplotlib inline

data=pd.DataFrame()
file_name='AAPL.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)
print(data.describe())


#モデルの作成。たった2行。すごい。
model=Prophet()
model.fit(data)

#未来予測。1000日で設定。
future_data = model.make_future_dataframe(periods=1000, 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)
```

###参考にさせていただいた記事

ありがとうございます！Prophetのすごさと、以下の記事を書かれた方々のセンスに敬意を込めて。

・[Python用時系列データ予測ツールprophetを使って株価推移グラフを作る](https://qiita.com/yasutaka_ono/items/d1f61d2683d15f6e6cfb)
・[Prophetを使って、30分でコウメ太夫の努力の結果をビジュアライズする。](https://qiita.com/Kosuke0306Ikko/items/5bf86f8903b74887255d)