본문 바로가기

주식 데이터 모델링

시계열 데이터 분석에 딥러닝을 사용할 이유 3가지

 

 주식 데이터는 시간에 따른 데이터가 존재하는 시계열 데이터 입니다. 그래서 시계열 데이터를 분석할 때 사용하는 방법을 주식 데이터에도 적용하곤 합니다. 데이터를 전처리 하는 과정에서 시차(lag)를 고려하기도 하고, ARIMA 모형, 회귀 모델 등을 이용합니다. 딥러닝 방식으로는 LSTM을 사용합니다. 그렇기 때문에 시계열 데이터 분석에 딥러닝을 사용하는 이유를 알 게 된다면, 주식 데이터를 분석할때도 유용하게 활용할 수 있겠죠.

 참고한 글에서는 이유로 3가지를 말합니다. 이 세가지 이유에 대해 글에서 설명한 내용, 그리고 저의 생각이나 경험들을 바탕으로 이유에 대해 글을 써보도록 하겠습니다.

 

1. Deep learning neural networks are capable of automatically learning and extracting features from raw and imperfect data

 

2. Deep learning supports multiple inputs and outputs

 

3. Deep learning networks are good at extracting patterns in input data that span over relatively long sequences

 

 

1.  딥러닝은 raw 하고 비완전한(imperfect)에 대해서 자동으로 feature를 추출하고 학습할 수 있다.

 

 기존 머신러닝 이전에는 모든 feature를 사람들이 만들었습니다. 통계 기법 등을 사용해서 무언가를 예측하거나 할때 사용했던 이런 feature를 hand-crafted feature라고 부릅니다. 이렇게 사람들이 손수 만들어낸 feature는 보통 이론적 바탕이 존재합니다. 이론을 통해서 계산이 되는 경우도 있고, 사람의 지식을 담아 상황에 따라 다르게 계산해야하는 경우도 있었습니다.

 머신러닝으로 넘어오면서 feature를 자동으로 만들어 사용하려고 하는 노력들이 생기고, 딥러닝에서는 대부분의 feature를 자동으로 생성합니다. 이부분에 대해서는 조금 뒤에 말씀드리고, 왜 feature를 자동으로 만들어내려고 할까요?

 사람들이 만들어낸 feature는 이론 + 경험 등을 바탕으로 만들었습니다. 그렇기 때문에 일반화가 되어있거나, 아주 적은 양의 데이터로 큰 정보를 압축해서 담고 있습니다. feature를 만들 뿐 아니라 데이터에 대한 전처리(scaling, normalization 등)도 포함해서 입니다.

 

 특히 시계열 데이터의 경우 시계열 이라는 용어 자체에서 볼 수 있듯이 '시간' 이라는 개념이 굉장히 큰 개념입니다. 그래서 이런 시간을 고려하기 위해 많은 노력을 기울입니다. 

 많은 노력을 기울인다는 말은 다시 말해서 사람의 영향을 많이 받는다고 말할 수 있습니다. 과학에서 말하는 법칙(적어도 지금까지 반례를 한번도 찾아볼 수 없는) 정도의 이론을 바탕으로 feature를 계산하는 것은 아닙니다. 좋게 보면 모델이 학습하기 힘든 데이터의 특징을 찾아낼 수도 있지만, 안 좋은 경우 모델이 더욱더 데이터의 특징을 학습하기 힘들게 할 수도 있는 것 입니다. 

 그래서 이런 사람의 영향이 모델의 성능에 긍정적이냐 부정적이냐는 물음에서, 요즘 머신러닝, 특히 딥러닝에서는 사람의 영향을 최소화 하자는 방향인 것 같습니다. raw data + 사람이 만들어낸 최소한의 feature를 모델 훈련의 input으로 사용하고, feature의 학습은 모델에게 맡기자는 말입니다. [딥러닝 네트워크 구조의 혁신적인 발견이 없는 요즘에는 feature를 더 만들어서 넣는 방향도 있는듯 합니다...]

 

 머신러닝에서는 어떻게 feature를 만들어낼까요? 가장 자주 사용하는 예시로 AutoEncoder가 있습니다. Autoencoder에 대해서 간단히 설명하면 Autoencoder는 모델의 input과 output이 같은 모델 입니다. input과 output이 같은 자기 복제 모델인데, 모델의 훈련 과정에서 input을 압축했다가, 그 압축된 정보를 output으로 다시 복원하는 과정이 있습니다. 예를들어 100차원의 데이터를 10차원의 데이터로 축소 했다가 100차원의 데이터로 다시 복원하는 것입니다.

 위의 예시에서 10차원으로 압축되어 있는 데이터를 'representaion vector' 등의 이름으로 부릅니다. 100차원을 10차원으로 압축함으로써 더 적은 차원에 정보가 압축되어 있기도 하고, 100차원의 데이터와는 다른 식으로 표현되어 있는 데이터이기도 합니다. feature 라는게 원래 데이터의 특성을 표현해주기 위한 정보입니다. 그래서 원래 데이터의 특성을 다르게 표현해주는 이 representaion vector가 데이터의 feature로 쓰일 수 있습니다. Autoencoder에서 이 vector를 출력하도록 하고, 다른 알고리즘을 통해 이 vector를 feature로 훈련 하는 것입니다.

 Autoencoder 처럼 학습을 통해 새로운 feature를 만드는 방법이 있습니다만, 이럴 경우 모델을 훈련하는 pipeline에서 한단계가 더 추가 됩니다. 새로운 데이터에서도 이 Autoencoder가 계속 좋은 feature를 만들어낸다는 보장이 없죠. 

 

 딥러닝에서는 보통 아예 이런 새로운 feature를 만들어내는 과정을 모델 안에서 진행합니다. Autoencoder를 딥러닝 모델 구조안에서 작동시킬수도 있습니다. VAE, GAN 같은 생성 모델이 다 이런 아이디어를 바탕으로 나온 모델 입니다. CNN은 layer 하나하나가 새로운 feature를 만들어내는 layer로 볼 수 있습니다. 이미지에서 주로 사용하는 CNN은, 사람이 직접 만들어내기 애매~한 feature를 아주 잘 추출해줍니다. CNN를 tabular data(엑셀 같은)에 적용하는 경우도 있습니다. CNN layer의 filter수를 tabular data에 feature 수 등에 맞춰서 의미를 부여하는 식 입니다. 

 Embedding 방식도 대표적인 feature extraction 이라고 볼 수 있습니다. 언어를 다룰 때 주로 사용하는 embedding은, 똑같이 사람이 뽑아내기 애매~한 feature를 n 차원의 vector에 random으로 뿌린다음에, 서로간의 거리가 의미를 가지도록 학습합니다. 

 이러한 딥러닝 feature extraction 방식은 모두 알다시피 굉장히 성공적으로 작동합니다. CNN은 심지어 시계열 데이터에도 적용하는 경우가 많고, embedding은 언어 뿐만 아니라 카테고리, 유저(사용자, 사람 등)등 데이터 간 유사도를 유추하고자 하는데 적용하는 사례가 많습니다. CNN, Embedding 뿐만 아니라 딥러닝의 한 layer, layer마다 새로운 feature를 출력해낼 수도 있습니다. 이런식으로 feature extraction이 이뤄집니다.

 

