bookloveru2

2021年1月11日5 分

pythonで株価分析⑦【Facebookが開発した機械学習ライブラリで株価を予測する】

最終更新: 2021年11月1日

皆様、こんにちは。

今回は、誰もが知りたい、未来の株価を予測する手法を紹介していきます(^_-)-☆

何と❕今回は、Facebookが開発した機械学習ツール『Prophet』を使用して、株価を予測します( ゚Д゚)

では、早速行ってみましょう。


目次

予測した株価をグラフにて可視化

[predict]と[forecast]の違い

コードの解説

Facebookが開発したProphetの紹介

一括コード


❶予測した株価をグラフにて可視化

今回の株価予測の対象は下記の通りです。

銘柄:インテル【INTC】

「言わずと知れた、アメリカ合衆国に本社を置く半導体素子メーカー」

予測期間:2021年1月9日~2022年1月8日までの1年間(未来)

訓練データ期間:1998年1月8日~2021年1月8日までの23年間

では、まず、結果から見てみましょう(・ω・)ノ

ハイ。ドン❕

この様に、緑色の四角で囲った部分が実際の株価データとなっています。

そして、赤色の四角で囲った部分が今後1年間の株価の予測値です。

結論から言うと、株価は強気相場が継続して、上昇する予測が出ています

現在(2021/1/10時点)の株価が51.65ドルなのに対して、1年後は65ドル付近まで上昇する予測ですね(・ω・)ノ

ホンマけ~~?❓

❷「predict」「forecast」の違い

ではここで、これから記載するpythonコードに出てくる、英単語の意味を少し解説します。

predictの意味

  • 予言する

  • 予報する

  • 予測する

forecastの意味

  • 予言する

  • 予報する

  • 予測する

