DeepLearning을 이용한 주가 예측(정답 데이터 작성)

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 개 이상의 데이터가 없기 때문입니다.

이 코드를 기반으로 작성한 히스토그램은 다음과 같습니다.



흠, 전체적으로 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으로 분류하겠습니다.

좋은 웹페이지 즐겨찾기