brunch

You can make anything
by writing

C.S.Lewis

by 첨물 Jun 18. 2017

R을 이용한 인공지능 테스트해보기

과거의 행적으로 미래를 예측하기

'시간'

21세기에 들어와서 인간은 더 이상 자연현상에 대한 두려움을 가지지 않게 되었고

'신'의 이름으로 자행되는 '폭력'을 '법'이란 테두리로 관리할 수 있게 되었다.

그러나 인류가 시작한 이후로 미래를 예측하는 능력에 대한 동경은 주술사가 활동하던 부족사회나 인공지능이 활동하는 현대나 동일하다.


물리학의 매력은 자연의 법칙을 파악하고 시간 변수를 넣어 수식으로 만들 수 있다는 것이다. 초기 조건만 안다면 미래에 무슨 일이 일어날 것인지를 예측하는 학문을 통해 야구공을 몇 도 각도로 얼마의 속도로 던지는 것을 알 수 있다면 시간 t 초 후에 우리는 그 공이 허공 어딘가에 있을 것인가를 예측할 수 있다.



'R로 배우는 코딩' 이란 책을 주말에 보았다.

 

그리고 맨 마지막 챕터인 '인공지능과 인공 신경망'에서 주가 예측 예제를 따라 해 보았다.

과거 100일의 주가지수를 알 수 있다면 이를 통해 미래 5일간의 주가지수를 예측할 수 있다는 내용임

사실 엑셀이나 오리진 프로그램을 이용하면 fitting 이란 기능으로 여러 점들을 잇는 수식을 찾고 이를 통해 미래의 점을 예측할 수 있다. 그러나 인공신경망 모형 예제는 통상적인 이러한 방법이 아니다.



위 그림과 같이 일련의 input 값들이 알 수 없는(Hidden) 값들을 통하면 Output으로 변한다는 내용이다. 중간의 알 수 없는 값들을 이용하여 어떤 수식을 만들지는 않는다. 다만 Input 값들을 이런 black box에 여러 번 통과시켜 output과 연결시켜 보는 연습을  해 보면 어느덧 이 black box 가 완성되고, 내가 알고 싶은 값을 얻어낼 수 있다는 것이다.




그럼 R 프로그램으로 이를 구현해 본 것을 간단히 설명해 보겠다.

1. 먼저 R studio를 다운로드했다. 그리고 R 3.3.3에서 진행하였다.


2. 코스피지수를 다운로드하기 위하여 한국 거래소에 들어갔다. 통계-지수-국내 지수로 데이터를 엑셀로 다운로드 (2017.1.1부터 2017.6.18까지 데이터를 다운로드했다. 총 112개의 코스피지수가 나왔다.)

최근 날짜가 가장 위쪽에 올라왔는데, 엑셀을 열어서 가장 위쪽을 2017.1.1로 변환한 후 다시 저장했다.


3. 다음은 엑셀 데이터를 R에서 읽고 쓰기 위하여 Package(xlsx)를 인스톨하고, 인공 신경망 모델을 사용하기 위하여 nnet을 인스톨 함


install.packages("xlsx")

install.packages("nnet")

library(xlsx)

library(nnet)


4. 코스피지수 엑셀 데이터를 읽고 이를 data 변수에 저장함. 그리고 그래프로 한번 그려봄


data<-read.xlsx2(file.choose(),1)

data

plot(df$일자,df$현재지수)

grid()

음.. 코스피지수가 계속 올라가는 추세군~~


5. 다음은 어떻게 인공신경망 모델을 만드는지에 대한 것이다.

1~10일까지의 데이터가 black box에 들어가면 11~15일의 데이터가 나온다. black box안에서 무슨 일이 일어나는지는 모른다. 다만 계속해서 반복 교육을 시켜본다.

2~11일까지의 데이터가 black box에 들어가면 12~16일의 데이터가 나온다.

3~12일까지의 데이터가 black box에 들어가면 13~17일의 데이터가 나온다.

.

.

.

97~106일까지의 데이터가 black box에 들어가면 107~111일의 데이터가 나온다.

이렇게 연습시킨 후 마지막 5일의 데이터가 정말 잘 맞는지 테스트를 해 본다.

즉,

98~107일까지의 데이터를 black box에 넣었을 때 108~112일의 데이터를 예측해보고, 그 값이 정말 108~112일의 데이터와 같은지 비교해본다.





> predicted_values

         [,1]     [,2]    [,3]     [,4]     [,5]

[1,] 2388.458 2398.041 2403.33 2411.044 2418.678

> real

        [,1]   [,2]    [,3]    [,4]    [,5]

[1,] 2357.87 2374.7 2372.64 2361.65 2361.83


상당히 유사해 보인다. black box가 완성되었다.

그러면 마지막 10일 치의 값을 넣어서 미래 5일 치를 알아내도록 하겠다.

오늘이 2017.6.16일이니 2017.6.18~2017.6.12까지의 코스피지수가 아래 빨간색으로 예측되었다.

predicted_values

         [6/18]     [6/19]    [6.20]     [6.21]     [6.22]

          2369         2370      2377      2379       2382


정말 궁금하다. 내일부터 5일간의 코스피 지수가 이렇게 예측되다니...




미래 예측 코딩을 한번 해 보니 이것저것 해 보고 싶은 것이 많아졌다.

요즘 핸드폰에는 하루 동안 걸어 다닌 걸음수가 기록이 된다.

만약 과거 몇 달 동안의 내 걸음수를 알 수 있다면 앞으로 일주일간 내가 몇 걸음을 걸어 다닐지 예측이 가능하다.

나의 행동 패턴을 분석하는 것이다.

비슷하게 나의 수면 시간, 혈압, 심박수가 기록이 되는데, 이것을 통해 미래의 '나'의 모습을 예측해보는 것.

재미있을 것 같다.


R을 이용한 인공 신경망 예제를 직접 해 보면서 얼마 전 있었던  '알파고'와 '이세돌'의 대결이 자연스럽게 떠 올랐다. 더 복잡한 알고리듬이겠지만 앞으로 인공지능 분야가 어떻게 발전할지 자못 기대가 된다.



매거진의 이전글 마이크로비트로 시리얼 통신하기
브런치는 최신 브라우저에 최적화 되어있습니다. IE chrome safari