트렌드 분석 - 시퀀스-시퀀스평균 시퀀스트렌드 레이블링

이때까지는 단순하게 하루의 등락만을 가지고 레이블링을 진행해 왔다. 하지만 하루의 등락만을 다루기에는 너무나 변수들이 많고 작은 변화에도 등/락이 쉽게 결정되어버리고 만다. 따라서 예측이 어렵기도 하고 모델에서도 좋은성능을 내기 어려울 것이라는 생각을 했다. 그래서 한 시퀀스에 대해서 이후 등락을 레이블링 할때 단순히 시퀀스 이후 하루의 등락만을 사용하지않고 트렌드를 판단하는 부분 역시 일정한 길이의 시퀀스와 비교하는 방식의 시도해 보기로 했다.

일정한 시퀀스 길이를 정하고 그 시퀀스 기간의 종가 평균을 트렌드 판단의 기준으로 삼았다.


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

Updated: