본문 바로가기
딥러닝으로 하루하루 씹어먹기

LSTM으로 수요 예측하기 - 9장 (마무리)

by Yoo Sung Hyun 2021. 5. 7.
728x90

1. 시간별로 데이터 전처리 / Not Scaled

2. 일반 lstm 3레이어 정도(?)

3. 이후 data도 중요하다고 생각듬

4. BI-LSTM 사용

5. 데이터가 너무 없어 K-Fold 적용

6. Layer만 주구장창 쌓다가 AutoEncoder 활용

7. 데이터 Scaled 적용

8. Loss Function Custom

9. 1차 마무리

  - 여기 사이에는 BERT가 포함되어있다. (Google Source를 다 까봤는데, 이건 언제 또 정리할까...) -

10. Attention 적용

  => Dual-Stage Attention RNN (DA-RNN)

  => Luong Attention (Dot-Product Attention) -> 논문으로 현업 씹어먹기로 작성중...

  => Bahdanau Attention

11. Seq2Seq 활용    => STT/TA 업무 투입으로 Stop

 

2021.04.21 - [딥러닝 일기] - LSTM으로 수요 예측하기 - 7장 (Mean Absolute Scaled Error-MASE)

 

LSTM으로 수요 예측하기 - 7장 (Mean Absolute Scaled Error-MASE)

1. 시간별로 데이터 전처리 / Not Scaled 2. 일반 lstm 3레이어 정도(?) 3. 이후 data도 중요하다고 생각듬 4. BI-LSTM 사용 5. 데이터가 너무 없어 K-Fold 적용 6. Layer만 주구장창 쌓다가 AutoEncoder 활용..

shyu0522.tistory.com

에서 이어집니다...

 

이전 7장에서 MASE에 대한 이론적 내용과, 내가 loss function으로 가져갔을때의 이득이 뭐가 있을지, 그리고 8장에서는 7장에서 MASE에 대해 떠드느라 하지 못한 Data Scaling에 대한 이야기를 해보았다.

 

9장에서는 이론적으로 생각했던 가설들을 실제 문제에 어떻게 적용했으며, 결과적으로 의미가 있었는지 알아보도록 하겠다. (MASE를 도입하고, 활용하는 아이디어는 7장에 있으니 꼭 같이 확인하기 바란다.)

 

목차를 따라오다보면 거의 내용도 끝이 나가듯이, 현재 모델은

 

Reconstruction LSTM Auto Encoder 기반의

Loss Function은 MASE

Optimizer는 Adam(0.001)을 사용한 형태의

 

24시간동안의 각 시간당 수요량을 예측하는,

1일전 데이터로 오늘 예측 / 7일전 데이터로 오늘 예측 / 63일전 데이터로 오늘 예측 / 112일전 데이터로 오늘 예측

 

각각 1일, 7일, 1달, 3개월 과거의 데이터로 현재(미래) 의 값을 예측하는 GAP Forecasting 모델을 운영중에 있다.

 

참고로, 데이터는 7일단위로 끊는 것이, 가장 정확도가 높아서, GAP 역시 7일 단위로 적용하였으며,

실제 현업에서 인력 운용등의 유연성을 위해, 좀 더 미리 데이터를 전달해줄 수 있기 위해, 35일 / 98일이 아닌 63일 / 112일로 모델을 만들게 되었다.

 

결과부터 보도록 하자.

Before

파란선이 실제 / 빨강선이 예측 2020년 전체의 Test Dataset 기준

After

파란선이 실제 / 주황선이 예측 2021년 실제 운영 데이터 값이다.

3월달에 데이터 ETL에 장애가 있어 순간적으로 떨어진 적이 있었으나(24, 26일), 그 때 역시 0으로 예측되진 않았으며, 이전의 그래프들 보다도 훨씬 잘 맞는 것으로 생각해볼 수 있다.

 

6장의 Reconstruction LSTM AutoEncoder 까지만 적용했을때는 Test Dataset이었지만 저정도 수준밖에 안나왔는데, 현재 모델은 실제로 없던 운영값임에도 5월까지의 값이 위와같이 잘 맞아떨어지는 것을 알 수 있다.

