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


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では予測線をスプライン曲線(与えられた任意の点の各点を滑らかに結ぶ曲線)として表現している。モデル式は下記。

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はYahooファイナンスから落とせます。2015年からのデータを落としてきた)


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())

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

それからモデルを作成。


#モデルの作成。たった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)

こんな感じ。

ざっくりいうと夏頃に落ち込んで、年末年始に上がる傾向。
アップル株を買うなら、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を使って株価推移グラフを作る
Prophetを使って、30分でコウメ太夫の努力の結果をビジュアライズする。