ディープラーニングで株価を予測する
- 2019.12.01
- Deep Learning Python

参考論文
ディープラーニングで株価の予測できないかなと思っていたところ、下記の論文を見つけました。
Using Deep Learning Neural Networks and Candlestick Chart Representation to Predict Stock Market
内容はかなり簡単でディープラーニングの構造もかなり単純なものだったので、試してみました。
概要
内容としては、ロウソク足チャートの画像を入力として、ディープラーニングで株価が上がるか、
下がるかを予測するというものです。
ロウソク足チャート自体の保存自体は前の記事で既に出来ています。
https://oki-lab.net/entry/2019-11-30-171422
プログラム
kerasで実装したのが下記のプログラムです。
Jupyter Notebookで試行錯誤的に作ったものを貼り付けているので、
色んな所でライブラリをimportしていますが気にしないでください。
なお、画像サイズが64×64となっていたり、出力の活性化関数がSoftmaxになっていて
論文と違いますが、こっちのほうが結果が良かったのでそうしています。
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 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 |
import cv2 import sys import os.path import glob import numpy as np img_size = 64 out_num = 2 paths=glob.glob("train_img/*") img_num=len(paths) train_x = np.zeros((img_num, img_size, img_size, 3)) cnt=0 for path in paths: image=cv2.imread(path)/255.0 image=cv2.resize(image, (img_size, img_size)) train_x[cnt,:]=image cnt+=1 from keras.layers.convolutional import Conv2D, MaxPooling2D from keras.layers.core import Dense from keras.layers import Input, Dropout, Flatten, Softmax from keras.models import Model from keras.optimizers import Adam inputs=Input((img_size, img_size,3)) x = Conv2D(32, (2, 2), padding='same', activation='relu')(inputs) x = MaxPooling2D(pool_size=(2, 2))(x) x = Conv2D(48, (2, 2), padding='same', activation='relu')(x) x = MaxPooling2D(pool_size=(2, 2))(x) x = Dropout(0.5)(x) x = Conv2D(64, (2, 2), padding='same', activation='relu')(x) x = MaxPooling2D(pool_size=(2, 2))(x) x = Conv2D(96, (2, 2), padding='same', activation='relu')(x) x = MaxPooling2D(pool_size=(2, 2))(x) x = Dropout(0.5)(x) x = Flatten()(x) x = Dense(256)(x) x = Dropout(0.5)(x) x = Dense(512)(x) #outputs = Dense(out_num)(x) x = Dense(out_num)(x) outputs = Softmax()(x) model=Model(input=inputs, output=outputs) from keras.utils import np_utils train_y = np_utils.to_categorical(np.loadtxt("output.csv")) model.compile(loss = "categorical_crossentropy", optimizer = Adam(lr=1e-3), metrics = ["accuracy"]) batch_size=64 epoch_num=100 history = model.fit(train_x, train_y, batch_size = batch_size, epochs = epoch_num) |
学習に使う画像はtrain_imgというフォルダに保存されているとして、それを読み込んで
入力データとしてしています。更に、csvファイルには上がるか下がるかを0と1で保存しておいて、
出力データとして使います。入力画像は下記のような感じです。
学習結果
上記のプログラムで学習した結果が下記のとおりです。学習したデータに対して67%の精度です。
学習回数を増やすとどんどん上がっていきますが、過学習になるのでこれくらいでやめています。
そして、学習に使っていないテストデータに対して試した結果が下記のとおりです。
55%なのでランダムよりは少しマシかなと言う程度でした。
論文では90%くらいの精度なので、全然違う結果です。
所感
正直、株価や為替をディープラーニングで予測しようというのはみんなやろうとしていますが、
流石にこんな単純な方法では無理なんじゃないかと実装前から思っていました。
案の定な結果だったので、そんな楽して儲けるのは無理ですね。
-
前の記事
Yahoo Financeから株価を取得してローソク足チャートを表示する 2019.11.30
-
次の記事
Anker Eufy RoboVac 11S (ロボット掃除機)レビュー 2020.01.06