본문 바로가기

Data & AI

JeTech Lab에 사용될 시계열 예측 모델 소개 (TimeLLM)

안녕하세요. 

 

최근 새로운 분들이 많이 유입되면서

 

새로 오신 분들은 모를 수 있어서 다시 알려드리면

 

제가 만들고 있는 JeTech Lab 서비스는

 

제가 AI를 통해서 시장을 분석하고 트레이딩 하는 모델들의 데이터를 보여주는, 

 

말 그대로 저의 시장에 대한 연구내용이 담긴 연구실을 엿볼 수 있는 의미로 만들고 있습니다. 

 

제가 만들어내는 모델을 굳이 분류하자면 3가지 종류가 있습니다. 

 

 

JeTech 팀에서 사용하는 모델군 분류

 

1. Analysis Model 

 

시계열데이터 분석을 위해 사용되는 모델군입니다. 

 

저도 시장을 분석하기 위해 시계열 분석모델을 주로 활용하는데

 

각 종목, 지수 등에 대한 긴 시계열데이터를 분석하는 데 사용하고 있습니다. 

 

분석모델이 제공하는 분석데이터는 다른 모델들이 응용하고 활용하기도 합니다. 

 

물론 이 데이터 자체로 하나의 대시보드로 서비스될 수 있을 것 같습니다. 

 

주기성과 Fourier Transform 을 기반으로 한 Timesnet이 대표적일 것 같습니다. 

 

 

2. Trading Model

 

말 그대로 직접 트레이딩을 하는 모델입니다. 

 

이전 포스트에서 Decision Transformer를 통해서 

 

expert 수준의 trajectory 데이터를 기반으로 어떻게 트레이딩 하는지 학습하고 훈련하는 내용을 공유드렸습니다. 

 

트레이딩모델은 실제 제 자산들을 운용해주고 있는 모델들입니다. 

 

실제 거래소API를 이용해서 저 대신 열심히 트레이딩을 해주고 있는 모델들입니다. 

 

 

 

3. Prediction Model

 

마지막으로 예측모델입니다. 

 

사실 저는 시계열 예측, 특히 금융시장의 주식, 상품에 대한 예측을 선호하지는 않았습니다. 

 

제가 이 분야를 연구할때 가장 처음 접했던 영역이 시계열 예측이었는데 

 

이론을 배우면서 처음 접하게되는 ARIMA, LSTM 등의 모델들을 보면서

 

이론만 그럴듯하지 이 복잡한 실제 금융시장의 예측, 최적해는 아니더라도 조금이라도 근사치에 근접하는지조차 의구심이 들었습니다. 

 

그래도 최근에 만난 트레이더분이 자신만의 근거에 기반해서 예측을 하고

 

자신만의 주관적인 매매관점이 있고 그것에 기반한 예측이라면 도움이 될 것 같다고 판단했고

 

저도 자신만의 주관을 가진 모델들이 주는 예측치를 공유하는 것도 좋을 것 같고

 

결국 많은 일반인들이 원하는, "그래서 오르는데 내리는데"에 대한 직관적이고 속 시원한 대답을 하지 않을까 싶어서

 

적극 활용해보고 JeTech Lab 에도 대시보드화 해보려고 합니다. 

 

 

 

그래서 오늘은 기발한 방식의 시계열예측방법을 제안한 ICLR 2024 Time-LLM 모델에 대해 이야기해보려고 합니다. 

 

JeTech Lab 첫 화면에 여러 시장지수, 종목, 상품들의 가격 예측대시보드로 여러분들께 보일 모델이기도 합니다. 

 

오늘도 이해되지 않는 부분과 일부 사진자료를 DSBA 연구실의 Paper Review를 잘 참고했습니다. 

 

(특히 시계열분석 연구가 활발하신 석박통합과정 박진우 연구원님 감사합니다.)

 

아래 페이지에서 Paper를 보실 수 있습니다. 

 

https://arxiv.org/abs/2310.01728 

 

 

 

 

Abstract

 

TimeLLM은 시계열 예측을 위해 LLM을 활용하는 새로운 프로임워크를 제시한다는 말로 시작을 합니다. 

 

핵심으로 제안하는것 중 하나로

 

Patch Reprogramming 이라고 부르는 입력 시계열 데이터를 텍스트 프로타입으로 변환하고 LLM 모델과 상호작용하는 것입니다. 

 

시계열데이터를 언어모델의 어떠한 단어로 매핑할것인지 알게 해 주고

 

서로 다른 Modality인 시계열데이터와 자연어를 align 하면서 시계열데이터에 대한 backbone model의 이해도,

 

즉 LLM 모델이 시계열데이터를 잘 분석할 수 있도록 해주는 작업입니다. 

 

두 번째로 Prompt-as-Prefix 영역은 시계열데이터의 사전 정보를 자연어 형태로 LLM 모델에 Prompt로 제공합니다.

 

이 Prompt는 앞서 만든 Reprogrammed Patch 들을 LLM 모델이 이해할 수 있는 가이드 역할을 합니다. 

 

