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

원숭이 투자자(MT)를 만들면서 드디어 알아낸 문제점

by 인터넷떠돌이 2018. 11. 5.
반응형

안녕하세요?


이번 포스팅에서는 지난번에 약속한 대로, 원숭이 투자자(MT)라고 해서 주식투자를 하는데 완전히 랜덤한 행동만을 하는 투자자를 만들어 보는 과정을 포스팅 하고자 합니다. 그런데 이 과정에서 저도 여기가 문제가 있다는 것을 몰랐는데, 생각지도 못한 문제가 노출되었고, 이를 수정하는 과정을 올리고자 합니다.



일단 원숭이 투자자를 만들기 위해서, 이걸 1000번이나 할 필요는 없기 때문에, 그냥 에포크의 숫자는 10회로 만들어 주도록 하고, 시작시 무작위 행동비율 epsilon은 1로 주어서 100%라는 것을 의미하게 되었습니다.



다음으로는 정책 신경망학습으로 나온 결과를 파일로 저장=모델을 생성하는 부분과 비학습 투자 시뮬레이션을 하는 부분을 모두 주석으로 처리를 하였습니다.



policy_learner.py로 가서, 여기서도 설정을 바꾸어 주는데, 가장 중요한 것이 바로 learning이라는 부분을 바로 false로 바꾸어서, 학습이 진행되지 않도록 만들어 주도록 합니다.




일단 첫 시도를 했습니다. 그런데 문제가 나왔는 것이, 분명히 저는 무작위 행동을 하는 원숭이 투자자라고 했는데, 무슨 buy만 3회 시도를 했지, 나머지 sell행동을 하지 못했다는 것을 볼 수 있는데, 이럴 확률이 도데체 몇 %일까요? 저는 분명히 어디선가 문제가 발생한 것이 아닌가 하는 생각이 들었습니다.



먼저 저는 주목을 한 곳은 agent.py라고 에이전트 모듈에서 랜덤으로 행동을 출력하는 부분입니다. 이전에 포스팅을 보시면 알 수 있지만, 0번은 매수, 1번은 매도, 2번은 관망이라는 행동을 정해놓고, 그 행동의 영역에 오면 행동을 하는데, 문제는 이대로 하면 코드가 np.random.randit(0,2)라고 해서 0,1만 생성을 하는 것으로 생각을 했습니다.



여길 어떻게 해봐도 여전히 sell은 전혀 나오지 않는 문제점이 발생했습니다. 뭐라고 해야 할까요? 원숭이 투자자를 만들려고 했는데, 무언가 뇌없는(?) 원숭이 투자자가 나온 상황이 되었습니다.



그래서 이번에는 actions라는 항목에다가 위 스크린샷처럼 hold를 추가 시켜 보도록 했습니다.



그래서 이제는 act라고 해서 투자자의 행동을 결정해 주는 메소드에서 원래는 fi not self.validate_action(action): 이라고 되어 있는 부분에서 not을 빼 보았습니다.




그러자 이번에는 buy는 한개도 없고 오로지 판매하거나 관망만 하는 또 다른 종류의 이상한 원숭이 투자자.... 뭐라고 해야 할까요? 원숭이 투자자 자체도 뇌가 없다는 의미지만, 이건 더 뇌가 없는 좀비 원숭이(?)투자자가 나왔습니다.



그래서 파이썬의 코드를 단순 무식하게 바꾸어 보았습니다. 저 코드의 의미는 상단에 있는 validate_action()이라는 매소드에서 충분이 구매가 가능하거나 판매가 가능하면 행동을 true로 하고, 아니면 false라는 행동을 하라는 것인데, 구매할 돈이 없거나 판매할 주식이 없으면 관망을 하라는 의미로 저렇게 코드를 단순 무식하게 바꾸어 주었습니다.



그러자 이제야 제대로 판매랑 구매를 진행하는 제대로 된 원숭이 투자자가 나오는 것을 볼 수 있었습니다. 이런 것으로 봐서는 이제까지 했던 모델 만들기가 뭐였는지 알만 합니다.


휴먼 에러로 인해서 


제대로 돌아간 것이 


한개도 없다.


라는 결론입니다.

반응형