2015년 4월 26일 일요일

신경망을 이용한 경제(주식) 예측 코드 한번해보기

앞서 http://swlock.blogspot.kr/2014/11/blog-post.html 여기에서 http://www.codeproject.com/Articles/175777/Financial-predictor-via-neural-network 를 이용하여 코드를 분석하였습니다.
실제는 어떤지 한번 우리나라 데이터를 넣어서 테스트 한번 해보도록 하겠습니다.

기억이 날지 모르겠지만,
앞에서는 아래표에서 처럼 40개의 입력과 4개의 출력을 가지도록 되어 있습니다.
#12...1011
NASDAQ2288.552301.66...2231.65?
DOW12376.7212319.73...12350.61?
S&P5001110.881112.92...1099.5?
PIR3.253.25...3.25?

비슷하게 하기 위해서는 주식 데이터와 금리 데이터가 필요합니다.
그런데 자료를 구하기 힘들기 때문에 HTS의 저장기능을 이용해서 자료를 준비하였습니다.
HTS에서 일반적으로 엑셀로 저장하는 기능이 있습니다.


구한 자료는 KODEX 레버리지, KODEX 인버스, KOSPI 3개로 하였습니다.
엑셀 프로그램이 없으면 아래와 같이 오픈 office를 설치하여 자료를 변환 하였습니다.


자료는 일반적으로 tab이나 콤마로 구분되는데 그런 부분은 hts에 따라서 다릅니다.
엑셀같은 프로그램에서 해당 데이터를 가져오면 조작을 다시한번 해야합니다.

아래는 코스피 데이터를 가져왔습니다. 이중에 종가 기준으로 데이터를 넣는다고 했을때 종가만 나두고 나머지데이터는 삭제해야 합니다.

그래서 코스피외 나머지 자료도 모아서 하나의 엑셀에 담았습니다.

기간도 2010/05 부터 2014년 까지 자료를 train으로 하고 2015데이터를 test 데이터로 만들어서 진행하였습니다.

데이터를 위와같이 모았으면, MBP 툴에서 사용할 수 있도록 데이터를 만듭니다.
지표를 3개로 하고 10개씩 입력하면 3*10=30 X의 갯수는 30개가 되고 Y는 각각의 출력을 한다고 봤을때 3개를 두면 됩니다. 물론 1개여도 관계는 없지만, 위의 예를 참고로 만드는 것이니 비슷하게 하도록 하겠습니다.
입력 데이터는 아래 내용중 오른쪽에 33개 데이터를 다시 CVS형태로 변환 합니다.


train용 입력데이터는 아래와 같습니다.
X1,X2,X3,X4,X5,X6,X7,X8,X9,X10,X11,X12 ...
9565,9635,9120,9250,9570,9800,9950,9890,10340,10360,...
9635,9120,9250,9570,9800,9950,9890,10340,10360,10005,9955...
...

node는 30-30-15-8-3으로 하였습니다.

MBP 프로그램을 이용하여 train중인 화면입니다. train 데이터를 입력하였습니다. 툴사용하는 방법에 대해서는 이미 이전에 작성한 내용을 참고하시기 바랍니다.


시간이 많이 흐를수록 에러수치가 떨어지게 됩니다. configuration을 어떻게 하느냐에 따라 오래걸릴 수도 있고 적당한 시점에 stop버튼을 눌러도 됩니다. (어차피 테스트용이니...)

결과를 넣은 데이터 입니다.
보는 방법은 아래의 x축은 test  데이터의 순번을 의미합니다 즉 빨간색과 검은색 수치의 차이가 오차를 의미합니다.

앗 생각해보니 정규화를 안했네요.
최대 최소값을 읽어서 해당범위의 값으로 바꾸면 모든 수치가 0~1 사이의 범위에 있게 만들어 지는데 이 과정을 정규화라고 합니다.
(X-최소)/(최대-최소) = 0~1 범위의 숫자가 나옵니다.
정규화 데이터를 이용해서 새로 만들겠습니다.



이걸 결과를 돌리면 아래와 같이 나옵니다. 시간이 오래걸려서 중단시킨상태에서 test를 하였습니다.
정규화된 데이터라서 다시 최대 최소 값을 이용해서 원본값을 찾아내야 합니다.






댓글 없음:

댓글 쓰기