자세한 설명은 이후 Method 섹션에서 진행하도록 하겠습니다. 

 

 

 

Introduction

 

 

시계열예측은 산업의 여러 부분에 필요합니다. 

 

수요 계획, 재고 최적화, 에너지 부하 예측, 기후 모델링 등 다양한 영역에서 중요한 역할을 합니다. 

 

그래서 예측은 주식시장을 비롯해서 어느 분야에서건 정말 어려운 일이고 기업들도 많은 비용을 투자하고 있습니다. 

 

"시대가 어느 때인데 이런 거 AI로 하면 안 되나? 옆집 ChatGPT는..."

 

논문의 Introduction에서도 다른 AI 모델들에 비해서 시계열데이터가 갖는 한계점들에 대해 이야기하며 시작합니다. 

 

시계열데이터의 예측 작업은 다른 영역들과 다르게 특정 세부 분야의 전문 지식과

 

데이터의 특성들이 제각각 다르기 때문에 활발히 발달했던 기존의 AI들에 비해 더딘 상태입니다. 

 

언어모델의 경우 기본적으로 BERT, GPT와 같은 언어모델들이 원천모델로 사용되고

 

다양한 자연어처리 Down Stream Task에서 few-shot 혹은 zero-shot 학습 시나리오에서도 뛰어난 성능을 보였습니다. 

 

쉽게 말해, 돈 많은 기업과 똑똑한 연구원들이 만든 고수준 모델들이 무료로 풀리고

 

그 모델들을 내 서비스, 내 사업에 맞게 fine-tuning 했더니 너무나 잘 응용되더라라는 것입니다. 

 

 

이상적으로, 범용적으로 수행할 Task를 위해 a과정을 거치게 됩니다. 

 

예를 들어 단어에 대한 이해를 하는 모델을 만들거나, 혹은 사과, 고양이, 강아지 이미지를 분류 모델을 학습하는 과정을 들 수 있습니다. 

 

그리고 각자 해결하고자 하는 Down-Stream Task에 맞게 b 과정의 Fine-Tuning을 하는 게 정석입니다. 

 

예를 들어 고양이 강아지 분류에 추가로 나의 서비스에 맞게 거북이 이미지데이터도 분류하도록 학습시킬 수 있습니다. 

 

이미지처리, 자연어처리에선 이 Fine-Tuning으로 꽃을 피우고

 

일반인들이 "AI" 하면 ChatGPT, 혹은 이미지처리 관련된 것들이 떠오르게 된 이러한 이유입니다. 

 

하지만 시계열데이터는 그런 토대가 되는 Base Model 이란 게 존재하기 어렵습니다. 

 

날씨예측, 비트코인 가격예측만 봐도 시계열에선 다양한 도메인을 마주 보고 있어서 공통영역의 모델이란 게 존재하기 어렵습니다. 

 

여기서 TimeLLM 모델은 LLM의 이런 발전에 힘입어 

 

그림의 c 방안, 시계열데이터 예측 기술 발전에 활용하는 방안을 제시합니다. 

 

논문에서 제시하는 c 방안에 대해 자세히 알아보도록 하겠습니다.

 

 

Method

 

TimeLLM이 제시하는 전반적인 Framework

 

 

1. Input Embedding

 

 

시계열데이터는 일정한 기간, 주기마다 움직이는 패턴이 있고

 

이를 분포로 나타내보면, 대체로 시간에 따라 분포가 변화합니다. 

 

우리가 주식, 특정 지수나 금융 상품의 가격데이터를 보면 

 

변동이 동일하지 않고 알 수 없는 형식으로 전개됩니다. 대체로 시간에 따라 분포가 변화하는 Non-Stationary 데이터입니다

 

(고전적으로는 이를 stationary로 변환하는 방식으로 시계열 처리를 접근했었다. )

 

Data Distribution 문제는 train / test 데이터 사이에도 발생할 수 있고

 

결국 예측모델에서도 일반화가 되지 않을 수 있습니다. 

 

해당 논문에서는 Reversible Instance Normalization (RevIN)을 통해

 

시계열데이터를 Symmetric 구조로 입력값들에 대한 normalize를 진행하여 도출된 origin distribution information,

 

learnable parameter를 바탕으로 output sequence를 다시 denormalize 하는 메커니즘인데

 

이는 추후 Data Distribution 관련 주제로 별도 포스트로 다뤄 볼 예정입니다. 

 

 

2. Patch Reprogram

 

해당 논문이 중요시하는 두 가지 중 첫 번째, Patch Reprogram입니다.

 

Reprogram 이전에 Patching 작업이 진행되는데

 

이 작업은, 시계열데이터의 특성상, 데이터의 시간 순서가 갖는 의미도 중요하기 때문에

 

이 Local context정보를 반영하기 위해 활용하고

 

덤으로 Input Token을 줄이게 되고 Transformer에 입력될 때 Computational Cost를 감소시킬 수 있습니다. 

 

 

 

 

