PythonでProphetを使って日経平均株価を予測したら今後も上がり続けることがわかった
概要
なんかみんなPythonや機械学習で株価の予測とかやってるから自分もそういうのやってみたいなーという素朴な気持ちでいろいろ調べたところ、Facebookが作っているProphetというライブラリを使うと時系列データの予測ができるらしいことがわかった。Quick Startをやってみたら超簡単だったので、日経平均株価のデータも突っ込んでみたという記事です。
過去の記事だと fbprophet
という名前のpipパッケージを使っている例が多いんだけど、2021年05月の時点では prophet
という名前のパッケージになっていて、 matplotlib
を使わなくてもplotができるなどさらに簡単になっている感じです。
- https://github.com/facebook/prophet
- https://facebook.github.io/prophet/
- https://facebook.github.io/prophet/docs/installation.html#python
- https://facebook.github.io/prophet/docs/quick_start.html
構成
- Windows 10
-
prophet
はv1.0.1を使う-
fbprophet
はdeprecated
-
- Miniconda3を使う
- VSCodeのJupiter Notebookを使う
ハマりポイント
- 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をインストールする
- https://docs.conda.io/en/latest/miniconda.html からPython 3.9をダウンロードしてインストール
- スタートメニューから「Anaconda Prompt (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を作ってみる
-
sandbox-prophet
の直下に、quick_start.ipynb
ファイルを作る -
sandbox-prophet
にdata
ディレクトリを作る -
sandbox-prophet/data
ディレクトリに https://raw.githubusercontent.com/facebook/prophet/master/examples/example_wp_log_peyton_manning.csv をダウンロードして設置する
quick_start.ipynb
に、こんな感じで写経する:
pd.read_csv
でCSVを読み込むパスだけ書き換える必要があるので注意。
ハマりポイント
VSCodeで quick_start.ipynb
を開いた状態で右上に出るこのPythonのランタイムをクリックして、先程Miniconda3で作成した sandbox-prophet
仮想環境に切り替えないと動きません!!!
Jupiter Notebookのランタイムは、VSCodeの左下に出ているこのPythonのランタイムとは別に指定する必要があるので要注意。
日経平均株価の予測をやってみる
さて、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)
日経平均株価、めっちゃ上がるやん
もちろん、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に食べさせられる形式にできれば、他の様々なデータでも予測することができそうで、いろいろやってみたくなってきた。
また、予測に関するさらに詳細なパラメーター調整などのオプションがあるはずなので、そのあたりを調べることで予測の精度を上げられるかもしれない。
参考文献
Discussion