데이터 사이언스 강의 6주차 수업을 끝내고 수업 매니저분들, 학생분들과 이런저런 이야기를 나눴다. 제일 많이 들은 이야기는 역시 왜 이렇게 어렵냐, 첫 시간부터 알파고에 썼다던 Neural Network로 인공지능 적용하는거 한 두줄짜리 코드로 퐉~ 보여줄 줄 알았는데, 계속 통계학 수식만 나와서 괴롭다는 이야기였다.

공감한다 – 다른 글에 썼듯이 필자도 MIT에서 머신러닝 들을 때, 반 학기 동안 통계학 수업 잘못 들어온 줄 알았었다.

공감해서 수업 진행 방식을 바꿀꺼냐고 묻는다면, 내 답은 정해져 있다. 수업이 어렵다고 하실게 아니라, 데이터 사이언스에 대한 오해해서 벗어나시라고. 코딩 좀 들어간다고 데이터 사이언스가 개발이라고 착각하지 마시라. 데이터 사이언스는 빅데이터와 통계를 결합한 신종 통계학이다. If와 Then으로 결합된 코딩으로 Yes/No의 결과값이 나오는게 아니라, 확률적인 추정을 제시하는 모델들의 결합이다.

한 예로, 텍스트 크롤링(데이터 긁어오는 작업) 프로젝트 하나에 참여하고나면, 응용 능력에 따라 텍스트 크롤링 전문가로 성장할 수 있다. 그러나 텍스트 크롤링으로 나온 데이터에 SVM을 적용해서 데이터 그룹핑을 했다고해서 다음번에도 같은 방식을 적용할 수 있는 확률은 매우 낮다. 기존의 SVM이 Linear였다면 Non-linear 모델도 적용할 수 있고, 데이터의 특성에 따라 (특정 단어 조합이 매우 많은 경우는 데이터 분포가 다르게 나온다) Non-linear 모델에 적용하는 Kernel 함수도 달라진다.

결국 통계학 모르면 머신러닝 할 수 없다. 머신러닝은 이름만 공대용으로 바뀐 통계학이니까.

(모 대학 화학 수업 칠판 – 저 동네도 수학 모르면 못 살아 남겠다)

 

1. 데이터 사이언스와 통계학

LSE에서 경제학 석사하던 시절에 우리나라 유명 사립대학에 교수로 임용된 선배님형님(?)을 뵌 적이 있다. 형님교수님 말씀이 경제학 학부 수업을 가르칠려니 봐야할 교재가 참 많아지더라, 가르치려니 오히려 더 배우는게 많고, 박사 공부 시절에 못 봤던게 참 많이 보인다고 하시더라. “석사 나부랭이”였던 그 시절엔, 박사 5년동안 연구하면 수업 교재는 쉽게 뚝딱 나오는건 줄 알았는데, 이번에 데이터 사이언스 강의 노트를 만들면서 “봐야할 교재가 참 많아지더라”는 말씀에 너무너무 공감을 하게 됐다. 박사는 특정 주제를 잡고 연구하는 사람이지, 가르치려고 이것저것 얇고 넓게 공부하는 사람이 아니거든. 어느 잘 짜여진 교재를 따라가기만하면 그런 부담을 안 느낄 수도 있겠지만, 마음에 드는 교재가 없어서 결국엔 새로 만들어야되니 여러 책을 참조할 수 밖에 없고, 자기 색깔로 바꾸는 것도 참 쉬운 일이 아니더라.

보스턴에 처음가서 난데없이 맡았던 Stochastic Calculus라는 석사용 수학 수업 조교할 때는, 그나마 교수님이 쓰셨던 강의노트에서 부족한 내용을 설명해주고, 여러 책에서 찾은 연습문제 풀어주면서 수업을 진행했었는데, 이번에 데이터 사이언스 강의용으로는 마음에 드는 교재도 없고, 직접 교재를 만들고 예제 코드를 다 치려니 은근히 창작의 고통이 심했다. 강의 준비하니까 평소에 가볍게 생각하고 지나갔던 부분들도 다시 보면서 공부하게 되고, 몰랐던 내용들 일부는 새로 공부하게 됐고, 일하면서 무심코 썼던 방법들이 틀렸다는 사실을 알게되어서 쪽팔림도 좀 있었다. 그런 내용을 다 강의에 집어넣으려고 욕심을 내니 강의가 어렵다고 생각할지도.

글 첫머리에도 썼듯이, 처음에 머신러닝 수업을 들어가서 한동안 통계학 수업에 잘못왔나 싶을만큼 통계학만 공부했던 기억 탓인지 처음에 강의 노트를 만들었을 때는 지금보다 훨씬 더 (수리)통계학에 기반했었다. 주변에서 조언해주는 지인들 덕분에 수학적인 부분을 많이 직관적인 내용으로 바꾸고 R 코드에 수업 절반의 가중치를 쏟는 지금도 통계학 수식이 많이 나와서 괴롭다는 이야기를 듣기는 하지만 ㅋㅋ

