본문 바로가기
무모한 도전-주식 인공지능 만들기

RLtrader의 제작 part3

by 인터넷떠돌이 2018. 10. 19.
반응형

안녕하세요?


지난번 포스팅에서 RLtrader의 환경 모듈과 정책 네트워크를 만드는 과정까지를 포스팅 하였습니다. 원래라면 이번 포스팅에서 남은 모듈을 다 만들려고 했습니다만, 너무 내용이 길고 어려워서 다 만드는 것은 어려웠습니다. 그래서 하는 수 없이 남은 모듈을 남겨두고, 포스팅의 내용도 너무 길어서 중간에 끊어야만 했습니다.


먼저 위 그림은 이 RLtrader에서 사용할 기계학습의 모습을 대략적으로 나타낸 모식도입니다. 이 기계학습에서 입력층은 17차원이라고 하는데, 이는 학습 데이터 15개와 에이전트 상태 2개를 합쳐서 17차원이 되었습니다. 그리고 은닉층의 수와 차원은 조절할 수 있으며, 마지막 출력층에서는 투자 행동인 매수나 매도, 2가지 행동이 나오기 때문에 이렇게 지정을 하였습니다.



그래서 이번에는 만들고자 하는 것은 정책 신경망 모듈이라고 해서, 주식 데이터(sample)이 제공되었을 때, 매수 또는 매도 할 것인지를 결정하는 에이전트의 뇌와 같은 역할을 합니다. 위 스크린샷에서는 이 정책 신경망(policyNetwork)의 클래스 시작 부분으로, 사용하는 주 속성은 model과 prob 두가지가 있는데, model은 케라스 라이브러리로 구성한 LSTM 신경망 모델이며, prob는 가장 최근에 계산한 투자 행동별 확률이라고 합니다.


여기서 보시면 LSTM이라는 것이 보이실 것은데, 그 뒤에 붙는 256이 바로 기계학습을 하기 위한 은닉층의 차원갯수이며, dropout이라는 수치는 0.5-> 50%로 두어서 과적합이 되는 문제를 해결하기 위해서 두었습니다. 그리고 25번째 줄에 나오는 SGD는 확률적 경사 하강법이라고 하는 기본 학습 알고리즘입니다.




다음은 이 정책 신경망 모듈에서 사용이 될 주요 함수를 코딩한 스크린샷입니다. 여기서 reset()은 prob 속성을 초기화 시키는 메소드이며, predict()는 신경망을 통해 투자 행동의 확률을 계산합니다. 그리고 train_on_batch()메소드는 배치 학습을 위한 데이터를 생성 시키며, save_model()은 학습한 신경망을 파일로 저장하며, load_model()은 파일로 저장한 신경망을 불러오는 역할을 합니다.



다음으로는 시각화 모듈이라고 해서, 기껏 기계학습으로 얻어낸 결과가 얼마나 되는지를 수치만 보고서는 해석하기 어렵기 때문에, 이를 시각적으로 나타내기 위해서 만드는 모듈을 코딩하기 위한 과정에 들어갑니다. 위 스크린샷은 코딩이 완성되었을 경우 결과를 어떠한 방식으로 그려낼 것인지를 대략적으로 보여주는 그림입니다.



먼저 주식의 일봉차트를 쓰기 위해서 mpl_finance라는 라이브러리를 가져와야 하는데, 이게 matplotlib에 원래는 기본적으로 포함이 되어 있다가 2.0버젼부터 따로 떨어져 나왔다고 합니다. 그래서 하는 수 없이 아나콘다 프롬프트(anaconda prompt)에서 위 스크린샷처럼 pip명령어를 이용해서 설치를 해 주어야 합니다.




제대로 설치가 되었다면, 위 스크린샷처럼 python을 실행시켰을 경우, import mpl_finance를 가지고 왔을 때, 아무런 에러 메세지가 나오지 않는 것으로 생각을 합니다. 이런 식으로 mpl_finance를 제대로 만드는 것에는 성공하였고, 이제 다음은 가시화기 모듈(visualizer)를 코딩하기 위해서 본격적으로 들어가 보아야 합니다.



우선 이 가시화기 모듈에서는 fig라고 캔버스 같은 역할을 하는 matplotlib의 Figure클래스의 객체를 의미하는 속성이 있고, 다음으로는 axes라고 해서 차트를 그리기 위한 matplotlib의 axes클래그 객체가 속성으로 사용이 되었습니다. 그리고 다음으로는 한번만 그려도 되는 일봉차트와 같은 주식 데이터는 한번만 호출이 되는 prepare()를 사용했으며, 연속해서 불러와야 할 나머지 차트는 plot()이라는 사용자 정의 함수를 사용합니다.


일단 너무 포스팅의 내용이 길어 졌기에, 여기서 한번 끊어 보도록 하겠습니다. 나머지 내용은 part4에서 마져 포스팅을 하도록 약속을 드립니다.

반응형