과거의 행적으로 미래를 예측하기
'시간'
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을 이용한 인공 신경망 예제를 직접 해 보면서 얼마 전 있었던 '알파고'와 '이세돌'의 대결이 자연스럽게 떠 올랐다. 더 복잡한 알고리듬이겠지만 앞으로 인공지능 분야가 어떻게 발전할지 자못 기대가 된다.