logo

Contact

If you want to contact us, please use following emails. Any enquiries will be welcomed. :)

Technical stuff


james@deepnumbers.com

Marketing stuff


jenny@deepnumbers.com

로보어드바이져를 개발하면서 알게 된 것들 1 – 알고리즘에 대한 환상

disturbed-illusion

로보어드바이져를 개발하면서 알게 된 것들 1 – 알고리즘에 대한 환상

로보어드바이져를 개발하기로 개발하기로 마음먹었을때 마음속에는 자신감이 충만했었다.

딥러닝이 이미지인식에서 보여준 놀라운 결과를 생각해보면, 비록 금융데이터라 도메인은 다르지만 일정 수준이상의 결과를 기대해도 될 것이라는 허무맹랑한 생각이 가득했었다.

그래서 즐거운 마음으로 관련된 내용들을 공부하고, 수학책을 열심히 들여다보면서 과거에 배웠던 지식들을 다시 소환하기 시작했다.

한편으로는 딥러닝의 학습에 필요한 각종 금융데이터들을 수집하기 위한 프로그램을 간단히 개발하고, 이를 밤낮없이 실행시켜  데이터를 다운로드 받았다.

구글 스칼라를 이용해 딥러닝을 금융에 적용해 무언가를 해본 논문들을 검색하였다. 그런데 생각보다 논문의 수가 많지 않았다. 약간 의외라고 생각이 되었다. 왜냐하면 금융에 딥러닝을 금융에 적용해 일정수준이상의 성취를 한다면 어떤 미래가 펼쳐질지는 굳이 생각할 필요가 없는데, 이런 생각을 전세계에서 아주 극소수의 딥러닝 연구자들만이 했을리가 없기 때문이었다.

마치  음식을 잘한다는 음식점에 식사시간 맞추어 갔는데, 막상 가보니 손님이 별로 없을때의 당혹감과 유사하다고 할 수 있다.

개중에 그래도 연관있어 보이는 몇개의 논문을 다운받아 탐독을 시작했다. 다운받은 논문들의 내용은 몇가지 특징이 있었는데 1) 딥러닝자체에 대한 소개나 알고리즘의 설명에 상당부분을 할애했다는 것과, 2) 무엇을 어떻게 했다는 내용은 거의 없고 딥러닝 알고리즘을 적용했더니 이런 결과가 나왔다는 식의 내용이 주로 담겨 있었다.

논문의 제목은 잊어버렸으나 기억에 남는 내용중의 하나는 주가예측에 RNN을 사용하고 평가를 해보니 R2 계수가 거의 “0”이라고 언급한 것이 있었다. R2계수는 다음과 같은 식으로 구할 수 있다.

 

R2 = Explained variation / Total variation

 

R2계수는 0부터 1사이의 값을 가지는데 1에 가까울수록 예측력이 좋은 것이다.

R2가 0이라는 것은 예측력이 없다는 것을 의미하고, 주가예측을 위해 학습시킨 RNN 모델이 무작위로 주가를 예측한것과 다를바 없다는 것을 의미한다.

불길한 예감이 들기 시작했지만 내가하면 다를 것이라는 근거없는 자신감으로 첫번째 모델을 개발하였다.

주가예측은 Time Series 이기 때문에 당연히 RNN을 적용하였고 python theano를 이용했다.

처음 모델을 실행시켜보니 속도가 너무 느려서 미치는 줄 알았다.

항상 엔터치면 곧바로 실행결과를 보다가, 딥러닝에서 처음으로 엔터치고 몇날몇일을 기다려야하는 상황이되니 답답한 마음에 견디기가 어려웠다.

결국 딥러닝의 학습시간을 단축시키기 위해서 돈을 들여서 GPU를 사고 말았다. 확실히 GPU를 장착하고 프로그램을 실행하니 CPU를 사용할 때 보다 학습시간이 많이 단축되었다. 기대했던것보다는 빠르지 않았지만 대안이 없었기에 참고 견뎌내야 했다.

드디어 학습이 종료되고 테스트 데이터를 이용한 학습결과가 모니터에 나타났다.

처음에 학습결과의 수치를 보고 큰 충격을 받았다. RMSE(Root Mean Square Error)의 값이 거대했다.

RMSE는 실제값과 예측값과의 차이를 수치화한것으로 당연히 RMSE가 작을수록 좋다.

이전에 논문에서 봤던 R2값이 거의 0이라는 내용이 머리속에 떠올랐다.

내가 만든 첫번째 모델도, 그 논문의 저자와 비슷하게 예측력이 없는 형편없는 모델로 판명이 났다.

혹시나하는 마음에 다른 테스트데이터를 넣어보았지만 결과는 크게 다르지 않았다.

첫모델이니 당연히 결과가 나오지 않을 것이라는 생각을 했고, 여러가지 논문들을 참고하면서 모델을 수정하면서 발전시키면 좋은 결과가 나올 것이라 생각했다.

그렇게 2차, 3차,4차….n차 모델을 만들었지만 처음보다는 나아지기는 했으나 여전히 기대이하의 결과를 보여주었다.

