📈

PythonでProphetを使って日経平均株価を予測したら今後も上がり続けることがわかった

2021/05/08に公開

概要

なんかみんなPythonや機械学習で株価の予測とかやってるから自分もそういうのやってみたいなーという素朴な気持ちでいろいろ調べたところ、Facebookが作っているProphetというライブラリを使うと時系列データの予測ができるらしいことがわかった。Quick Startをやってみたら超簡単だったので、日経平均株価のデータも突っ込んでみたという記事です。

過去の記事だと fbprophet という名前のpipパッケージを使っている例が多いんだけど、2021年05月の時点では prophet という名前のパッケージになっていて、 matplotlib を使わなくてもplotができるなどさらに簡単になっている感じです。

構成

  • Windows 10
  • prophetはv1.0.1を使う
    • fbprophet はdeprecated
  • Miniconda3を使う
  • VSCodeのJupiter Notebookを使う

こういうグラフが表示できます
Image from Gyazo

ハマりポイント

  • WindowsだとProphetをpipやpoetryでインストールするのは厳しい
    • 公式ドキュメントにも
    • On Windows, PyStan requires a compiler so you’ll need to follow the instructions. The easiest way to install Prophet in Windows is in Anaconda.

    • などと不穏なことが書かれている
    • 実際にpoetryでやってみたらめっちゃハマって結局ダメでした
    • 素直にAnacondaもしくはMinicondaを使ったほうが良い

手順

Miniconda3をインストールする

仮想環境をつくる

conda create -n sandbox-prophet
conda activate sandbox-prophet

仮想環境に必要なパッケージをインストールする

prophetのインストール

conda install -c conda-forge prophet

ここで -c conda-forge を指定するのが重要なようだ

Jupiter notebookのインストール

conda install notebook ipykernel

その他、必要そうなパッケージのインストール

conda install pandas
conda install plotly

プロジェクトのディレクトリを作る

sandbox-prophet という名前で作ることにする

mkdir sandbox-prophet

VSCodeで sandbox-prophet ディレクトリを開く

ProphetのQuick Startをやってみる

https://facebook.github.io/prophet/docs/quick_start.html に従ってipynbを作ってみる

quick_start.ipynb に、こんな感じで写経する:
Image from Gyazo

pd.read_csv でCSVを読み込むパスだけ書き換える必要があるので注意。

ハマりポイント

VSCodeで quick_start.ipynb を開いた状態で右上に出るこのPythonのランタイムをクリックして、先程Miniconda3で作成した sandbox-prophet 仮想環境に切り替えないと動きません!!!
Image from Gyazo

Jupiter Notebookのランタイムは、VSCodeの左下に出ているこのPythonのランタイムとは別に指定する必要があるので要注意。
Image from Gyazo

日経平均株価の予測をやってみる

さて、ProphetのQuick Startで時系列データさえあれば超簡単に予測ができることがわかった。
実用的な使い道として、日経平均株価の予測をしてみたい。

日経平均株価の時系列データは、 https://finance.yahoo.com/quote/^N225/history?ltr=1 からCSV形式でダウンロードできる。
"Time Period" で "5Y" を選択して "Download" をクリックするだけ。

ダウンロードしたCSVを N225.csv にrenameして、 sandbox-prophet/data ディレクトリに設置する。

先程のQuick Startは途中で確認のためにデータを表示したりしていたが、不要なので削った結果がこちら

import pandas as pd
from prophet import Prophet

df = pd.read_csv('./data/N225.csv')
new_df = df.rename(columns={'Date': 'ds', 'Adj Close': 'y'})
m = Prophet()
m.fit(new_df)
future = m.make_future_dataframe(periods=365)
forecast = m.predict(future)

Quick Startと同様にplotしてみよう

fig1 = m.plot(forecast)

Image from Gyazo

日経平均株価、めっちゃ上がるやん

もちろん、Quick Startでやったように

fig2 = m.plot_components(forecast)

from prophet.plot import plot_plotly, plot_components_plotly

plot_plotly(m, forecast)
plot_components_plotly(m, forecast)

とすることによって、全期間・年間・週間のデータを表示することもできる。

まとめ

Prophetを使うことで時系列データの予測を非常に簡単に行えることがわかった。
時系列のデータを機械可読にしてpandasに食べさせられる形式にできれば、他の様々なデータでも予測することができそうで、いろいろやってみたくなってきた。
また、予測に関するさらに詳細なパラメーター調整などのオプションがあるはずなので、そのあたりを調べることで予測の精度を上げられるかもしれない。

参考文献

https://qiita.com/kawada2017/items/626a80ed5bbfdc2576a5
https://qiita.com/ShortArrow/items/082339e5dd3e7a7e6bc3
https://hk29.hatenablog.jp/entry/2020/12/06/230617
https://qiita.com/japanesebonobo/items/58304c74d6ac67e4f41a

Discussion