(4월 이후에는 어떤 알 수 없는 이유에서 데이터가 갑자기 폭증하기 시작해서, 모델이 약간은 흔들리는 모습을 알 수 있다. 해당 패턴은 과거에도 존재하지 않았던 양상이다.)

 

기울기는 MASE로 조정하였지만, 모델을 MAPE로 검증할 수는 있으니, 실제값으로 검증해보면,

시간기준으로는, 대략 30%의 오차율

일합계 기준으로는, 대략 10~15%의 오차율

을 가진다.

(요구사항 상, 모델은 일합계 기준으로 운영될 것이고, 시간은 이상치 예측을 위한 전조작업이었던지라, 이 수준에서 모델은 매우 합리적으로 판단되어 성공적으로 운영중에 있다.)

 

내가 작성한 MASE 소스는 아래와 같다.

github.com/YooSungHyun/attention-time-forecast/blob/master/custom_loss_2_true.py

 

YooSungHyun/attention-time-forecast

attention으로 시계열 예측은 할 수 없을까. Contribute to YooSungHyun/attention-time-forecast development by creating an account on GitHub.

github.com

앞장에서부터 천천히 읽어온 사람들이라면 알 수 있겠지만, 해당 데이터는 EDA를 했을 시, 연년별 패턴이 뚜렷하게 존재하지 않았고, Feature도 많지 않았지만, 모델 구성과 학습방식을 고도화하여 위와같은 성능까지 이끌어낼 수 있었다.

 

앞장부터 차근차근 내 글을 읽고, 소스들에서 영감을 얻어, 본인이 실제로 조합하여 소스를 구성해본다면, 충분히 구현 가능한 수준까지는 설명이 되지 않았을까 싶다.

 

현재 운영중인 소스는 현재 장까지의 내용으로 구성되었으며,

그 다음에 소개하고자 하는 내용은,

1. BERT

2. Attention

3. ESPNet (STT)

크게 3가지 내용이 되겠다.

 

필자가, Seq2Seq도 작업중에 있었으나 이 부분은 여기서 정리되어 일단은 작성될 예정이 없다.

STT와 TA 업무를 진행하고 있는데, 그래서 일단은 업무하는 쪽 기술을 위주로 좀 더 다뤄보고자한다. Seq2Seq를 사용하여 진행하는건 내 개인적 호기심으로 진행하게 된다면, 작성하도록 하겠다.

 

아, 참! 그리고 Attention을 이용하여, Time Series Forecasting을 진행했던 내용은, 어떻게 되었는지 현재 장과는 별도로, DA-RNN을 이야기하는 부분과 연계하여 설명하도록 하겠다.

2021.04.15 - [논문으로 현업 씹어먹기] - Dual-Stage Attention-Based RNN for Time Series Prediction

 

Dual-Stage Attention-Based RNN for Time Series Prediction

서론 최근의 일이다. BERT를 파보고 있었다. (Goolgle git에서 다운받아서.) Attention을 알고는 있었는데, 자연어 처리 업무를 최근까지 할 일이 거의 없었고(맨~~~이미지만 그냥.,...), 대부분의 작업을 K

shyu0522.tistory.com

 

여기까지 작업하는데만 거의 3개월? 4개월? 걸린것 같다. (혼자서 진행)

야근도 진짜 매일매일했는데, 스트레스받은만큼의 1.3배정도 재미있었으니, 뭐 이정도면 됐으려나?

 

한글로 딥러닝 시계열예측 검색하면, 순 애매모호한 한국 논문들만 나오고, 대부분이 ARIMA가 판치는 이 검색판에, 내 게시글이 한줄기 빛은 될 수 있을까? 싶은 기대감도 살짝 있다. (난 실제 서비스에서 운영중이니 믿어도 좋다!)

 

뭐 여튼 결론적으로 안되진 않는다. 잘 된다. 딥러닝을 현업에게 이해시키는 것이 챌린지라면 챌린지겠지만...

모두 화이팅하길 바란다.

 

그리고 질문은 언제나 환영이다.

728x90

댓글