각종 논문에 나와있는 여러가지 모델들과 갖가지 테크닉들을 적용해보았지만 약간의 발전만 있을뿐 유의할만한 발전은 없었다.

 

Logistic-curve.svg

 

이런저런 시도를 하던차에 그 유명한 Andrew ng 교수의 머신러닝 강좌를 다시 보았는데, 그 강좌에서 ng교수가 Logistic Regression을 설명하면서 훌륭한 알고리즘이라고 얘기하고, 이것을 이용해 실리콘밸리의 많은 회사들이 수익을 잘 내고 있다는 설명을 들었는데 갑자기 머리속에 충격이 왔다.

Logistic Regression은 Linear Regression과 더불어 머신러닝의 가장 기초적인 알고리즘으로 머신러닝을 공부할때 처음에 소개되는 대표적인 알고리즘이다. 여기에 쓰인 수학이 어렵지 않고, 개념 또한 명쾌하기 때문에 이해하기 어렵지 않은 기초중의 기초인데 실리콘밸리의 많은 스타트업들이 이것을 잘 활용하고 있다고 했다.

기초적인 Logistic Regression으로 훌륭한 결과를 만들어낸다는 것은 단순한 알고리즘이라도 학습에 사용된 데이터가 훌륭하다면 좋은 결과를 보여준다는 사실을 Andrew ng 교수가 가르쳐주어, 데이터의 중요성을 다시 한번 깨닫게 되었다.

머신러닝 알고리즘은 주어진 데이터를 이용해 자신의 모델을 완성해나가는 방식으로, 학습에 사용된 데이터의 품질이 곧 알고리즘의 품질을 결정한다고 이야기 할 수 있다.

데이터가 좋으면 당연히 좋은 품질의 결과물이, 데이터가 나쁘다면 엉망진창의 결과물이 나오는 것이다.

그동안은 데이터를 무시하고 딥러닝 알고리즘이라는 환상에 빠져, 알고리즘을 개선하려는 노력만을 했는데, 이것보다 결과에 큰 영향을 미치는 것이 데이터라는 기본적인 것을 잊고 있었다.

그래서 챙피하지만, 딥러닝을 하기전에 응당 해야할 EDA를 해보았는데, 학습에 사용한 데이터에 패턴이 잘 보이지 않는, random data라는 것을 알게 되었고, 이런 데이터를 딥러닝에 넣어서 좋은 결과가 나오기를 기대한 내가 바보라는 것을 알게 되었다.

확실히 배운 것은 아무리 좋은 알고리즘이라하더라도 어떤 데이터를 다루는가에 따라 결과가 달라지기 때문에 알고리즘보다는 데이터가 우선이라는 평범한 진리를 몸으로 체득하게 되었다.

 

randomforest

 

어느날 문득 심심풀이로 Random Forest 알고리즘을 적용해보았는데, 놀랍게도 딥러닝 알고리즘보다 좋은 결과를 보여주었다.

RandomForest 알고리즘은 그 유명한 Decision Tree 계열의 알고리즘으로 딥러닝처럼 사용이 까다롭지 않고, 대용량 데이터도 잘처리하는 특징이 있는 것으로, 딥러닝과는 달리 정말 별로 한 것이 없었지만 더 좋은 결과가 나와서 미쳐버리는 줄 알았다.

다시 한번 말하지만 딥러닝에 들인 노력을 100 이라고 하면 Random Forest에는 0.1정도의 노력, 사실 노력이라고 이야기하기 부끄러운 정도로 한게 없었다.

내가 그동안 한 노력이 정말 부질없었다는 생각과 함께 내 스스로 바보라는 사실을 알았다.

문제의 성격에 따라, 내가 원하는 결과에 따라 적합한 알고리즘을 선택해야 비용대비 효과를 볼 수 있기 때문에 내가 다룰려는 문제가 무엇인지, 그 데이터의 특성은 무엇인지 등을 파악하는 것은 아무리 강조해도 지나침이 없을 것이다.

그리고 이 경험 이후로는 알고리즘이 아무리 좋아도 데이터가 좋지 않다면 그 결과물은 쓰레기라는 사실을 알고, 알고리즘에 대한 환상을 버리게 되었다.

우리가 잘 알고 있는 명언은 딥러닝에서도 예외없이 통용된다.!!!

 

“Garbage in, Garbage out”

 

user-gravatar
안 명호

어느 날 알게 된 머신러닝에 흠뻑 빠져 그동안 애지중지하던 클라우드를 버리고 머신러닝으로 전향하였다. 이제 더는 다른 기술은 관심을 두지 않고 머신러닝 한길만으로 정했기에 머신러닝을 공부하며 어려운 수식들을 다시 보느라 고생하고 있지만, 하루하루 배워가는 지식에 행복해하며 지내고 있다.

2 Comments
  • Posted at 4:08 am, May 17, 2016

    좋은 글 감사합니다^^
    딥러닝 글로 보고 얘기만 들었지 어떻게 학습을 시키고 어떤 프로그램으로 할 수 있는것인지 저같은 초보는 어렵네요.
    혹 초보자가 체험(?) 할 수 있는 사이트 같은게 있을까요?

Post a Comment

Comment
Name
Email
Website