트렌드 분석 - 시퀀스-시퀀스평균 시퀀스트렌드 레이블링
이때까지는 단순하게 하루의 등락만을 가지고 레이블링을 진행해 왔다. 하지만 하루의 등락만을 다루기에는 너무나 변수들이 많고 작은 변화에도 등/락이 쉽게 결정되어버리고 만다. 따라서 예측이 어렵기도 하고 모델에서도 좋은성능을 내기 어려울 것이라는 생각을 했다. 그래서 한 시퀀스에 대해서 이후 등락을 레이블링 할때 단순히 시퀀스 이후 하루의 등락만을 사용하지않고 트렌드를 판단하는 부분 역시 일정한 길이의 시퀀스와 비교하는 방식의 시도해 보기로 했다.
일정한 시퀀스 길이를 정하고 그 시퀀스 기간의 종가 평균을 트렌드 판단의 기준으로 삼았다.
def seq_seq_trend(csv_path, seq_len, trend_len, gap=0, seq_mode, trend_mode):
print("Creating label . . .")
print("type : Sequence to Sequence")
print("sequence_length : {}, trend_sequence_length : {}, gap : {}".format(seq_len, trend_len, gap))
# 데이터프레임으로 일일주가데이터 불러오기, 결측치 제거
df = pd.read_csv(csv_path, parse_dates=True, index_col=0)
df.fillna(0)
df.reset_index(inplace=True)
df['Date'] = df['Date'].map(mdates.date2num) # Y-M-D 포멧에서 num 포멧으로 변경
# 파일을 저장할 디렉토리 명과 파일이름 지정
filedir = os.getcwd() + '\\dataset\\labeled_data\\'
filename = "{}_label_seq{}_tseq{}.txt".format(csv_path.split('\\')[-1][0:-4], seq_len, trend_seq_len) # ex) KRX_005930_label_seq30_tseq10
filepath = filedir + filename
# 디렉토리가 없을시 생성, 같은이름의 파일 제거
if not os.path.exists(filedir):
os.makedirs(filedir)
removeOutput(filepath)
# 레이블링
for i in range(0, len(df)-int(seq_len)-1):
tmp_df = df.iloc[i:i + int(seq_len)+1] # seq_len+1 만큼 데이터프레임 슬라이싱
starting = int(tmp_df["Close"].iloc[-2]) # seq 마지막날 종가
endvalue = int(tmp_df["Close"].iloc[-1]) # seq 다음날 종가
tmp_rtn = endvalue / starting - 1
if tmp_rtn > 0:
label = 1
else:
label = 0
# 레이블링한 sequence를 한 라인으로 파일에 입력
with open(filepath, 'a') as the_file:
the_file.write("{}--{},{}".format(filename[0:-4], i, label))
the_file.write("\n")
print("Create label finished.")
return filepath