Help us understand the problem. What is going on with this article?

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

740x-1.png.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

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

スクリーンショット 2020-01-04 11.30.34.png

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)

こんな感じ。

Unknown.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を使って株価推移グラフを作る
Prophetを使って、30分でコウメ太夫の努力の結果をビジュアライズする。

Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
No comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
ユーザーは見つかりませんでした