시작하면서
대부분의 사람들이 그러하듯 뉴스를 들여다보면, 굳이 주식에 큰 관심이 없더라도, 주가지수 정도에는 눈이 가는 게 보편적인데, 파이어베이스를 공부하다가 문득 이러한 주가지수를 읽어와, 짧은 미래를 예측해 볼 수 있을까 하는 생각이 들었다.
주가지수는 일상생활에서 많이 접하게 되는 가장 대표적인 시계열 데이터이고, 다른 통계 데이터들에 비해 여러 가지 비정형화된 요소의 영향을 많이 받기에, 시계열 분석 중에서도 난이도가 높을것으로 판단되지만, 만일 이러한 데이터를 파이어베이스로 불러와 머신러닝 기법으로 어느 정도 미래 예측이 가능하다면, 다른 많은 시계열 분석에 동일한 기법을 사용할 수 있을 것이란 생각이 들었기 때문이다.
더구나, 이미 네이버 등의 포탈에서는 1분 단위의 주가지수 데이터는 공개되고 있어 데이터 접근이 용이하고, 또한 예측 결과에 대한 검증도 용이하다는 생각이 들었다. 그리고, 주가지수라 하더라도, 관련된 인간들의 동작에는 얼마간 시간 지연이 있으므로, 아주 짧은 미래(수분~10여 분 정도)는 주가지수에 관성이 작용하지 않을까 하는 기대감도 있었다.
적용 기법 간략 소개
이러한 시계열 분석에 사용될 수 있는 몇 가지 방법들에 대해 내가 이해하고 있는 내용을 요약하여 소개한다. 다만, 나는 이 분야에 대한 지식이 매우 제한적이므로, 간단히 개념만을 소개하려는 취지이며, 각각에 대한 전문적 사항은 다른 자료를 참조하기 바란다.
<통계적 접근 모델>
1) 선형 회귀 (Linear Regression)
종속 변수(주식 가격)와 하나 이상의 독립 변수(시간, 거래량 등) 간의 관계를 모델링 하는 간단한 통계적 방법으로 실생활에서 가장 보편적으로 사용되는 방법이다. 엑셀을 이용해서도 구현이 가능한데, 참고로 엑셀을 이용한 주가지수 예측 사례는 다음 글을 참조하기 바란다. 이러한
그러나, 이러한 통계적 방법은 과거의 데이터를 기반으로 하는 수치적 계산이기 때문에 과거와 동일한 상황에서는 정확도가 높지만, 과거의 데이터 범위를 벗어낫 구간에 대한 예측(extrapolation)에서는 정확도가 매우 흔들릴 수 있는 태생적 한계가 있기도 하다. 따라서 특별한 외부적 충격 변수가 없는 정적인 상황하에서, 그것도 짧은 미래(=기존 데이터 구간에서 크게 벗어나지 않은 구간)에 대해 제한적인 예측만이 가능하다.
2) ARIMA (AutoRegressive Integrated Moving Average)
ARIMA는 통계적 시계열 모델로, 자기회귀(AR), 차분(I), 이동평균(MA) 요소를 결합하여 시계열 데이터를 모델링 하는데 사용되는 방법의 하나이다.
장점
간단하고 해석이 용이
적은 데이터로도 예측 가능
계산 자원이 적게 필요
단점
비선형 패턴 학습 불가
복잡한 시계열 패턴에 적합하지 않음
계절성 데이터에 대한 추가 모델링 필요
<머신러닝 기법>
1) 순환 신경망(RNN – Recurrent Neural Network)
시계열 데이터를 기계학습을 이용하여 처리하기 위해 개발된 분석 모델로, 과거의 출력 결과를 다시 다음 단계의 입력으로 사용하여 시계열의 미래 예측을 하는 방식이나, 마치 오락 프로그램에서 말 전달하기를 하다 보면 첫 사람과 끝 사람의 말이 점점 달라지는 것처럼, 전달 단계가 길어질수록 기울기 폭주(예측 편차 증가) 등의 문제가 발생하여 비교적 긴 시간의 예측에 대응하기 어려운 문제가 발생하는 한계가 있는 것으로 알려져 있다. 이 때문에 LSTM 또는 GRU 등의 개량형 모델로 발전하게 된다.
2) LSTM (Long Short-Term Memory)
시계열 예측에 적합한 순환 신경망(RNN)의 한 유형이며, 장기 의존성 문제를 해결하기 위해 개발되었다고 알려져 있다. 셀 상태와 게이트 구조를 통해 중요한 정보를 장기간 유지할 수 있어 기존 순환 신경망의 문제를 보완하여, 최근의 시계열 예측에 많이 사용된다고 한다.
장점:
장기 의존성 문제 해결
복잡한 시계열 패턴 학습 가능
다양한 시계열 데이터에 적용 가능
단점:
학습 속도가 느림
많은 데이터와 계산 자원 필요
하이퍼파라미터 튜닝이 필요
3) GRU (Gated Recurrent Unit)
GRU는 LSTM의 간략화 버전이라고 할 수 있는데, LSTM과 유사한 구조를 가지지만, 더 간단한 게이트 구조를 가지고 있어 상대적으로 계산 효율성이 높은 것으로 알려져 잇다.
장점:
LSTM보다 빠른 학습 속도
장기 의존성 문제 해결
복잡한 시계열 패턴 학습 가능
단점:
LSTM보다 약간 낮은 성능 (특정 데이터 셋에 따라 다름)
많은 데이터와 계산 자원 필요
하이퍼파라미터 튜닝이 필요
4) 기타
Transformer, Informer, SVR 등이 알려 있으나, 대체로 많은 데이터와 계산 자원이 필요하고, 복잡해서 구현이 어려운 것으로 알려져 있다.
LSTM과 GRU를 이용한 주가지수 시계열 예측 시도
위에 소개한 방법들 중에서, 결국 최근 가장 보편적으로 시계열 분석에 사용된다는 머신러닝을 활용한 시계열 분석방법인 LSTM과 GRU 기법을 적용해 보기로 했다.
먼저 분 단위 실시간 데이터는 다음과 같이 금융포탈의 분 단위 주가지수를 읽어와
각각의 정보 값으로 분리하여, 파이어 스토어 DB에 저장했다. 한 번에 불러오는 정보는 필요에 따라 20~30분 정도의 데이터를 불러와 저장하도록 했다.
이렇게 불러와 파이어 베이스에 저장된 KOSPI 주가지수는 다음과 같은 방식으로 Chart.js 라이브러리로 그래프화하여 표시할 수 있었다.
그리고, LSTM과 GRU는 각각 파이어 스토어에 저장된 데이터를 불러와 5~15분 정도의 범위의 미래 값을 예측하도록 했다. 이들 코드는 Python 코드로 별도로 구성하고, 예측 결과는 다시 파이어 스토어에 저장시키도록 했다.
먼저 LSTM 모델의 실행 예는 다음과 같고
GRU 모델도 동일 방식으로 예측 실행한 사례는 다음과 같다.
그리고 이들 결과를 그래프화하여 하나의 차트에 표시한 결과는 다음과 같다.
시간이 경과되면서 데이터 수가 증가된 후 예측한 결과는 다음과 같다.
LSTM 및 GRU 모델의 예측치 비교
두 모델에 의해 예측된 값을 실제값들과 연계하여 비교해보면, GRU 모델의 경우 LSTM 모델에 비해 스파이크가 많이 보였고, 또한 그 높이도 커서, LSTM 모델이 좀 더 완만한 형태를 보이고, GRU모델에 비해 스파이크가 적어 보기에 편안하고, 현실에 조금 더 가깝지 않나 하는 생각이 들었다.
다만 그럼에도 불구하고, GRU 모델의 예측치 역시 자세히 살펴보면, 2675 부근의 KOSPI 실제값 수준에서 스파이크가 발생하는 경우라도, 2685는 넘지 않아서 0.3~0.4% 정도의 편차만을 보여주었다. 즉, GRU모델의 경우 LSTM의 경우에 비해 스파이크 발생은 많지만, 여전히 스파이크의 절대값이 큰 것은 아니어서, 그 자체로는 상당히 유용한 예측모델인 것으로 판단되었다.
다만 두가지 모델중 굳이 한가지 머신러닝 모델을 선택해야 한다면, GRU모델보다는 LSTM모델의 사용이 위와 같은 주가지수의 시계열 분석 및 미래 예측에 조금 더 편안하지 않을까 하는 생각이 들었다.
결론
위에서 머신러닝 기법을 활용하여 시계열 분석 및 가까운 미래예측을 해 보았는데, LSTM 모델의 경우는 KOSPI 실측치와 거의 비슷한 패턴을 보이고 있어, 이러한 LSTM 머신러닝 기법을 사용하면, 5-10분 정도의 가까운 미래에 대해서는 어느 정도 주가지수의 방향성과 예상치를 신뢰성있게 추정할수 있지 않을까 하는 생각이 들었다.
또한 경향성에 여러가지 변수가 많아 예측이 어려운 주가지수의 시게열 분석과 예측에서 이런 결과를 보인다면, 비교적 충격 변수가 적은 일상생활의 다양한 많은 시계열 데이터 분석에 LSTM 모델을 활용한 머신러닝 기법의 시계열 분석 및 예측은 잘 적용될 듯해 보였고, 이와 관련하여 Firebase를 유용하게 활용할 수도 있겠다는 생각이 들었다.
참고 자료
분석에 사용한 LSTM과 GRU 분석 코드는 다음에 첨부해 둔다.