근데 영어권에서 데이터 사이언스 or 머신러닝 입문자에게 추천하는 교재들을 보면, 역시 예상대로 대부분은 통계학 교재다. 아마 제일 많이 알려진 교재가 “An Introduction to Statistical Learning with Applications in R” (PDF) (약칭 ISLR, 위 사진 참조)일텐데, 아예 책 제목에 보다시피 “통계학”이라는 단어가 들어가 있다. MOOC 수업 중에서 제일 많이 알려진 수업은 아마 Andrew Ng 전 스탠포드 교수님의 Coursera 강의일텐데, 이 수업도 대단히 수리통계학 기반의 내용들로 구성되어 있다. 오죽했으면 이 수업 평가하는 사람들이 머신러닝에 대해서 개발자들이 잘못알고 있다면서, 이 수업을 보면 머신러닝은 “Not an engineering project, but an applied mathematics”라고 했을까?

ISLR 수업 링크 모아놓은 R-blogger.com 페이지:
https://www.r-bloggers.com/in-depth-introduction-to-machine-learning-in-15-hours-of-expert-videos/

저 수업에 나온 내용들 중에 정말 일부의 수식만 갖다 쓰는데도 통계학 수식만 나와서 괴롭다고하니, 한편으로는 예전 내 생각이 나서 이해가 되면서도, 또 한편으로는 참 안타깝다. 참고로 저 교재랑 Andrew Ng 교수님 수업은 모두 학부 고학년용이다. (교재 머리말에 아예 그렇게 적혀있다. 학부생이나 Non-technical PhD 대상이라고) 그리고 이미 알려진대로 한국에서 적당히 수학 공부하고 간 유학생들이 미쿡에서 대학원가기 전까지 수학으로 힘들어하는 경우는 거의 없다. 딱 그정도 수학이면 된다. 필자도 강의 노트 만들면서 고교 수학 교재를 옆에 두는데, 요즘와서 느끼는거지만 우리나라 고등학교 교과서 정말 짱이다.

 

2. 데이터 사이언스와 코딩

데이터 사이언스 수업 준비하면서 또 많이 들었던 이야기가 “실제로 해 봐야 알지, 수업만 들어서 아냐”고 하는 불평이다. 이 코멘트는 한편으로는 맞는 말이고, 다른 한편으로는 틀린 말이다. 맞는 부분은 당연히 수식의 개념만 이해하는데서 끝나는게 아니라 그걸 화면에 코드로 띄워봐야 지식을 몸으로 습득할 수 있다는 이야기이고, 틀린 부분은 코드만 치는 일은 사실 피상적인 이해에 지나지 않기 때문이다.

(SVM 모델링시 최적 파라미터 찾는 코드 예시)

주변에서 가끔보는 데이터 사이언스 수업 중에, Kaggle이 데이터 전처리를 싹 해준 데이터를 이용해서 몇 가지 알고리즘을 적용해보고 그 결과값을 Kaggle에 제출하는 수업이 있더라. 그 방법이 틀렸다고 생각하지는 않지만, 1. 왜 Random Forest를 쓰고, 2. Random Forest의 파라미터는 어떤 값을 줘야하고, 3. 각각의 파라미터는 무슨 아이디어에서 출발하고, 4. 그 알고리즘 전체가 어떤 아이디어에서 나왔기 때문에 어떤 종류의 데이터와 어떤 목적에 활용할 수 있다는 근본적인 메세지는 너무 어려운지 제시를 안 하더라. 이런 수업에서는 실제로 뭔가를 돌려보기는 하는데, 주어진 Kaggle 데이터를 돌려보는데서 끝나게 된다.

