머신러닝 프로젝트 – LSTM을 이용한 주가(KODEX200) 예측하기.

머신러닝 프로젝트 – LSTM을 이용한 주가(KODEX200) 예측하기.

2018년 October 19일 7 By SUNGMIN

머신러닝 중 LSTM을 이용하여 주가를 예측하는 프로젝트를 시도해보았다.

 

프로젝트 목차.

 

해당 프로젝트의 목표는 2015.12.07에서 2018.05.18 사이의
KODEX200 시가, 고가, 저가, 종가 데이터를 이용하여 2018.05.21의 종가를 예측하는 것이다.

 

또한 이프로젝트를 진행한 이유는 LSTM에 대한 실습 공부와 Normalization 적용, 신경망 크기 차이에 따른 비교를 알아 보기 위해서 이다.

 

사용할 csv 데이터.
위 부터 아래로 날짜순 정렬 하고 왼쪽에서 오른쪽으로 시가, 고가, 저가, 종가로 정렬한다.
그 후 날짜와 항목이 나와있는 열과 행을 제거한 후 csv 파일로 저장한 것.

 

학습에 사용 할 입력 데이터(x)와 결과(y) 데이터를 위에서 저장한 csv 파일을 통해 가져온다. 그 후 reshape과 최대값으로 나눈다.
학습률 = 0.005로 설정하고 학습 모델을 생성한다.

 

신경망의 구조.
2048크기의 LSTM 신경망 사용. 1크기의 활성화 함수가 linear인 Dense를 사용하여 결과 출력. rmsprop와 mse를 사용한다.

 

학습을 실행하는 코드와 예측을 실행하는 코드.
예측 실행시에도 예측 할려는 데이터에 학습데이터에 나눴던 x의 최댓값으로 나누고 예측 된 결과에 다시 y의 최댓값을 곱해준다.

 

실제 종가와 모델의 학습 된 종가의 그래프를 보여주는 코드.

 

Main 부분.

 

학습률 0.05로 100 epoch 학습 시킨 결과.
loss는 0.0030이다.
예측 된 종가는 31789.6원 이고 실제 종가는 31645원이다.

 

입력 데이터와 출력 데이터에 최댓값으로 나누기 전과 후의 코드.

 

입력 데이터와 출력 데이터에 최댓값으로 나누기 전과 후의 결과.
최댓값을 나눈 경우의 loss가 낮다. 그래프로도 비교 해 볼 필요가 있다.

 

입력 데이터와 출력 데이터에 최댓값으로 나누기 전과 후의 그래프.
최댓값을 나눈 경우의 그래프가 실제-예측 그래프의 유사도가 훨씬 높은 것을 알수있다.

 

최댓값을 나누기 전과 후의 결과 차이에 대한 견해.
(아직 지식이 미흡하기 때문에 틀릴 수도 있다.)

 

신경망의 크기가 2048인 경우와 1024인 경우의 코드.

 

신경망의 크기가 2048인 경우와 1024인 경우의 결과.

 

신경망의 크기가 2048인 경우와 1024인 경우의 그래프 형태.
그래프의 차이는 눈으로 구분하기 어렵다.

 

신경망 크기의 차이에 따른 결과 차이에 대한 견해.
(개인적인 견해이므로 틀릴 수 있음.)

 

결과(개인적인 견해).

 

느낀점 & 배운점.

 

읽어 주셔서 감사합니다~

코드나 csv 파일이 필요하신 분들은 댓글을 남겨주세요.

 

아래는 PPT 파일입니다.

PPT파일은 자유롭게 사용하셔도 되나 저작권 표기는 꼭 해주세요. ㅎㅎ

 

LSTM_Project_PPT

 

아래의 github 에서 코드를 받아 보실 수 있습니다.

https://github.com/MLlounge/ML-Project/tree/master/Basic%20Project/LSTM%20-%20Predict%20stock