一緒やん!(-"-)と、私も思ったのですが、Pythonコードにどちらの単語も出てくるため、違いを把握する為に調べました。※興味がない方は、読み飛ばして❸コードの解説に進んでください。

では、その違いです。

predict は、一般人。forecastは、専門家。

predict は、信頼性が低い。forecastは、信頼性が高い。

predict は、信頼性があるとは限らない予想。forecastは、データに基づいた信頼性のある予想というイメージです。

ま、何となく違いが知りたかったので、調べました。

❸コードの解説

※ここで、ちょっと言語の説明を入れます。

機械学習には3つのデータを用いるのが基本です。

  1. 訓練データ…モデル構築(学習)に使うデータ

  2. 検証データ…学習の結果を評価するのに使うデータ(過学習を避けることが目的)

  3. テストデータ…学習にも検証にも使用していないテストデータを使用して、モデルの最終的な予測結果を評価する。

て感じです。

では、順を追ってコードを見てみましょう。

あ、➎で一括コードを載せますので、必要な方はそれをコピペして下さい。

まず、下図の様に、予測したい銘柄と学習する期間を入力します。👇

では、次に行きます。

データフレームに調整後終値を代入していきます。👇

次に、空データフレームを作成して、任意の期間を入れます。

ここでは、1年後までの株価を予測したいため、365日を指定。

最後に、冒頭で表示した予測値のプロットです。👇

#土日を除外する
 
future = future[future["ds"].dt.weekday < 5]
 
forecast = model.predict(future)
 
fig = model.plot(forecast)
 
#垂直に引かれた赤い破線はProphetがトレンドの変化を特定した場所を示し、
 
#赤い曲線はすべての季節性を取り除いたトレンドを示しています。
 
a = add_changepoints_to_plot(fig.gca(), model, forecast)
 
model.plot_components(forecast)
 
plt.show()

黒い点が実際の株価です。

青い線が株価の予測値(で囲った部分)です。

赤い線がトレンドです。

薄い水色のバンドが株価の信頼区間です。

垂直に引かれた赤い破線はトレンド転換点です。

如何でしたでしょうか?

この様に、未来の株価を予測するツールの作成は、実に面白いものです(*´▽`*)

ここで、「じゃあ、このツールの中身はどうなっているの❓」

という疑問が起きます。

次節ではその疑問を解決していきます。

❹Facebookが開発したprophetの紹介

Prophetとは、預言者という意味で、Facebookが開発したライブラリの名前でもあります。

具体的には、時系列データを用意して、時系列予測を可能にするライブラリです。

統計知識が不要で、予測モデルを構築できるため、汎用性が高いライブラリとなっています。

デフォルトでは、線形モデルにて予測を立てます。

パラメータ設定により、非線形のモデル作成も可能です。

数式や他の活用方法が知りたい方は、

下記リンクをご参照ください。

Ⅰ.時系列予測ツールFacebook Prophetを使いPythonで様々なデータから予測をする

https://qiita.com/baby-degu/items/f8a7466a73227af69c14

Ⅱ.Prophet入門【Python編】Facebookの時系列予測ツール

https://www.slideshare.net/hoxo_m/prophet-facebook-76285278

Yahoo!のデータサイエンティストさんが作成したスライドで、とても分かり易く説明されています(*´▽`*)

Ⅲ.【Python】Prophetによる時系列予測

https://deepblue-ts.co.jp/python/prophet_timesries/

このリンクでは、数式の時系列モデルを簡易的に解説しています。

➎一括コード

コピペで行けるはずです(*^-^*)

!pip install matplotlib fbprophet pandas-datareader
 
#@title Prophet(Facebookが開発)で時系列株価予測(2021.7.4code訂正)
 
import pandas as pd
 
from fbprophet import Prophet
 
from pandas_datareader import data as pdr
 
import matplotlib.pyplot as plt
 
import datetime
 
import yfinance as yf
 

 

 
stock = "INTC" #@param {type:"string"}
 
start = "1998-1-8" #@param {type:"string"} 学習期間
 
periods = 365#@param {type:"number"} 予測期間
 
end = datetime.date.today()
 

 
# データ取得をdrからyfinanceへ変更。2021.7.4
 
yf.pdr_override() # <== that's all it takes :-)
 
# download dataframe
 
data2 = pdr.get_data_yahoo(stock, start, end)
 
print(data2)
 

 
#トレンドの変化転換点を描画する関数
 
from fbprophet.plot import add_changepoints_to_plot
 

 
#2021.7.3よりpdrがエラーになった。Yahoo!側が拒否したと思われる。よって、yfinanceを使う。
 
# pdrはコメントアウトで消す。ここにフォームで選択した銘柄と期間が来る
 
# df = pdr.get_data_yahoo(stock, start, end)
 
# print(df)
 

 
#x軸(ds)に時系列日付を。y軸に調整後終値を。
 
df = pd.DataFrame({"ds": data2.index.values, "y": data2["Adj Close"].values})
 
model = Prophet()
 
model.fit(df)
 
#空のデータフレームを用意。(periods=に何日先まで空データを作るか?入力。frepは頻度。ここではday)
 
future = model.make_future_dataframe(periods=periods, freq="d")
 
#土日を除外する
 
future = future[future["ds"].dt.weekday < 5]
 
forecast = model.predict(future)
 
fig = model.plot(forecast)
 
#垂直に引かれた赤い破線はProphetがトレンドの変化を特定した場所を示し、
 
#赤い曲線はすべての季節性を取り除いたトレンドを示しています。
 
a = add_changepoints_to_plot(fig.gca(), model, forecast)
 
model.plot_components(forecast)
 
plt.show()

以上が、今回のテーマ

【Facebookが開発したライブラリで株価を予測する】

でした。

皆様のポートフォリオ構築の上で、何かしら役に立てたら幸いです。

では(・ω・)ノ

pythonでプログラミングがしたい!!
 
pythonを学びたい!という方には、
 
オンラインプログラミング教室『Aidemy アイデミー』がお勧めです。
 
ご自身でプログラム環境を用意する必要は無く、サイトへアクセスするだけです。 創業者は東京大学工学部卒の石川聡彦さん。
 
著書に『人工知能プログラミングのための数学がわかる本』(KADOKAWA/2018年)など。
 
無料で、お試しもできますので安心です。
 
お時間ある方は下記リンクを覗いてみてはいかがでしょうか(*'ω'*)

    27350
    5