6-12 랜덤한 Stock Price RNN(Recurrent Neural Network) 학습과 예측

codingart(66)
Published in
#kr
Words
425
Reading
2 min
Listen
Play
7y

noname10.png

대단히 불규칙해 보이는 데이터를 바탕으로 앞으로의 증권 가격(Stock Price) 예측을 위한 Many To One RNN 모델을 코딩해 보자. 이 RNN 예측 머신 러닝 모델은 미세먼지 예측이라든지 인구분포 예측 및 Speech Recognition을 비롯 다양한 응용이 있는 흥미로운 모델이다.

noname01.png

인터넷 검색에서 sculit-learn 라이브러리를 사용하는 많은 예제 데이터를 찾을 수 있으나 여기서는 TensorFlow 와 Numpy를 사용하는 유튜버 Sung Kim의 예제를 다루어 보도록 하겠다. 이 예제에서는 증권가격 학습 및 테스트를 위한 엑셀 데이터 파일을 같은 폴더 안에 두고 사용함에 유의하자.

noname02.png

이 코드에서는 pandas 라이브러리를 사용하지 않고 numpy를 그대로 쓰고 있으므로 읽어 들인 증권 데이터를 거꾸로 재배열 하는 과정을 체크해 보자. 사용하는 np 명령은 간단하게 xy[::-1] 이다.

noname03.png

거꾸로 재배열 후 함수 MiniMaxScaler를 사용하여 데이터를 0.0∼1.0 사이로 normalization 시킨다. 예제코드에서 읽어 들이는 엑셀 csv 데이터는 아래와 같이 5개의 컬럼으로 이루어진다.

noname04.png

함수 내부를 관찰해 보자. np.max(data,0) 명령에서 data는 array이며, 0은 axis=0을 뜻하며 아래 방향 즉 컬럼 방향으로 최대값을 찾는다는 의미이다. 즉 컬럼 별로 normalization 이 이루어진다.

이 증권가격 데이터 구조는 5개의 컬럼으로 이루어지는 각 열(row) 당 5개 데이터이므로 data_dim = 5 로 두고 7개씩의 열을 sequence로 즉 seq_length = 7 로 둔다. 따라서 이 7개의 데이터 중 종가를 기준으로 8번째에 해당하는 종가를 Many To One 형태로 학습과 테스트를 하도록 한다. row 값을 +1만큼 증가시키면서 데이터가 끝날 때 까지 Loop를 실행하여 Session에서 batch job을 위한 dataX 와 dataY 파일을 구성한다.

noname05.png

학습과 테스트를 위한 데이터 사이즈를 아래와 같이 7:3으로 구성해 보자.

noname06.png

Session에서 사용할 feed_dict placeholder의 shape 을 설정하자. cell 은 BasicLSTMCell 을 사용하여 dynamic.rnn 에 제공한다. 아울러 이 예제에서는 hidden_dim = 10 으로 설정하여 각 셀에서 10개의 출력 값을 얻을 수 있지만 마지막 7번째 셀의 출력만을 fully connected 에 입력하여 하나의 출력 값 즉 그 다음 종가를 학습하도록 한다.

Softmax 와 유사한 Fullyconnected를 사용하지만 최종 출력 데이터 값이 하나이기때문에 cost(loss) 함수는 간단한 최소제곱법을 사용하기로 하자. optimizer는 효율적인 AdamOptimizer를 사용한다.

noname07.png

학습이 아닌 테스트 과정에서 사용할 루틴을 대상으로 Computational Graph를 설정하자. 즉 테스트 True 값 targets, 테스트 예측 값 predictions 이며 학습 때와 마찬가지로 최소제곱법을 사용하여 테스트 한다.

noname08.png

Session에서 학습을 진행하고 이어서 테스트를 시행한다. 그 방법은 teㄴㅅㅌ 를 사용하여 Y_pred 즉 fully-connected 루틴을 사용하여 test_predict를 계산하는 것이다. 이어서 testY 와 test_predict를 사용하여 최소제곱법에 의해서 cost 함수값 구하듯이 rmse 값을 계산한다.

noname09.png

계산 결과가 구분이 안갈 정도로 정확하다. 이 예제에서 관심을 가져야 할 점은 train_size를 어느 정도로 가져가야 하는 문제인데 0.7에서 단계 별로 0.1 수준까지 각자 조정해 보기 바란다. 학습 크기 비율이 너무 작아지면 예측 결과가 무너지는 결과를 낳게 된다.

noname10.png

이 예제를 돌려 보기 위한 코드는 필자의 외부 블로그인 아래 url 주소에서 다우받아 사용하기 바란다. 단 엑셀 데이터 파일과 파이선 코드를 같은 폴더에 두도록 한다. 아울러 파이선 토드 다운 로드 시에 indentation 훼손 여부를 반드시 확인해 보기 바란다.

http://blog.daum.net/ejleep1/760

마나마인로고.png

6-12 랜덤한 Stock Price RNN(Recurrent Neural Network) 학습과 예측 | Ecency