LoginSignup
1
3

More than 3 years have passed since last update.

DeepLearningを用いた株価予測(正解データ作成)

Posted at

DeepLearningを用いた株価予測(正解データ作成)

前回の続き

前回の回で株価のデータを加工したので,今回はその加工データをもとに正解ラベルを振っていこうと思う.
と言っても,やることは単純で今回やりたいことは2か月分のデータを元にその先1か月後に上昇しているかどうか.つまり,2か月時点のデータ(40点目)と3か月後のデータ(60点目)を比較し,高いか低いかによって正解ラベルをあたえてやればよい.

ただ気になる点が1点.
どうせ,正解ラベルを振り分けるのであれば,上昇5割・下降5割と正解ラベルごとのデータ数に偏りを持たせないことがベスト.
正直なところ上昇する株価を見極めればよいので,株価が1.1倍以上上昇したものとそれ以外で分類しても何ら問題は無い.そこでまずは株価の上昇比率を簡単に可視化することにする.

データの可視化

今回は株価の上昇比率をmatplotlibのhistを使用して可視化していこうと思う.

# -*- coding: utf-8 -*-

import os
import pandas as pd
from decimal import Decimal, ROUND_HALF_UP
import matplotlib.pyplot as plt

PATH = "shapeInfo/totalData/"
BASE_POINT = 40
MAX_RANGE = 2

def makeHistgram():
    csv_list = os.listdir(PATH)
    y_li = []
    for csv in csv_list:    
        df = pd.read_csv(PATH + csv, encoding="shift-jis")
        y = Decimal(str(df.iloc[len(df) - 1]["終値"])) / Decimal(str(df.iloc[BASE_POINT]["終値"]))
        y = y.quantize(Decimal('0.01'), rounding=ROUND_HALF_UP)
        y_li.append(float(y))   
    fig = plt.figure()
    plt.hist(y_li, bins=16, range=(0, MAX_RANGE))
    plt.show()
    #グラフの保存
    fig.savefig("hist.png")

def main():
    makeHistgram()


if __name__ == '__main__':
    main()

比較の対象は正直,高値でも始値でもなんでも良かったのだが,とりあえずは終値で統一することにした.
また,MAX_RANGEを2としているのはこの処理を実行する前に比率の最大値を取得したのだが,2を超えるデータが存在しなかったためである.

このコードを元に作成したヒストグラムが以下のとおりである.
hist.png
hist.png

うーん,全体的に1周辺に集まっており,上昇している株と下降している株が均等にあうような気がする.
そこで実際に数をカウントしてみたところ,上昇株2264個に対し,下降株は2291個であった.
アベノミクスの影響で2015年から上昇傾向にあったため,てっきり上昇株のほうが多いと思っていたが,今回のコロナショックの影響もあってかほぼ同数という結果が得られた.

正解ラベルの振り分け

では上記結果を踏まえたうえで,単純に上昇株と下降株に正解ラベルを振り分けていこうと思う.
今回の振り分けにはディレクトリの階層を用いることとする.

# -*- coding: utf-8 -*-

import os
import pandas as pd

PATH = "shapeInfo/totalData/"
BASE_POINT = 40
OUTPUT_PATH = "shapeInfo/"

def classification():
    csv_list = os.listdir(PATH)
    for csv in csv_list:    
        #カラム行は2行目から
        df = pd.read_csv(PATH + csv, encoding="shift-jis")
        #2か月時点で株価(終値)が1か月前より上昇していた場合、"1"、加工していた場合"0"に正解ラベルを振り分ける
        x = '1' if df.iloc[len(df) - 1]["終値"] > df.iloc[BASE_POINT]["終値"] else '0'
        df.to_csv(OUTPUT_PATH + x + '/' + str(csv))

def main():
    classification()

if __name__ == '__main__':
    main()

上昇株は"1"のディレクトリに下降株は"0"のディレクトリにこれで格納された.
次回はこのデータをもとに早速,DeepLearningで分類していこうと思う.

1
3
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
3