데이터분석과 개발

짧은 시계열 예측 경험 정리 본문

개발&분석 경험

짧은 시계열 예측 경험 정리

긍정적인마인드 2023. 4. 15. 23:26

* 경험한 것을 정리한 글이므로 틀린 내용이 있을 수 있습니다.

* 더 좋은 방법 또는 틀린부분이 발견될 시 계속 수정하며 업데이트 할 예정입니다.

 

안녕하세요 이번 포스팅엔 제가 6개월 동안 삽질했던 경험을 적어보려 합니다! 

예전에는머신러닝, 딥러닝 모델을 돌리면서 내가 뭘 하는지 모르겠다 라는 생각이 많이 들었었는데 이번 계기로 뭘 해야하는지 시계열에 있어서는 좀 확실해 진 것 같습니다.

 

맡았던 일은 주 단위 10년치 (500개 정도) 금융시계열 6개월 예측이었습니다.

계절성이 어느 정도 있고 변동성이 일정한 편이어서 할만한가 싶었는데 코로나 이후에 변동성이 급격하게 증가해서 결국 300~400개 데이터를 사용하게 되었습니다.

 

정리하자면

1) 코로나 이전: 추세가 있고, 계절성 존재, 변동폭이 대체적으로 일정하지만 추세가 변할 땐 많이 변함

2) 코로나 이후: 추세만 존재, 계절성 완전히 사라져 거의 곡선 형태

 

너무나 당연한 사실들이지만 했었던 작업을 잊어버릴 것 같아 정리를 해보도록 하겠습니다.

 

1. 예측결과는 가장 최근 패턴을 반영!

제가 다뤘던 데이터는 계절성이 유지되다 변하는 데이터였는데 가끔 이런 생각을 했습니다.

데이터 계절성이 A,B 2가지 타입이 있다고 가정했을 때,  A A A B 를 훈련시켜 다음을 예측한다고 했을때

예전 생각: 아아 처음에 A 패턴을 학습했었으니 A 패턴이 예측값으로 나올 수도 있지 않을까..?? 

 

네 아니었습니다 ㅎㅎ 가장 최근에 학습된 B 타입으로 예측값을 반환합니다.

이런 이유 때문에 딥러닝에서도 RNN 이후에 장기기억을 반영하기 위해 LSTM이 나오지 않았나 조심스럽게 추측해봅니다.

 

2. 추세변화가 있다면 예측하기 정말 어렵다!

 

인터넷에 보이는 시계열 예측은 대부분 추세가 없거나(ex. 온도) 추세가 일정합니다.(ex.Airpassenger 데이터셋)

이런 경우가 아니고 추세가 계속 변화한다면 시계열 적으로 예측하기 정말 어렵더라고요.

 

(1) 추세가 변하면 첫번째로 외삽문제(extrapolate)가 생깁니다.

 

성능 좋은 tree계열 모델을 사용하기 힘들어지는 문제점이 있습니다.

주로 이런 문제에 대해 추세가 선형 또는 이차 곡선 등 정해진 형태의 데이터는

detrend 과정을 통해 추세를 없애고 예측 -> 추세 예측 -> detrend 예측치 + 추세 예측치

를 통해 예측할 수 있지만

 

추세가 일정하지 않으면 미래의 추세를 예측할 수 없습니다.

따라서 선형 회귀를 사용하거나 lightgbm 의 parameter를 사용하는 등 외삽 가능한 모델을 사용해야 합니다.

 

 (2) 추세가 변하는 점을 판단 & 추세 기울기 추정

 

시계열적으로 예측을 한다면 Change point detection이 필요합니다.

미래 데이터를 예측하기 위해서는 가장 최근 데이터에서 추세가 변하는 지 안 변하는 지 판단해야 하고

그러기 위해서는 off-line이 아닌 one-line(real-time: 실시간)으로 추세변환점을 찾아주어야 합니다. 

그래야 올라갈지 내려갈지 그대로일지 판단이 되니까요!

만약 추세 변화가 감지되었다면 추세 특성을 모델에 넣어주어 미래 데이터가 어떤 기울기로 움직일지 예측해서 예측값을 산출해야 합니다. 기울기 예측은 과거데이터로 알 수 없고 순전히 사람의 의견으로 하는 것이기에 정확한 예측이 불가합니다.

가장 간단한 예시로 코로나 상황에 대한 예측, 천재지변에서 추세가 어떻게 움직일 지 모르는 상황 같은 것 입니다. 

 

제가 최근에 봤던 영상 "Challenges in Time series forecastng" 이고 이 추세를 예측하는 부분이 어려운 점이라고 강연합니다. 전체적인 추세(global trend) 와 지역적 추세(local trend)가 있는데 local trend로 예측하게 되면 아래 그림과 같이 오버피팅으로 인해 성능이 안좋았다 를 이야기하고 있습니다.

영상 내용 정말 좋으니 시계열에 관심있으신 분들은 참고해주세요!

출처: https://www.youtube.com/watch?v=rcdDl8qf0ZA&t=6s

 

그래서 만약 외부 요인 데이터(선행 요인 데이터)를 잘 구할 수 있다면 회귀적으로 예측하는 것도 하나의 방법일 수 있을 것 같습니다.

(시도해본 결과 물론 쉽지 않습니다 )

 

(수정) 2023.04.21

선행 데이터를 feature로 넣고 회귀모델을 돌렸을 때 가장 큰 문제점이 선행하는 기간이 다른 점이었습니다.

이를 해결하기 위해 변수를 여러 방면으로 조합할 수 있는 multivariable 딥러닝을 시도중입니다.

 

(수정) 2023.06.03

추세가 변한다면 multivariable 딥러닝을 사용해야 합니다.

정말 정말 어떠한 선행데이터를 구할 수 없을 경우 change point detection을 사용하여야 합니다.

이와 관련하여 포스팅을 진행해볼 예정입니다.

 

3. 짧은 시계열엔 어마무시한 배경지식이 필요!

특히 금융 시계열이라면 위에서 말한 추세 변화엔 어마무시한 배경지식이 담겨 있을 가능성이 높습니다.

저의 경우엔 여름에 증가하는 패턴말고는 전부 변했었습니다. 나중에 알고보니 계절성, 추세가 바뀌었을 때 세계적인 금융 issue, 해당 산업 issue 들이 있었습니다. 이런 부분에서 금융시계열이 가장 어렵지 않을까 생각이 드네요

 다음 예측업무를 진행한다면 먼저 관련 도메인 지식 공부를 깊게 공부하고 데이터를 구할 것 같습니다.

 

4. 자동화는 어렵다.

예측 자동화 시스템을 만들어보려 했는데 정말 하나하나가 어려웠습니다. 

추세변환점 탐지 자동화, 계절성 탐지 자동화, 패턴 탐지 자동화 등등.. 각 하나하나가 연구 주제이고 논문이더라고요.

 

 

 

여기까지 저의 6개월 경험을 적어보았습니다.

사실 주가예측을 하는 경우 시뮬레이션을 많이 해서 검증을 하는데 기회가 된다면 

감사합니다!