시계열, 그리고 자연어는 다른 모달리티(AI가 다루는 데이터의 영역)입니다.

 

시계열 예측에 LLM 모델을 활용하기 위해 시계열을 자연어 도메인으로 align 하는 작업을 진행합니다. 

 

이로 언어모델이 시계열에 대한 이해도를 높이는데 목적을 두고 있습니다. 

 

 

저의경우는 트레이딩에 사용되는 용어들을 시계열데이터와 매핑하는 작업을 진행할 예정입니다. 

 

지지와 저항이 뭔지 시계열데이터를 보고 이해할 수 있게 하는 것입니다. 

 

어려운 수식이 나오는 부분이 있는데, 상관없는 단어는 제외하고

 

트레이딩에 관련된 vocab 들만 사용하여 (V' << V) 효율적인 단어들을 정해두게 됩니다. 

 

 

 

3. Prompt-as-Prefix

 

특정 Template에 기반해서 이전에 만들어진 Reprogrammed Patch에 대한 정보를 

 

더 잘 이해할 수 있게 해주는 가이드가 되어주는 Prompt를 제공합니다. 

 

이 부분은 모델입력의 Prefix로 사용되어 Downstream task 수행능력을 키우고자 

 

시계열 데이터의 사전정보와 Task를 자연어로 제공합니다.

 

코드의 예시는 아래와 같습니다. 

 

prompt = []
for b in range(x_enc.shape[0]):
    min_values_str = str(min_values[b].tolist()[0])
    max_values_str = str(max_values[b].tolist()[0])
    median_values_str = str(medians[b].tolist()[0])
    lags_values_str = str(lags[b].tolist())
    prompt_ = (
        f"<|start_prompt|>Dataset description: {self.description}"
        f"Task description: forecast the next {str(self.pred_len)} steps given the previous {str(self.seq_len)} steps information; "
        "Input statistics: "
        f"min value {min_values_str}, "
        f"max value {max_values_str}, "
        f"median value {median_values_str}, "
        f"the trend of input is {'upward' if trends[b] > 0 else 'downward'}, "
        f"top 5 lags are : {lags_values_str}<|<end_prompt>|>"
    )

    prompt.append(prompt_)

 

Prompt는 Dataset Description, Task Description, Input statistics로 구분되어 있습니다. 

 

각각 데이터셋에 대한 설명, 수행할 Task에 대한 설명, 데이터의 통계적 수치들을 제공합니다. 

 

 

 

이제 Prompt-as-Prefix + Regrogrammed Patch를 Backbone Model의 Input으로 투입시킵니다. 

 

 

 Pre-trained LLM은 입력을 받고 출력도 동일한 길이로 반환하게 되어있지만

 

Prefix token part를 제거하여 Output representation으로 활용합니다 (Projection 영역만 활용)

 

 

 

 

 

 

실제 해당 모델은 Llama-7B 언어모델로 시계열데이터의 벤치마크에서 우수한 성능을 보이고 있습니다. 

 

 

Baseline 모델들도 최신의 SOTA를 달성했던 모델들임에도

 

해당 모델들을 능가하는 성과를 내었습니다. 

 

 

 

 

TODOs

 

저는 제시된 모델을 많은 사람들이 관심 있어 하는 종목, 지수들에 대해 학습일 진행시킬 예정입니다. 

 

아마 다음 포스트에서 이에 대한 내용을 다룰 것 같고

 

그 이후에는 각 영역에 맞게 학습시킨 예측모델을 여러분들에게 공개할 수 있도록

 

JeTech Lab 대시보드를 구성하는 과정에 대해 이야기해 볼 예정입니다. 

 

 

트레이딩과 투자와 관련된 주제의 포스트를 다루는데 반해

 

관련된 분야가 아니라면 다소 어렵게 느껴질 수 있는 AI의 심층적인 부분까지 다루다 보니

 

가끔 저의 구독자층이 글이나 영상들에 대해 거부감을 느끼지 않을까 걱정이 되기도 하는데

 

결국 이런 어려운 내용들을 차치하고 일반 투자자나 트레이더분들이

 

직관적이고 쉽게 받아들일 수 있는 하나의 서비스를 탄생시키기 위해 노력하고 있습니다. 

 

저도 시장참여자입니다. 남들과는 다른 독특한 시장참여 자라는걸 어느 정도 인식하고 있고

 

다양한 시장참여자들이 존재한다는 것 자체가 시장을 더 생동감 있게 하기도 하고

 

궁극적으로는 많은 사람들이 시장을 이해하고 분석하는 능력을 더 키울 수 있다고 믿고 있습니다. 

 

처음 이런 연구를 진행할 때는 이게 맞나 저게 맞나 갈팡질팡했으나 

 

시간이 지날수록 저의 연구 방향이나 철학이 더욱 확고해지는 느낌이 들고 있는 요즘입니다. 

 

오늘도 저의 포스트를 접해주신 여러분들 감사합니다. 

 

앞으로도 더 좋은 내용으로 찾아뵙도록 하겠습니다.