2. 딥러닝은 multiple input과 output을 지원한다.

 

 딥러닝은 정말 다양한 방식의 input과 output을 지원합니다. 데이터의 형태가 어떻게 되었던, 수가 몇개가 되었건, 약간의 처리를 해주면 모두 사용이 가능합니다. 시계열 데이터 분석에서는 이 부분이 특히 중요하게 작용합니다.

 예를 들어 1~T 시점의 기온을 통해 T+1 시점의 기온을 예측한다고 합시다. T+1 시점의 기온을 예측하기 위해 1~T 시점의 모든 기온을 input으로 넣을 수도 있고, 계절, 날짜, 기타 다른 정보를 의미하는 metadata도 모델에 넣어줄 수 있습니다. 출력의 관점에서는 T+1 시점의 데이터 하나를 예측할 수도 있고, T+1, T+2, T+3 ... 의 데이터를 예측할 수도 있습니다. 심지어 이러한 출력들을 한번에 예측할 수도 있고, Autoregressive 방식으로 순서대로 예측할 수도 있습니다.

 기존의 머신러닝 방법도 위와 같이 다양한 input과 output을 사용할 수도 있지만 모델에 따라서 그 방법들이 제한이 되어있고 한계도 존재합니다. 딥러닝은 이 일을 쉽게 해줍니다.

 

3. 딥러닝은 비교적 길이가 긴 sequence에 걸쳐있는 패턴을 추출하는 데에 잘 작동합니다.

 

 1번과 비슷할 수도 있는 얘기인데, 딥러닝의 RNN 계열은 CNN 등과는 다르게 순서가 있는 데이터에 잘 작동합니다. 그 이유는 RNN 계열의 작동 원리 때문 입니다. 특히 LSTM, GRU 등 요즘 활용 되고 있는 RNN 계열의 layer는 cell 내부에서 이전 시점의 데이터들에 대한 학습을 따로 합니다. 즉 이전 시점의 데이터 부터 쭈욱 학습하면서 긴 시점에 분포한 pattern을 학습할 수 있습니다. 

 기존 시계열 분석에서는 예를 들어 계절성을 고려합니다. 이런 계절성은 4계절로 따지면 1년 마다 3개월씩 반복되는 패턴이라고 볼 수 있습니다. 일단위 시점의 데이터를 고려해보면 이런 패턴은 꽤 오랜 시간에 걸쳐있는 패턴입니다. 이러한 패턴을 1번에서도 말했듯이 이론과 경험을 바탕으로 사람들이 고려해주는 방식이었습니다. 

 이러한 배경으로 딥러닝(특히 RNN 계열)은 시계열 데이터에서 가지고 있는 특유의 긴 sequence에 걸쳐있는 패턴을 추출하는데 잘 작동합니다.

 

 

참고한 글은 https://www.oreilly.com/ideas/3-reasons-to-add-deep-learning-to-your-time-series-toolkit 입니다.

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

https://www.oreilly.com/ideas/3-reasons-to-add-deep-learning-to-your-time-series-toolkit