こんにちは、週末プログラマーのびずぷらです。
QuantXでシステムトレードを勉強してましたが、AIを本気でやるにはMacでのPython実行環境が欲しくなりました。
というわけで、突然ですが、この記事のチャレンジ項目は下記の2点です。
- MacでPython実行環境を作る
- 時系列予測ツールProphet(予言者)で日経平均を予測する
これからPythonを勉強したい人、人工知能を勉強したい人向けの記事です。
投資だけ興味ある人は、日経平均予測をどうやってるかだけをサクッと見てもいいかもしれません。
では、さっそく実行環境の準備から行きます!QuantXについては下記の記事を参照ください。

目次
MacでPython実行環境を作る
いろいろと方法はありそうですが、簡単にステップだけ書きます。
- Homebrewをインストール
- Python本体をインストール
- Pythonの各種ライブラリをインストール
- エディタをインストール
株式会社キカガクさんによる、これ以上ないほど丁寧なサイトがあります。下記を参考にインストールすれば簡単です。
上記サイトに記載のない追加事項や注意点だけを追記します。
AI(人工知能)の前にPython勉強するなら、Aidemyの無料講座がおすすめです。環境構築なしですぐにPythonについて学べます。
Aidemy 「プログラミング初心者でも大丈夫『Python入門』コース」

