연구기간
02/2023 ~ 07/2023
연구 목적
M4 Dataset에 대해서 SOTA를 달성하는 Self-Supervised learning model의 구현
모델 구조
- TF-C
- N-BEATS
데이터
- M4 Dataset
- N-BEATS backbone 적용 전에는 Many-to-one 실험
- 같은 Time frequency
- 같은 Data domain
- N-BEATS backbone 적용 후에는 One-to-one 실험
실험
-
시계열 분류 → 시계열 예측 문제로 변경
- Classifier → Forecaster로 변경
- 분류와 관련된 코드를 모두 예측 Task로 변경
-
하이퍼파라미터의 변경
- Loss Function에서의 각 항의 계수 변경
- Learning rate 변경
- 입력 데이터의 window size와 horizon size의 변경
-
Augmentation의 변경
- Time domain
- Jittering
- Clipping
- Perturbation
- Jittering만 사용했을 경우가 가장 성능이 좋았음
-
Fine-tuning Loss를 sMAPE으로 변경
- 기존에 분류 task를 수행했기 때문에 cross-entropy loss 이었음
- sMAPE은 M4 Competition에서 사용된 evaluation function 중 하나
-
시계열 예측에 대한 Baseline 모델 구현하여 성능 비교
- Baseline 모델
- N-BEATS
- TF-C 모델에서 Frequency 부분을 떼어낸 Skip-connection이 적용된 CNN model
- TF-C 모델에서 Frequency 부분을 떼어낸 Transformer model
-
Backbone의 변경
- 논문에서 제시한 방법인 Transformer / CNN / LSTM backbone을 각각 적용해보고 성능 확인
- M4 dataset에 대하여 SOTA를 달성했던 모델인 N-BEATS를 TF-C 모델의 backbone으로 사용하여 성능 확인
- 현재 여러 시계열 데이터셋에서 SOTA를 달성한 모델인 N-Linear 모델을 backbone으로 사용하여 성능 확인
→ 그나마 Transformer가 성능이 좋았음
-
MinMaxScaling을 제거하고 실험
- N-BEATS 논문에서 M4 데이터셋에 대하여 MinMaxScaling을 통한 전처리를 하지 않았고 Scaling에 robust한 sMAPE을 사용했기 때문에 MinMaxScaling이 시계열 데이터의 정보를 훼손한다고 생각하였음
- 단순히 Backbone을 N-BEATS 모델로 적용했을 때보다는 성능이 개선되었지만 여전히 supervised learning으로 학습한 N-BEATS 모델보다는 성능이 떨어짐
-
N-BEATS의 출력을 backcast일 경우 forecast일 경우에 대해 성능 확인
- N-BEATS의 출력인 forecast와 backcast 두 표현 방식에 대해서 성능에 큰 차이가 없었음
References
TF-C code github : https://github.com/mims-harvard/TFC-pretraining
N-Beats code github : https://github.com/ServiceNow/N-BEATS
회고
- N-BEATS 모델은 horizon의 길이에 따라서 다른 파라미터를 가지는 여러 모델들을 앙상블해서 학습을 하는데 Contrastive learning에서 이 앙상블 학습이 시계열 특성을 해치지는 않는지 궁금함
- Jittering에서 Gaussian noise의 범위를 조절하여 성능향상을 할 수 있을 것으로 예상
- 시계열 데이터는 다른 데이터들에 비해서 정보가 적다고 생각하여 복잡한 모델에서의 시계열 데이터의 학습은 과적합이 쉽게 일어날 것 같아 이 과적합을 잡아주는 것이 시계열 데이터의 문제들을 해결하는데 큰 요인으로 작용할 수도 있을 것이라고 생각하게 됨
- 시계열 데이터는 같은 도메인과 같은 시간 주기에 대해서 데이터를 가져오면 데이터가 상당히 유사한 모습을 지니고 있다고 생각을 하여 과적합을 잘 잡아주어야한다고 생각하는데 이를 Scale정보를 분리하여 따로 학습하고 MinMaxScaling한 데이터를 모델에 넣어주어 학습을 하여 두 feature를 결합하는 방식으로 모델을 구성하는 방식으로 성능을 개선시킬 수 있을지 궁금함
좋은 글 감사합니다.