직접적으로 확인하고자 하는 방법은 Saliency Map을 통해서 확인하려고 합니다.
Saliency Map은 Image Classification에서 각 이미지의 픽셀들이 라벨을 도출할 때 어떠한 역할을 하는지 시각화하는 도구입니다.
이미지 출처 : "Deep Inside Convolutional Networks: Visualising Image Classification Models and Saliency Maps" (Karen et al, 2014)
예를 들어, 위 이미지를 보고 신경망이 '강아지'라고 말할 수 있게 된 것은 강아지가 실제로 위치한 우측 픽셀들의 영향력이 큽니다. Saliency Map은 위 이미지에서 흑백으로 표시된 부분처럼 라벨을 붙이는 데에 가장 영향을 많이 준 픽셀들을 보여줍니다. 각 픽셀이 최종 output에 영향을 끼치는 정도는 gradient로 수치화하는데요, Back propagation을 통해 gradient를 계산해서 이미지로 나타내면 위와 같이 나타나게 됩니다. 더 자세한 내용은 논문 링크를 달아놓을 테니 직접 읽어보시기를 권합니다!
아무튼 이번에는 Saliency Map의 아이디어를 가져와서 Stock price prediction MLP에도 적용해볼까 합니다. Saliency Map은 보통 Data가 이미지일때 많이 사용하지만 아이디어 자체는 Input이 어떤 형태라도 적용 가능합니다. 단순히 gradient만 계산하면 되니까요.
각설하고 결과를 보도록 합시다. 만들었던 MLP모델은 최근 20일간의 종가를 바탕으로 내일의 종가를 예측하는 뉴럴넷이었죠! 따라서 최근 20일간의 종가가 내일의 종가에 끼친 gradient를 각각 도출하면 다음과 같습니다.
앞에서부터 차례대로 gradient를 구한 것입니다. 보기 쉽게 그래프로 표현하면
정도가 되겠네요. 역시 예상했던 대로 마지막 날의 종가가 끼치는 영향이 압도적으로 높습니다. 그래프와 abs sum을 통해 유추해보았던 게 사실로 밝혀졌네요. 뿌듯합니다.
재미있는 사실은 오히려 2일 전의 종가보다 5~6일 전의 종가가 끼치는 영향이 더 높다는 점과, 셋째날(17일 전)의 종가가 끼치는 영향이 높다는 점입니다. initial settings에 영향을 받는지 궁금해서 뉴럴넷을 새로 초기화해서 몇 번 더 돌려 보았는데, 생각보다는 그래프 개형이 유사하네요. 데이터량이 적어서 그런건지도 궁금해서 카카오 말고 다른 데이터로도 돌려보았습니다.
코오롱인더로 돌려본 결과입니다. 마지막날이 끼치는 영향이 엄청나게 크다는 것 빼고 딱히 공통점을 찾을 수는 없네요. 위에서 발견되었던 5~6일 전의 종가와 17일전의 종가가 영향을 주는 건 데이터량이 적어서 발생한 우연이었나봅니다. (ㅋㅋ날로 먹으려 했던 제 자신을 반성...)
역시 Essence를 뽑아내기 위해서는 조금 더 정제된 data 속으로 들어가야하나 봅니다.
어제 글을 쓰다가 우연히 궁금증이 생겨서 짜본 건데, 나름 느낀 것도 있고 재미있었습니다.
조금 더 노력해봐야겠네요 ㅋㅋ
댓글 없음:
댓글 쓰기