AI学習で必要なライブラリー
ステップ3の各種ライブラリーでインストールしたものを一覧にまとめます。この記事を書いている2018.6.17時点のものです。
パッケージ | バージョン | QX | 概要 |
numpy | 1.14.5 | ○ | 多次元配列の数値計算 |
scipy | 1.1.0 | ○ | 数値解析(フーリエ変換など) |
matplotlib | 2.2.2 | ー | グラフ描画 |
pandas | 0.23.1 | ○ | 時系列データ操作・演算 |
scikit-learn | 0.19.1 | ○ | 機械学習 |
chainer | 4.1.0 | ○ | ニューラルネットワーク |
jupyter | 1.0.0 | ー | Python実行支援ツール |
ta-lib | 0.4.17 | ○ | テクニカル指標の計算 |
fbprophet | 0.3.post2 | ー | 時系列予測ツール |
※Pythonのバージョンは3.6.5、macOS 10.13.5で環境構築しています。
今回使わないものもありますが、せっかくなので一緒に入れておきましょう。
表の中の「QX」の「◯」はQuantXのmaron-0.1.0系で採用されているパッケージです。将来的にQuantXへの移植も考えると同じものを使っておくのが良いと思います。
さらにAI学習を進めるなら、tensorflowとstatsmodelsはインストールしておいても良いでしょう。どちらもQuantXにも採用されています。
TA-Lib インストール時の注意点
TA-Libは株式に関するテクニカル指標を算出する際に使います。QuantXでは当然ながら多用するライブラリなのでインストールしておきましょう。
1 2 | $ brew install ta-lib #先にbrewでta-libをインストールする $ pip3 install ta-lib |
TA-LibはHomeBrewでのインストールも必要なようです。これに気がつかずエラーでハマりました。
ついでにProphetのインストールも記載します。
1 | $ pip3 install fbprophet |
時系列予測ツールProphet(予言者)で日経平均を予測する
ProphetはFacebookが開発した時系列予測のライブラリーです。
Prophetとは予言者という意味です。誰でも簡単に時系列分析をして将来を予測できるという気持ちが込められています。
実際使って見るとデフォルト設定でもそこそこの精度を出すというお手軽なツールだとわかります。そのため今回の記事では、時系列予測に関する難しい話はしません。
最低限知っておいた方が良いProphetの知識として単純化して説明します。Prophetは、過去データを次の3つの観点で分析し、その結果として将来を予測します。
- トレンド(例:アクセス増加傾向)
- 周期性 (例:夏多く、冬少ない)
- イベント(例:新機能をリリース)
facebookが開発したツールです。当然WEBのアクセス数の予測での利用を想定していたものです。(カッコ内はWEBを想定した例です)
日経平均のデータを取得する
分析するための準備としてデータを取得する必要がありますが、日経平均の過去データの取得は以外とハードルが高いです。
今回は簡易的に日経平均連動のETFである「ダイワ 上場投信-日経225」を代替として分析します。
データは「株式投資メモ」の個別株価データのページから「1320 ダイワ 上場投信-日経225」で取得できます。
年度ごとにCSVファイルにダウンロードできるため、比較的大量データを簡単に取得できます。
どうしても日経平均の値が良いという人は、海外のYahoo Financeから過去データを入手することも可能です。
https://finance.yahoo.com/quote/%5EN225/history?ltr=1
「株式投資メモ」とはデータの並び順が違うため、今回例示するソースコードそのままでは使えません。気をつけてください。ちなみに予測結果は、どちらを使ってもほとんど同じです。
データ期間:2014-01-016〜 2018-06-15
日付 | 始値 | 高値 | 安値 | 終値 | 出来高 | 終値調整値 |
2014-01-06 | 16440 | 16470 | 16180 | 16230 | 381992 | 16230 |
2014-01-07 | 16140 | 16260 | 16100 | 16130 | 288940 | 16130 |
2014-01-08 | 16280 | 16460 | 16230 | 16460 | 204036 | 16460 |
今回は日付と終値調整値を使います。
これから記載するプログラムは、ダウンロードしたファイルをそのままの形式で利用できます。下手に加工すると動きません。
Prophetで動かしてみよう!
プログラムを解説します。
1 2 3 4 | import pandas as pd import numpy as np import matplotlib.pyplot as plt from fbprophet import Prophet |
利用するライブラリーの宣言部分です。こんなものだと思っておいてください。
1 2 3 4 5 6 7 8 9 | data = pd.DataFrame() start = 2014 end = 2018 for n in range(start, end+1): file_name = '1320_' + str(n) + '.csv' data2 = pd.read_csv(file_name, skiprows=2, encoding="cp932",header=None, names=['ds','Open','High','Low','Close','Volume','y']) data = data.append(data2) |
ファイルの読み込み部分です。ここで注意点。
Prophetで解析するには、日付部分を「ds」、値を「y」と定義する必要があります。そのためわざわざ名前をつけています。
ファイルのヘッダ部分の読み飛ばしとかエンコードとかは、とりあえずこのまま利用してもらえればOKです。
違う株価を予測したい場合、ファイル名や年度が違うと思うので、その辺りは適当にいじってください。
1 2 | model = Prophet() model.fit(data) |
Prophetのモデルを作って過去データを分析するところです。おまじないと思っていただいて良いでしょう。
1 2 3 | future_data = model.make_future_dataframe(periods=200, freq = 'd') future_data = future_data[future_data['ds'].dt.weekday < 5] forecast_data = model.predict(future_data) |
将来の予測データを作るところです。今回は200日先までを予測しています。freq=‘d’が日付を表しています。
2行目は、土日のデータを予測しないように日付を省く処理です。これを入れないと変な予測になります。
本当は祝日も省いた方が良いと思いますが、そこまではしていません。
1 2 3 | fig = model.plot(forecast_data) model.plot_components(forecast_data) plt.show() |
最後にグラフをプロットするところです。
componentsを出力すると、分析されたトレンドや周期を見ることができます。全体のソースは下記です。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 | import pandas as pd import numpy as np import matplotlib.pyplot as plt from fbprophet import Prophet data = pd.DataFrame() start = 2014 end = 2018 for n in range(start, end+1): file_name = '1320_' + str(n) + '.csv' data2 = pd.read_csv(file_name, skiprows=2, encoding="cp932",header=None, names=['ds','Open','High','Low','Close','Volume','y']) data = data.append(data2) model = Prophet() model.fit(data) future_data = model.make_future_dataframe(periods=200, 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) plt.show() |
わずか20行で日本の未来を予言!
実行して日経平均の予測を見る
実行はターミナルで下記のコマンドを打ちます。
1 | $ python3 prophet_sample.py |
成功すれば、次のグラフが表示されるはずです。

ぱっと見は、うまいこと予測できてそうな雰囲気です。
2018年の年末は日経平均26,000円になります!
この記事を書いているのは、2018.6.15です。

まとめ

今回はMacにPythonでAIを勉強するための実行環境をインストールする、Prophetを使って日経平均を予測する、という2つにトライしました。
Prophetはfacebookが開発した予言者になれる簡単なツールです。
本当はもうちょっと改良したりしてますが、その辺りは別の記事にします。
それでは!
※投資判断は自己責任でお願いします。
