ぐりろぐ

変化を楽しむ気分屋ぐりの役立ちノート

【Python】記事に従って初心者がTOPIXの予測モデルを作成

python,初心者,プログラミング,写経 今回はpythonの写経記事です。

参考にさせていただくのは、我がプログラミングのメンターであるタダケンさんEnjoy Techがかつて投稿されたTOPIX予測モデルの作成記事です。

tadaken3.hatenablog.jp

早速スタート!Google Colaboratoryを利用することで、環境設定不要

まずはGoogle Colaboratoryを利用することで環境設定は不要です。

早速コードをゴリゴリ写経していきます。

データの取得

プログラミング,python,初心者,topix

まずは記事に従って、TOPIXの過去のデータを取得。

I0000.JP Stock Price & News - TOPIX Index - Wall Street Journal

ファイルアップロードの準備

from google.colab import files
uploaded = files.upload()

こちらでファイルをアップロードするためのボタンが出現します。

アップロードファイルをpandasのdataframeで使えるように

import io
import pandas as pd
import numpy as np

df = pd.read_csv(io.StringIO(uploaded['HistoricalPrices.csv'].decode('utf-8')))

df.head()

ioってなに?...

ioとは、StringIOインスタンスを使うための、モジュールです。

StringIOを使うと、文字列をファイルのように扱うことができ、read,write,printといったファイル操作をStringIOを介して行うことができるそうです。

なるほど?笑

因みに、 pandas はpythonでデータ分析を効率的に行うためのライブラリであり、データの読み込みや統計量の表示、グラフ化など、データ分析に役立ちます。

データ型の変更

%matplotlib inline
import matplotlib.pyplot as plt

df["ds"] = pd.to_datetime(df["Date"]).dt.date
df["y"] = np.log(df[" Close"])
df["y"].plot()

冒頭が%で始まっている...?

matplotlibを使う際は、初めにmatplotlibライブラリをインポートしますが、 先頭の %matplotlib inline は、グラフを描画する際に指定する記述です。

また4行目のpd.to_datetime(df["Date"]).dt.dateは一度to_datetimeでTimestamp型に変換したのち、 .dt.dateでdate型に変換しています。

プログラミング,python,初心者,topix

予測モデルの作成

早速モデルの作成だ!

と思ったら...

謎のエラーに遭遇

from fbprophet import Prophet
model = Prophet()
model.fit(df)

ここでエラーが! エラー内容は、 ImportError: cannot import name 'MONDAY' とのこと。

ちょびっと調べてみると、こちらの記事が該当。

要するに、ディレクトリ名とモジュール名が被ってるからエラー!とのこと。

いや、、、分からん、、、

メンターのタダケンさんに質問すると...

プログラミング,python,初心者,topix

との返答があったので、アドバイス通り

!pip install fbprophet==0.3.post1

実行すると... 無事エラーが消えました。

こちらのgithubに載っている内容でした。

githubで検索するという方法もあるんですね〜!勉強になりました...

そしてモデルをもとに予測を実行。

future = model.make_future_dataframe(periods=365)
forecast = model.predict(future)
forecast[["ds","yhat","yhat_lower","yhat_upper"]].tail()

こちらで入力している3行目の.tail()は末尾の行の要素を返すメソッド。

プログラミング,python,初心者,topix

model.plot(forecast);

で予測モデルをビジュアライズ。

プログラミング,python,初心者,topix

予測モデルの検証

次に予測モデルが本当に正しいのか、精度評価を行なっていきます。

検証用データを交差検証法を利用して作成

次にprophetのdiagnosticsクラスを使って効果検証していきます。

ここで利用しているcross_validationメソッドを利用し、交差検証法という手法でモデルの精度検証を行います。

交差検証法って何...?

効果検証法とは

1. 保有データを分割し、「一部のデータ」に分析手法を利用し訓練(訓練)
2. 訓練したデータに対して、残ったデータでモデルを評価(テスト)
3. 1~2を複数回繰り返し、分析の精度を評価

するものです。機械学習や深層学習では最も使われるモデル評価の1つです。

ちなみに僕の場合は期間を長く設定したので、3分ぐらいかかりました。

プログラミング,python,初心者,topix

詳しく知りたい方はこちら

予測モデルの精度を平均絶対誤差率を利用して判定

def cal_mape(df):
  return((df["yhat"] - df["y"]).div(df["y"]).abs().sum()*(1/len(df)))
cal_mape(cv)

こちらは平均絶対誤差率を利用。

平均絶対誤差率...?

平均絶対誤差率とは

- トレンドの推定などに利用される予測精度を測る指標
- 通常はパーセントで精度を表現
- 実測値と予測値の差分を実測値で割り、それらを合計したものを予測値の数で割り、100を乗じる

詳しく知りたい方はこちら

結果がこちら!

0.02715394851644534

27%!

(2018年1月10日修正) 2.7%の間違いでした。
(ご指摘いただいたきょうはるさん、ありがとうございます!)

まとめ: 予測データ面白い!そして数学の知識が必要!笑

今回はタダケンさんの、TOPIX予測モデルの作成記事をそのまま写経しながら意味を理解していきました。

僕もいつか日経225の株価予測と、個別銘柄の予測とかできるようになりたいです。

そして今回写経していて思ったのは、pythonの基礎知識よりどのような手法をどのように使うかを知っている方が重要だとわかりました。

あとは数学。

シグマとか出てきて頭が痛かったです笑

タダケンさん、いつもアドバイス等ありがとうございます!!!

読んでくださりありがとうございました〜!