예시로 SVM (Support Vector Machine) 코드를 하나 보자.

 
library(e1071)
변수_1 <- svm(y값 ~ x값들, data = 훈련 데이터, method = "C-classification", kernel = "linear"
변수_2 <- svm(y값 ~ x값들, data = 훈련 데이터, method = "C-classification", kernel = "radial", cost = Regularization 값, gamma = 정규분포의 분산의 역수

첫번째 라인에서 SVM 명령어 패키지를 불러왔고, 두번째 라인은 Linear SVM을 적용하는 코드다. 그리고 세번째 라인은 Non-linear SVM을 적용하는 경우인데, Non-linear는 함수가 복잡하니까 여러가지 설정이 필요하다. 수업 시간에 저 설정들 중 가장 최적 값을 찾는 몇 줄짜리 알고리즘만 배우고 끝날게 아니라, cost라고 쓰인 부분이 무슨 의미인지, gamma라고 쓰인 부분이 무슨 의미인지 이해 못하면 사실 SVM은 배우나 마나한 지식이 된다.

주변에서 데이터 사이언스 수업을 들었다고 하는 지인들의 지식 수준이 딱 첫번째 라인과 두번째 라인에 머물러 있다는 사실은, 현재 시장에 돌아다니는 많은 수업들이 마지막 라인을 제대로 설명하지 않고 있다는 이야기라고 봐야하지 않을까? “실제로 해 봐야 알지, 수업만 들어서 아냐”에서 한 발자국 더 나가서, “실제로 해 본다고 아냐, 모델이 어떻게 돌아가는지 알아야지”라고 말해주고 싶다.

(참고로, 세번째 라인은, Non-linear SVM을 적용할 때, 정규분포를 Kernel로 쓰고, Kernel의 형태를 gamma로 지정하고, over-fitting이 발생하지 않도록 cost – regularization parameter의 역수 – 를 조정하는 내용들이 다 포함되어 있다. gamma 값을 어떻게 지정해야하는지, cost는 왜 다른 값의 역수를 써 놨는지 모르고 무작정 다른 변수만 집어넣으면 시간 낭비 밖에 더 되랴? 뭔가 엄청나게 복잡한게 숨어 있는 것처럼 써놓은 것 같지만, 사실 개념 이해만 하고 가기에 넘사벽 지식은 아니다.)

(필자가 실리콘밸리에서 데이터 사이언티스트 면접 중 위의 질문이 나왔던 적이 있다. 어떤 목적을 위해서 어떤 데이터를 모아야하고, 적용할 수 있는 알고리즘을 주욱 나열하고, 각각을 어떻게 적용하는지 코딩 아이디어를 나열하는데, 결국 코딩이 아니라 수학/통계학 지식이 어느 정도 깊은지, 그래서 그 지식을 데이터 셋에 맞게 잘 활용할 수 있는지를 물어보는 면접이었던 것 같다.)

필자가 그랬던 것처럼, 세번째 라인을 “이해”할 수 있는 지식을 갖고 있으면 충분히 데이터 사이언스에 도전할 수 있다. 필자가 기업들에 제공하는 코드도 결국에는 세번째 라인을 어떻게 쓰느냐에 따라 결정이 되니까. 다만 실제 업무는 저런 모델 한 줄이 나오기까지 수 많은 모델을 테스트하고, 결과값도 비교해보고, 그리고 다양한 종류의 데이터 전처리도 진행해야 한다.

많은 개발자들이 데이터 사이언스를 보니 코드가 들어가 있다고 개발이랑 비슷하게 접근한다. 그런 분께 되묻고 싶다. 저 위의 예시 코드를 이해하려면 코딩 지식이 필요할까? 통계학 지식이 필요할까? 데이터 사이언스에서 코딩은 알고 있는 지식을 표현하기 위한 외국어이지, 건축에 쓰는 자재가 아니다.

“수업만 들어서도”, “실제로 해보기만 해서도” 부족하다. 결국엔 통계학 모델을 이해해야 한다. 수업의 절반을 모델 아이디어와 설명에 쓰는 것도 이런 이유에서다.

 

3. 데이터 사이언스와 개발자 잡마켓

먼저 분명히 해두고 싶은 것은, 데이터 사이언티스트는 개발자가 아니고, 개발자도 데이터 사이언티스트가 아니라는 사실이다.

데이터 사이언스 업무의 특성상, 데이터 서버와 관리에 대한 깊은 지식이 있어야하고, 그 겹치는 영역 때문에 데이터 사이언스하려면 개발할 줄 알아야한다고 착각들을 한다. 그러나 데이터 사이언티스트는 데이터를 어떻게 활용할지 수리 통계학적인 모델을 만들고 테스트하는 사람이지, 데이터 베이스를 셋업하는 사람이 아니다. 한 예로, 데이터 크롤링해서 그래프로 정리했으면, 데이터 엔지니어링 업무와 데이터 애널리스트의 시각화 업무를 한 거지, 거기에 데이터 사이언스는 안 들어가 있다.

필자가 개발자를 뽑으려고 면접을 보면, 자기들이 머신러닝에 노출도가 있다면서 MNIST 데이터 셋을 CNN으로 돌려서 숫자 인식하는 알고리즘을 만들어봤다, 무슨 알고리즘을 어디에 넣어봤다고 그런다. 솔직히 말해서 필자는 그런 코드 몇 줄 실행해본 경험이랑 MBA에서 2년동안 파티하고 골프치고 온 경험을 (거의) 같은 클래스로 본다. 그런 이야기를 하는 1-2분 동안 정말로 미안하지만 면접을 빨리 끝내고 싶더라. 차라리 그런 말 안 하고 자신의 “개발” 실력을 자랑하셨으면 더 좋았을 듯.

(SVM 모델 Tuning 하는 작업 코드 예시)

요즘보면 오픈 소스 데이터 크롤링 좀 해와서 머신러닝 알고리즘 하나 얹어놓고는 무슨 대단히 고난이도 작업을 진행 중인 것처럼 하는 사람들이 많다. 정작 이런 분들이 해놓은 머신러닝 알고리즘 까보면 저 위의 SVM 기준으로 두번째 라인 코드더라. 당연히 왜 “Linear” 모델 적용했냐고 물어보면 횡설수설한다. Kernel을 쓴 사람들도 왜 Kernel을 썼는지 물어보면 제대로 대답하는 경우를 본 적이 없다. 왜 정규 분포가 들어가는 Kernel을 써야하는지, Parameter는 뭘로 잡아서 테스트를 해 봤는지 하나도 대답 못한다. 내가 그런 사람을 왜 뽑아야하지? 왜 VC들이 그런 회사에 투자해야하지? “개발+머신러닝 기초지식 <> 데이터 사이언티스트” 라는 말에 좀 공감하실 수 있나? (<>는 “다르다”는 코드)

필자의 수업에 와 계신 개발자 분께서 그러시더라. 그래도 저런 프로젝트(?) 경험이 있으면 회사들이 데리고가서 쓴다고. 최소한 대학교 갓 졸업하는 학생들은 저런 패키지로 포트폴리오 만들어서 취업에 쓸꺼라고.

쇼크 먹었다.

 

4. 나가며

외국계 투자은행에서 PPT 슬라이드 만들고, Excel로 Cash flow 모델 만들고, 술 접대 열심히하면서 정작 공부했던 머리는 하나도 못 쓰던 그 시절, 전 세계 방방곡곡을 쏘다니며 Risk modeling하고 있던 아는 형이 그러더라. Risk modeling을 해서 가져가면, 한국에서는 “그래서 잘 맞추나요?”라는 질문이외에 다른 질문은 안 나오는데, 다른 나라에서는 모델에 무슨 변수를 넣었고, 어떻게 계산했는지 너무너무 꼼꼼하게 물어서 대답하기 지친다고. 보험사 다니는 다른 형님 하나는 경제학 수업 때 나온 “Euler equation”을 활용한다는 보험 컨설팅 회사에 수학 알고리즘 설명 좀 해달라고 했더니, 계속 도망다니더니 몇 달 후에 프랑스 본사에 있는 모델 담당 직원을 데리고 와서 프리젠테이션을 해주더라고 그러시기도 했다.

그렇게 실력없는 사람들이 판을 치고 있는 건가 싶어서 낙담하다가도, 정작 요즘 우리나라 신용등급 계산하는 모델을 보면 감탄사가 절로 나온다. 일전에 이런저런 개인 데이터 크롤링해서 개인의 신용 등급을 새로 계산하는 모델을 한번 만들어볼까 싶었는데, 한국인의 동질성, 우리나라 신용평가 기관들이 가진 데이터의 종류, 현재 신용등급 산정 기준을 보고 맘을 접은 적이 있다. 10등급인 우리나라 신용등급 데이터를 갖고 법적인 제한만 없다면 최소한 100등급의 세부 구분도 얼마든지 할 수 있겠더라. 이래서 같은 2등급인데도 누구는 대출 심사 통과하고 누구는 리젝되는 거겠지. 한참 공부한 후에, 적어도 한국에서는 저런식으로 크롤링한 데이터 만으로 신용등급 기관이 가진 모델보다 압도적인 우위를 점할 수가 없겠다 싶어서 맘을 접었다. 실력없는 몇 몇 사람들 때문에 Risk management 여러 곳에서 욕을 먹고 있지만, 정작 뛰어난 분들이 우리나라의 금융시장 수준을 꽤나 많이 끌어올려놓았다는 증거가 아닐까?

쇼크먹은 맘을 좀 가라앉히고, 수업은 앞으로 2종류로 진행할 생각이다. 수리통계학적인 배경지식을 코드 by 코드로 화면에 띄워가며 차근차근 개념 설명해주는 강의와, 다양한 종류의 예제를 R / Python 같은 대중적인 오픈 소스 언어로 실행해보는 온라인 플랫폼을 만들어 볼까 한다. (귀차니즘을 이겨낸다면…) 두번째 수업은 지적인 도전의 비중은 낮으니 오프라인 수업을 들을 필요는 없어보이고, 손을 많이 쓰면서 몸에 숙달을 시키는 작업 위주로해서 대학교 갓 졸업하는 학생들이 지금보다 더 퀄리티 있는 포트폴리오를 만들 수 있도록 돕고 싶다. 학생들의 수준이 높아져야 시장 수준도 높아지고 업계도 발전할 것 아니겠나?

데이터 사이언스 강의를 열고 한 달이 지났다. 시작전에 야심차게 만들어놨던 강의노트는 대부분 잉여 폴더에 들어가있고, 매주 새로 만드는 슬라이드가 엄청나게 늘었다. 내 사업하느라 바쁜데, 강의 노트 만드느라 이렇게 시간 쓰는게 도대체 무슨 욕심인가 싶기도 하지만, 필자만큼이나 공격적인 지인들의 애정 가득한 조언을 무조건 무시할 수는 없었다. 가까운 솔직한 지인들에 따르면,

  • 이렇게 수학이 많이 들어가면 아무도 이해 못한다,
  • 더 직관적으로 강의해야한다,
  • 데이터 클리닝하는거 다 보여주면 많은 사람들이 포기할지도 모른다,
  • 차라리 이미 알려진 간단한 데이터 셋을 활용하는게 어떠냐,
  • 어차피 배운 머신러닝 모델을 적용하는 예제가 중요하지 데이터 클리닝은 회사가서 직접 머리싸매고 해라고 하자

등등 누가 들으면 내 수업 찾아오고 싶은 맘이 뚝 떨어지는 이야기를 해 준다. 나 자신의 멘탈이 꽤나 강하다고 생각했는데, 그래도 어쩌랴, 내가 운이 좋아서 좀 더 배웠다고 꼬장꼬장하게 가르치면 그건 딸깍발이랑 뭐가 다를까.

수업 절반을 끝내고 학생들과 Social event를 하는데, 정말 온갖 종류의 제안들을 들었다.

  • R을 잘 모르겠다, R을 처음부터 체계적으로 가르쳐달라,
  • (고교 수준의 수학만 썼는데도) 수학이 너무 어렵다,
  • R 코드로 짠 예제는 집에가서 보면 되는데, 수업 시간에 좀 더 깊이 있는 내용을 다뤄달라,
  • 이론적인 백그라운드는 관심도 없고 이해도 안 되니까, 코드로 예제만 열심히 보여달라,
  • 코드 한 줄로 Random Forest, Boosting 같은 거 이용하는 쉽고 빨리 적용할 수 있는 내용은 안 가르치냐, 수업이 답답하다
  • 데이터 클리닝 실제로 하는거 좀 봤으면 좋겠다, 이렇게 이론과 R 코드 예제만 봐서는 한계가 있다

지인들의 평가를 듣고 꽤나 현실과 타협했고, 도저히 버릴 수 없는 내용들만 담았는데도 불구하고 이런 제안들을 들으니 갑갑하더라. 수업 진행하는 입장에서 어느 쪽에 장단을 맞춰야할지 감이 안 온다. 사실 수업 들어가면 학생 수준은 공학 박사 학위 소지자들부터 인문계(상경계 X) 학부 출신까지 정말 다양하게 분포되어 있어서 타겟을 어떻게 잡을지도 쉽지 않다. (그래서 최대한 직관적인 이론 강의와 가장 기본적인 예제들을 모델별로 적용하는 예시를 보여주는 쪽으로 타협했는데, 모든 사람을 만족시키고 있진 못하다ㅠㅠ)

(상기 사진은 필자의 Social event와 아무런 관련이 없습니다)

필자는 딸깍발이가 아니니까 (최소한 스스로 그렇게 생각한다), 제안사항을 많이 받아들이기는 하겠지만, 수업 타이틀을 데이터 사이언스라고 달고 있는 이상, 분명히 지켜야할 선은 있다. 저 아래에서 더 언급하겠지만, 데이터 사이언스에 쉽고 빨리 적용할 수 있는 내용은 없다. (하버드 대학 강의 후기 링크, 30분만에 다 배운다는 강의에 대한 팩트 폭격) 그렇게 한 줄 코드로 Random Forest 써서 결과값이 좀 더 좋게 나왔다고 많이 배웠다고 착각하는 사람들은 사실 안 와줬으면 좋겠다. 데이터 사이언스는 한 줄 코드가 아니니까. 너무 팩트 폭격인가? 딸깍발이스럽나? 그런 사기에 가까운 수업들이 판을 치고 있는 와중에 아래에 소개할 책을 만나서 너무 반갑더라.

 

 

책 이야기 – 베타리더 후기

데이터 사이언스 강의 시작하고 여기저기 소문이 났는지 책이 나오거나 공모전이 있거나, 강연이 있으면 홍보성 이메일을 자주 받는데, 오늘은 건너건너 알고 있는 통계학 박사 분이 쓰신 “따라하며 배우는 데이터 과학”이라는 책을 소개받았다. 목차를 보니 어려운 내용을 다 포기하고 최대한 쉽게 쓸려고 노력한게 보이길래, 이 분도 “대중성”을 위해 참 많은 내용을 희생하셨구나 싶어 저 위에 장황하게 쓴 내 생각들이 뇌리를 스쳐갔다.

그러다 “베타리더 후기”라는 항목을 보면서 내 수업에 오는 학생들의 얼굴이 오버랩이 되어 꼭 이 글을 쓰고 싶어지더라.

“(중략) 하지만 개발자의 입장에서 여러 통계 기법은 조금 난이도가 있었습니다… (중략)… 다만, 통계 기법에 대한 수학 공식은 수포자로서 이해하기 어려웠습니다. 이런 부분들이 좀 더 쉽게 설명되었으면 하는 아쉬움이 남습니다.”

“(중략)…그런데 책을 보다 보면 수학 공부를 하고 나서 다시 한번 봐야겠다는 생각이 듭니다.”

“(중략)…그 동안 기술적으로 함수를 구현하는데 치중했던 자신을 돌아보게 되었고, 각 분석 결과들을 통계적으로 정확히 해석할 수 있는 계기가 되었습니다.”

책 저자분을 직접 알지는 못하지만, 그동안 외부에 알려진 저자분의 글을 보면 굉장히 쉽게 쓰고, 직관적으로 자신의 깨달음을 전달하려고 노력하시는 분이라는 느낌을 받을 수 있다. 그런데 그런 분이 쓴 글도 더더군다나 어려운 내용 다 빼고 최대한 쉬운 내용만 넣었는데도, 여전히 “난이도가 있다”, “수포자로서 이해하기 어려웠다”, “수학 공부를 다시해야겠다”는 평가를 받는 걸보고, 한편으로는 안도감도 좀 들더라.

필자가 “수학”이 아니라 단순히 “수식”만 강의 노트에 집어넣어도 수학이 많다고 불평하는 학생들을 이해할 수가 없었는데, 저 위의 베타리더 후기는 필자의 고민을 시원하게 날려주었다. 고교시절부터 수학이라는 학문이 스트레스였고, 그래서 수식을 보니 겁나고, 그래서 그걸 수학이라고 퉁쳐서 이야기하는 것일뿐이다. 사실 그 수식들 까놓고보면 별 거 없는데ㅋ 고교시절에 좋은 수학 선생님을 만나서 직관적으로 수학을 이해했으면 참 좋았을텐데….

 

 

자연과학에서는 통계학, 사회과학에서는 계량, 공학에서는 머신러닝

외부에 알려진 머신러닝은 단순하게 코드 몇 줄만 치면 되는 코딩 지식이고, 수학은 필요없다고 생각하는 경우를 많이 본다. 경제학 공부를 하던 필자가 처음 Panel data를 공부하고 데이터와 모델링에 대한 시야가 완전히 바뀐 시절에 “데이터를 보는데 수학이 필요하냐, 그래프 그리는 센스가 필요하지”라던 분을 보며 안타까웠던 생각을 요즘 머신러닝에 대한 오해를 접하면서 그대로 하게된다. 그 분은 수학을 모르기 때문에 데이터를 본다는게 그래프를 그리는거라고 생각하고 계신거고, 머신러닝을 단편적으로 이해한 분들도 아마도 코드 몇 줄로 구현되는 모습만 보고는 머신러닝에는 수학이 필요없다고 오해하고 계신 것 같다.

(Source: Essential economics for data scientists)

경제학에서 계량경제학으로 통계학 공부를 계속하다가 시뮬레이션을 만나고 공학도들이 통계학을 어떻게 활용하는지 접한, 뭔가 좀 괴랄한 백그라운드를 가진 필자 입장에서 머신러닝을 바라보는 관점은 그냥 공대생들의 통계학이다. 계량 경제학에서 어떤 증명을 할 때, 0이하의 값을 제외시키고 (사회과학에서 0 이하는 없는 경우가 많으니까) 증명을 시도하면, 수학과 통계학 출신 친구들이 비웃는다. 모든 영역에서 다 증명되지 않는 걸 “증명”이라는 표현으로 “정리”라고 부르는게 말이 되냐고.

처음에 시뮬레이션을 만났을 때 필자의 생각도 비슷했다. 딱 떨어지는 수식 (Analytic solution)이 나오는게 아니라, 단순하게 몇 백만개의 예상치로 확률만 보여주는게 무슨 “연구”냐, 이건 “기술”에 불과하다고 생각했다. 그런데 더 깊이 공부해보니 공대에서 쓰는 통계학은 또 그 나름대로의 학문적 깊이가 쌓여있더라. 보스턴에서 박사 학위 중에, 스탠포드 공대에서 Financial Engineering을 공부하고 온 교수님이랑 같이 일을 한 적이 있었는데, 처음에는 내가 만든 경제학 기반의 모델을 이해 못하는 그 교수님이랑 같이 일을 하게 된 게 매우 못마땅했지만, 연구가 진행될수록 내가 알고 있는 수학을 그들의 방식으로 활용하는 모습을 보면서 놀란적이 한 두번이 아니었다.

머신러닝도 그런 통계학을 활용하는 (공대생용) 학문이다. 따라서 제대로 이해하고 활용할려면 통계학을 잘 알아야하고, 여기서 말하는 통계학이 단순하게 평균, 분산이 아님은 대학시절 기초 통계학 수업을 들어봤으면 이해할 수 있을 거라고 본다. 통계학은 깊이있게 들어가면 들어갈수록 “수리”통계학이 된다. 어느 시점에 모든 것을 다 깨닫고 직관 하나만으로 풀어쓸 수 있는 레벨이 되기 전까지는.

그걸 모르고 데이터 사이언스에 대해서 가볍게 생각하고 달려드는 사람들(까지도 포함하는 책을 써달라는 출판사의 압박) 때문에 위 책의 저자도 고민이 참 많았을 것이다.

 

 

다시 책 이야기 – Chapter 1, 2

Chapter 3 부터는 간단한 예제들을 들어가면서 (필자의 눈에) 아주아주 기초적인 통계학 이야기와 그 지식을 응용하는 머신러닝 모델 몇 개를 보여준다. (저자분 GitHub 링크) 사실 대부분의 머신러닝 모델들이 R에 좋은 패키지가 많아서 Parameter 몇 개만 수정하면 되는데, 들어간 코드도 딱 그정도 내용이다. 필자가 매 수업에 추리고 추려서 약 400줄 짜리 코드를 학생들에게 제공하는데, 대략 그 절반 정도의 내용을 한 챕터마다 넣었으니까 정말정말 기초적인 내용만 넣으셨다고 보면 된다. (책 쓰신 분의 고뇌와 타협이 온 몸으로 느껴지는 부분이다.)

(Source: 따라하며 배우는 데이터 과학 )

책의 핵심인 Chapter 3 이후 부분을 더 이상 공개하는건 “스포”가 될 테니, 여기쯤에서 멈추고, 책 앞머리 Chapter 1,2에 데이터 사이언스란 어떤 문제를 해결하려는 학문이고 (솔찍말 굉장히 통계학스러운 문제와 대답인데, 필자가 썼다면 좀 더 “빅데이터”에 초점을 맞춘 문제들을 제시하고 싶었다), 필요한 플랫폼 (컴퓨터에 R 설치하는거)을 어떻게 구성하는지 설명해주신 부분에 눈이 가더라. 누군가는 아예 읽지도 않고 넘겨버릴 그 내용을 왜 그렇게 피상적인 내용만 훑으며 넣었을까?

필자 수업에 관심이 있는 학생 하나가 8회 강의에 “앙상블” 모델 이야기가 없다고, “배깅, 부스팅, 랜덤 포레스트”같은 내용을 배우고 싶은데 이 수업을 들으면 되냐고 묻더라. 그 순간, 처음에는 위의 책 Chapter 1,2에 해당하는 1회차 수업을 빼버리고 앞으로 당겨서 마지막 8회차 강의를 “앙상블”만 집중해서 가르칠까는 생각이 확 들었다. 물론 필자의 1회차 수업은 단순히 데이터 사이언스 개관하고 R인스톨에서 끝나는게 아니라, 빅데이터를 시각화해서 어떤 데이터가 진짜 빅데이터고 왜 머신러닝이 여기에 적용되는지, 그래서 기존의 통계학이랑 다른 스킬셋과 접근법이 필요한 부분을 나름대로는 충실하게 설명하긴 한다. 그래도 코드로 머신러닝을 돌려보는게 더 급한 사람 눈에는 그런 내용이 귀에 잘 안 와 닿을테니까…

예전에 필자의 수업을 더 쉽고 직관적으로 진행하라고 압박넣던 지인도 비슷한 이야기를 했었는데, 그 때 필자는 “어차피 앙상블은 기존의 머신러닝 모델들에 가중치만 다르게 주고 묶는 방법이라서 기존의 방법들을 이해 못하고 앙상블만 해서는 아무 소용이 없다”고 그랬다. 배깅도 복잡한 설명을 배제하면 모델 만드는데 들어가는 훈련용 데이터 셋을 여러개로 쪼개서 모델의 오차를 줄이는 방법이고, 부스팅이랑 랜덤 포레스트도 Decision tree 모델을 제대로 이해못하면 “구현하는데만 치중하는” 개발자에서 벗어날 수가 없다는 사실을 너무 많이 봐왔기 때문에, 고민이 많아지더라. 도대체 뭘 빼고 저걸 더 추가할까?

다음달 수업에는 앞 쪽 강의 내용을 좀 꽉꽉 몰아넣고 (빼버리는게 아니라), 마지막 강의에 “앙상블”을 살짝 넣어볼까 한다. 위 책에도 Chapter 1,2가 들어갔는데, 강의라고 그걸 안 짚고 넘어갈수는 없다. 더군다나 필자가 보여주는 빅데이터 시각화는 다른데서 찾기도 힘든 부분인데… 어차피 수업시간에 100% 다 이해 못해도 나중에 다시 보면 이해할 수 있겠지라는 무모한 욕심(?)으로 ㅋㅋ

 

 

알파고 때문에 데이터 사이언스가 망했다(?)

예전에 머신러닝은 그냥 컴공과 대학원생들이 로봇 행동 패턴 잡아주는 모델링에, 이미지 인식 모델링에만 쓰는, 말 그대로 “공대생용 통계학”이었다. 그러다 알파고 때문에 모든 사람이 “머신러닝”이라는 단어를 듣게되고, 그걸 쓰는 직업이라는 “데이터 사이언스”에 대해서 너도나도 잘못된 이해만 잔뜩 쌓인채 시장이 움직이고 있다.

누가 필자더러 데이터 사이언티스트면 인공지능이랑 이미지 인식 같은거 할 수 있냐고 그러는데, 뭐 못하지는 않겠지만 필자의 담당 영역은 아니라고 딱 잘라서 이야기한다. 그건 컴공과에서 제대로 연구하신 분을 찾으라고. 필자는 IT업계의 “빅”데이터로 예측 모델링을 하는데만 장점이 있는 “반쪽짜리” 데이터 사이언티스트다. 이렇게 말하고 보니 어느 시점에선가 “데이터 사이언티스트”라는 용어도 분화가 좀 되어야될 것 같다. 저 위에 언급한 책은 필자와 비슷한 사고방식으로 업무를 처리하는 사람이 쓴 책이고, 그런 직업을 찾는 사람들을 타겟으로 한 책이다.

그리고 저런 책이 많이 나와서 데이터 사이언스에 대한 시중의 오해가 좀 해결이 되었으면 좋겠다. 위의 컴공과 대학원생분들은 지극히 필자의 주관적인 정의에 따르면 데이터 사이언티스트가 아니라, 머신러너 (Machine learner)다. 위에 언급한 책이 데이터 사이언스에 대한 정확한 이미지를 대중에게 제공하고, 나아가서는 제대로 머신러닝을 활용하고 싶다면 (수리)통계학을 이해해야한다는 사실을 wanna-be data scientist들이 좀 깨달았으면 좋겠다.

근데, 더 웃긴건 거기에 필요한 (거의 대부분의) 수학이 우리나라 고교 수학에 들어있다는 사실이다 – 안 믿긴다면 필자의 수업에 와서 확인해봐도 좋다.

 

나가며

학부시절 들었던 수업중에 게임이론이라는, 좀 수학적인 추론이 많이 들어가는 수업이 있다. 경제학계 밖에 있는 사람들은 학교에서 “게임”을 배우고 거기에 무슨 “이론”이 있냐고 궁금해하실수도 있겠으나, 정작 그 수업은 인간의 행동을 유도하는 인센티브를 수학적으로 정교하게 모델링하고, 거기에 더해서 천재적인 직관이 있어야 살아남을 수 있는 대단히 이론적인 수업이다. John Nash의 노벨상도 여기서 나왔고, 경제학계에서, 특히 미시경제학으로 연구하는 모든 학자에게 게임이론은 일종의 기초도구 같은 학문이 되어 버렸다. 박사 유학 중 교수님들이 학생 선발하시는 과정을 보면, 수학 수업에서 A+을 휩쓰는 학생보다 게임이론에서 A+을 받은 학생을 더 좋아하시더라.

왜 뚱딴지 같이 이 수업 이야기를 장황하게 하는지 궁금할텐데, 학부시절에 게임이론을 가르치셨던 김XX 교수님이 매 수업마다 직관적인 도전이 필요한 시점에 딱 진행을 멈추고 여기서 어떻게 해야되는지 맞추는 학생들을 모아서 학기말에 밥을 사주셨던 적이 있다. 그 뒷풀이 자리에 가니 교수님이 어느 시점에선가 그러시더라. 다른 경제학 수업은 노력하면 따라올 수 있는데, 이건 노력해도 못 따라오는 수업이라서 타겟을 모든 학생에게 맞추는게 아니라 우리처럼 답을 할 수 있는 학생들을 대상으로 할 수 밖에 없다고. (자랑해서 죄송합니다;;;; )

학부 3학년 때 들었던 그 말이, 그 시절에는 참 듣기가 거북했다. 그리고 내가 수업하면 기필코 모든 학생이 다 따라올 수 있도록 하겠다고 생각했던적이 있다.

그리고 요즘 매일 수업할 때마다 그 시절의 내가 너무 오만했구나는 생각을 한다. 수업 중에 한번도 아니고 여러번.

필자가 유학 떠나던 시절에 사업을 시작해서 이젠 사업 짬밥이 좀 쌓인 친구에게 위의 고민을 털어놨다. 주변에서 조언을 듣고 이래저래 수정을 하고 있기는 한데, 데이터 사이언스에 대해서 너무 많은 오해가 있는 탓에 수업에 다양한 백그라운드의 사람이 와 있고, 어느 쪽에 가중치를 줘야될지 모르겠다고 그랬다. 사업가 친구의 조언은 두 가지다. 아예 엄청 쉽고 머리 안 써도 되는 걸 데이터 사이언스라고 포장해서 가르치거나, 아니면 괜히 상품 내용을 이래저래 바꾸지 말고 필자가 맞다고 생각하는 영역을 쭉 밀고 나가란다.

처음에 상품 만들어서 팔아보니 이것저것 요구사항이 엄청나게 많았는데, 그걸 다 맞춰줘도 매출액은 그대로였다면서, 갖고 있는 걸 깊게 파는데 방점을 찍는 편이 더 낫지 않겠냐고 조언을 해 줬다. 대화의 끝머리에, 저 위에 언급했던 학부시절 게임이론 수업 이야길 하더라. 어차피 그 게임이론 수업은 쉽게 설명해줘도 수업의 70%는 못 알아들었을 내용이라고. 아예 이름만 게임이론으로 하고 엄청나게 쉬운 내용을 가르칠게 아니면, 차라리 우리 교수님처럼 제대로 이해하고 끝까지 따라오는 학생들한테 더 많이 제공해줄 수 있도록 필자에게 내공을 더 쌓으란다.

조언은 조언일 뿐. 아직도 모든 학생이 다 따라오는 강의를 해 보겠다는 욕심은 버리지 못하고 있다ㅋ 그리고 알고보면 그렇게 어려운 내용도 아니다. 무슨 연구자 만들려는 것도 아니고…

그나저나 (내 책은 아니지만) 위에 소개한 책 좀 많이 팔렸으면 좋겠다. 그래야 고교수학 수포자는 데이터 사이언스 못한다는 냉정한 현실이 좀 알려지지. 대신 고교수학만 (잘) 할 수 있으면 누구나 도전해볼 수 있다는 희망적인 사실도 함께 알려졌으면 좋겠다.