저번 포스팅에 이어지는 글입니다.
뉴럴넷으로 틱데이터의 Price Prediction을 메인 과제로 설정하고, 솔루션으로
Simple and scalable predictive uncertainty estimation using deep ensembles (ICML 2017)
를 가져오기로 했었습니다.
내용을 살짝 요약해보면
1. Proper Scoring Rules를 사용하자. (Regression에서는 NLL(Negative Log-likelihood) Criterion 을 적용)
2. Adversarial Training을 사용하자.
3. 앙상블을 사용하자.
정도가 될 것 같습니다.
1번 3번의 경우에는 적용을 하려고 합니다.
그런데 2번의 경우에는 조금 고민이 됩니다.
물론 적용을 하기 전후의 성능을 비교해보고 도입을 할지 말지 고민해봐야하겠지만,
finance data처럼 input data의 특성에 대해 제대로 알지 못하는 상황에서 Adversarial Training을 과하게 사용하면 오히려 feature extraction에 Noise를 추가하는 꼴이 될 것 같아서 AT 도입 전후 성능을 좀 봐야 알 것 같습니다.
본문에서도 Optional하게 제시를 하고 있고, 성능 차이가 크게 나지는 않는 것 같아서 우선 보류하고 돌려보았습니다.
우선 Single Model을 돌려보았는데, 학습이 거의 되지 않는 모습을 보입니다. 첫 에폭때가 가장 Validation score가 낮은 모습을 보면 학습에 용이한 데이터가 아니라는 결과를 보여줍니다. Test Set 결과를 보면 다음과 같습니다.
파란색이 예측치이고, 노란색이 실측값입니다. 애초에 상관관계가 거꾸로 나올만큼 학습 자체가 되지 않을 것을 볼 수 있습니다.
그렇지만 논문 본문에서도 Single Model에서는 유의미한 결과가 나오지 않았기 때문에, 바로 앙상블로 넘어가도록 하겠습니다. Regression의 경우에 앙상블을 하려면 mean과 variance를 어떻게 평균값을 내줄 것이냐 하는 문제에 맞닥뜨리게 됩니다. mean의 경우는 그냥 equally weighted를 가정하면 평균을 구하면 되겠지만, variance의 경우에는 조금 난감한데 논문을 살펴보면 이에 관한 수식이 적혀있습니다.
음 다시 살펴보니 그냥 합동분산의 개념으로 풀어나가는 것 같네요. 아무튼 위의 수식을 사용해서 앙상블을 돌려보았습니다. 논문을 살펴보면 앙상블을 돌릴때 subsampling을 하지 않고 데이터 전체로 모든 모델을 돌렸다고 합니다. 뉴럴넷의 initialization과 데이터를 랜덤하게 셔플해주는 것만으로도 유의미한 앙상블 효과를 누릴 수 있었다고 하니 저도 같은 방식을 차용하겠습니다. 앙상블을 돌려서 얻은 결과는 다음과 같습니다.
파란색 선은 실제값, 노란색 선은 예측값, 그리고 빨간색 영역은 mean + variance와 mean - variance의 사이 영역을 뜻합니다. 1 sigma와 -1 sigma의 사이이므로 대략 68% 정도의 실제값이 영역안으로 들어와야 합니다. 여기서는 68% 이상이 영역안의 값으로 보입니다만, 아마 전체 데이터를 놓고 보면 맞지 않을까 싶습니다. 한번 확인해 보도록 하죠!
전체 데이터의 73퍼센트 정도가 영역 안의 값이네요. 이는 아마도 영역 밖의 값들이 삐져나간 정도가 큰 것과 영역 안의 값들도 영역에 가깝게 형성되었거나 하는 등의 이유 때문일 것 같습니다.
아무튼! 결과적으로는 이 방법론을 통해서는 유의미한 예측을 하기 힘들 것으로 보입니다.
애초에 첫 에폭에서 가장 낮은 validation loss를 갖는다는 것부터가 답은 나왔지만요ㅋㅋ..
첫 에폭에서는 Training Set에 대해서도 언더피팅 상태라서, 데이터를 더 많이 구하거나 전처리 방식을 바꾸지 않는 이상 해결은 어려워 보입니다.
다음 포스팅은 LightGBM을 활용한 Prediction으로 돌아오겠습니다!
댓글 없음:
댓글 쓰기