월간 데이콘 2020 D CUP Google Analytics 데이터 경진대회

알고리즘 | 정형 | 회귀 | 행태심리 | RMSE

  • moneyIcon Prize : 총 100만원 + 데이콘 기념품
  • 595명 마감
Closed

 

Private 7위, Private 점수: 5.0278 , LSTM

2021.01.23 03:18 4,377 Views language

LSTM과 1스텝교차검사(One-step Ahead Cross-validation)을 이용하여 분석하였습니다.

[목차]
1. 필요 라이브러리 다운 및 코랩 마운트
2. 데이터 불러오기(1차, 2차)
3. 전처리
4. 학습
5. 시각화
6. 제출파일 만들기

[핵심기법]
-LSTM 
 var, prophet, SARIMA정도를 생각했는데, 개인적으로 분석할때 가장 정확도가 좋았던 딥러닝 기법을 사용하기로 하였습니다.
값을 예측하는데는 일주일 단위로 영향을 주는것이 합리적이라고 생각했습니다. 
따라서 sequence를 7로 하여, n일을 예측하기 위해  (n-7~n-1)의 데이터를 사용하였습니다.


-1스텝 교차검사(One-step Ahead Cross-validation)
데이터를 순차적으로 하나씩 예측해나갔습니다.
train set(2020-09-09일~X일)으로 모델을 학습시키고 해당 모델로 (X+1일)의 값을 예측합니다.
그리고 제가 예측한( X+1일)값을  train set에 추가합니다.
이후 X+1의 값이 추가된 train set(2020-09-09~X+1)으로 새로운 모델을 학습시키고 해당 모델로  (X+2)의 값을 예측합니다.
위 수행을 예측해야 할 데이터의 개수 31개 (2020-12-09~2021-01-08) 만큼 반복했습니다.

초기에 예측이 잘못되면 연쇄적으로 정확도가 안좋아질 수 있는 위험이 있지만, 
주어진 데이터가 단순한 편이라 그부분은 감수하고 위와같이 수행하였습니다.
* (https://robjhyndman.com/hyndsight/tscv/) 해당 사이트에 1스텝 교차검사의 설명이 있습니다. 참고하시기 바랍니다.

[소감]
최근에 시계열 데이터분석 공부를 하고있었는데 실습해 볼 기회가 생겨서 좋았습니다. 
앞으로 더 많은 시계열데이터 분석 대회가 열렸으면 좋겠습니다!
모두 수고하셨습니다.

Code
로그인이 필요합니다
0 / 1000
PNU_INS
2021.01.23 17:28

잘봤습니다. 코드공유 감사합니다

최정환
2021.01.24 21:23

몇가지 질문이 있어서 댓글 남깁니다.
1. Validation 은 혹시 따로 진행하시지 않고 train 만 진행하신건가요? 그렇다면 lstm layer, window size 등 최적의 값을 어떻게 튜닝하신건지 궁금합니다.

2. Train 진행하신 방식이 모델로 예측한 값을 다시 train 데이터에 넣은 후 새로운 train set으로 다시 그다음 값을 예측하는 구조가 맞나요?

씩씩한오리너구리
2021.01.24 22:07

1. 데이터셋이 많지 않다고 판단하여  validation set을 따로 두지않았습니다. varience보단 bias를 줄이기 위한 전략이였습니다. (대신 drop out 비율을 0.3으로 좀 크게주어서 최대한 오버피팅을 방지하려고 했습니다.)
layer의 구성 및 기타 하이퍼파라미터 설정은 비슷한 크기의 데이터셋을 분석한 여러 다른 lstm모델들을 참조했습니다. 이때 최대한 오버피팅을 피하기 위해  epoch 및 layer의 개수는 다른 모델들 보다 작게 조절했습니다.

2. 맞습니다! 

DM_MSI
2021.11.24 16:22

정말 저에게 필요한 코드였는데, 정말 감사합니다! 잘봤습니다~!