Time-Series

[Time-Series] Time-Series with Machine Learning

언킴 2022. 6. 1. 00:41
반응형

Contents

     

    Time-Series with Machine Learning

    우리가 일반적으로 알고 있는 기계 학습(Machine Learning)을 시계열 구조를 가진 데이터에 적용할 때에는 문제가 발생한다. 기계 학습에서 결정 경계(Decision Boundary)를 설정할 때 고정된 시점에 대해서만 다루고 있으나, 시계열 데이터는 시간의 흐름에 따라 관측치가 변화하기 때문에 이를 고려하지 못하기 때문이다. 예를 들어, $x$를 입력하면 $y$를 출력하는 함수 $f(x) = y$가 있다고 가정하자. 시계열 데이터의 경우는 $t = 0$일 때 $f(x) = y$가 나올 순 있으나, $t=1$인 경우에는 $f(x) = z$가 될 수 있다. 

     

    이와 같은 경우는 시계열 데이터 뿐만 아니라 자연어처리(Natural Language Processing, NLP)가 있을 수 있다. 일반적으로 word의 context를 고려하지 않는 Word2Vec과 같은 경우에는 위치에 따라 동일한 representation을 가지고 있으나, Sequence를 고려한 LSTM이나 MLM 모델과 같은 경우에는 word의 위치에 따라 representation이 변경된다. 

     

    RNN

    그렇다면 시간이라는 도메인을 어떻게 모델에 반영할 수 있을까? 이때 대표적으로 사용하는 모델이 RNN, LSTM, GRU 등이 있다. 이와 같은 Sequential Neural Network는 Sequence를 입력으로 사용하며 input은 $x^{<1>}, x^{<1>}$과 같이 표현할 수 있다. $X = {x^{<1>}, x^{<1>}, ... , x^{<n>}}$으로 포현할 수도 있으며, n은 총 입력 sequence의 길이를 의미한다. 

     

    RNN architecture

    RNN의 구조는 여기를 참고하면 상세히 작성해두었다. RNN에서는 one-to-one, many-to-one, many-to-many 등 다양한 구조가 존재한다. 모든 RNN이 가진 공통점은 특정 시험 T의 값은 과거, 미래 데이터의 출력에 의해 영향을 받는다. 단, 명제가 거짓인 데이터에는 절대 RNN 계열의 알고리즘을 무조건적으로 사용하는 것은 안된다. 

     

    LSTM 도 RNN의 장기 의존성 문제를 개선하기 위해 활용되고 있으나 LSTM 역시 종속이라는 가정을 위배하는 경우 성능이 제대로 발휘되지 않는다. 이러한 문제를 해결하기 위해 나온 모델이 바로 CNN이다. CNN은 공간적(Spatial)인 정보를 기반으로 하기에 추세를 파악하고 예측하는 형태로 진행된다. 주가를 예로 들면, 일반적으로 사람들은 주가를 볼 때 하나하나 매일매일 주식을 보는 것이 아니라 차트에서 보이는 전체적인 그림을 보게 된다. CNN은 이러한 맥락과 유사하게 차트의 추세를 보고 다음 추세를 파악하는 형태로 진행하기에 매우 우수한 성능을 발휘하는 모델 중 하나이다.

     

    CNN

    CNN은 Convolutional Neural Network의 약자로 합성곱을 사용하여 문제를 해결한다. Conv layer를 사용함으로써 parameter를 공유해 row-level feature에서 high-level feature를 추출하는 형태로 학습이 진행된다. 이미지를 예로 들어보자. image는 RGB 3개의 channel로 구성되어 있으며, 28*28 image를 입력으로 받기 위해서는 28*28*3 개의 parameter를 사용하게 된다. parameter를 하나하나씩 학습하게 될 경우 학습이 제대로 안될 것이다. 이때 각 parameter들이 weight를 공유해 이러한 문제를 해결할 수 있게 된다.

    CNN Classification

     

    시계열 데이터에서 CNN은 데이터에 내재된 Local한 특징을 추출하는 역할을 한다. 관측치들을 하나하나 보는 것이 아니라 관측치들이 어떠한 추세로 움직이는지 패턴을 검지하는 형태로 진행된다. 시계열에서 사용하는 가장 기본적인 CNN 구조는 1D CNN(or Temporal Convolution Network, TCN)이며 아래와 같은 구조를 가지고 있다. 

    1D CNN architecture

     

     

     

    CNN-LSTM

    CNN은 위에서도 언급했듯 장점이 존재하지만 만능은 아니다. CNN의 경우 공간적인 정보, 즉 로컬한 특징이 없다면 CNN을 쓰더라도 제대로된 학습이 되지 않는다. 예를 들어, 랜덤워크(random walk)와 같이 아무런 패턴이 존재하지 않는 데이터의 경우에는 로컬한 특징이 존재하지 않기에 학습하는 것이 불가능하기 때문이다. 최근에는 CNN과 LSTM을 결합한 CNN-LSTM을 주로 사용하고 있다. CNN-LSTM은 CNN을 통해 공간적인 정보를 요약한 형태로 변환하고 그 후 RNN을 통해 모델링하는 기법이다.

     

    이와 같은 기법은 모델에 사용되는 데이터가 다양한 구조를 가지고 복잡한 구조를 가질 때 우수한 성능을 보인다. $x$를 입력 받았을 때 CNN Layer를 통과하여 $x'$를 만든다. $x'$는 공간적인 정보를 가진 Vector를 의미하며, 이를 RNN, LSTM 등의 모델의 입력으로 사용한다. 이때 LSTM은 이전 입력으로 공간적인 정보를 받기 때문에 하나의 관측치가 아닌 공간적인 정보의 선후 관계를 파악하게 된다.

     

    시계열에서 데이터를 모델에 입력으로 사용하기 위해서는 정상화를 하는 단계를 거쳐야 한다. 그러나 CNN-LSTM에서는 CNN이 이러한 역할을 대신하기에 따로 전처리 과정을 수행하지는 않는다(전처리 과정을 수행하더라도 결과는 거의 차이가 없다.). 그렇다면 전처리 과정에서 무조건 CNN을 사용해야 하는가? 이것도 아니다. 우리는 모델의 입력으로 사용하기 위한 데이터를 Vector로 변환하여 사용한다. 이때 단순히 CNN을 사용한 것 뿐이다.