오래전에 가끔 들어가는 한국 IT 관련 커뮤니티에서 “왜 한국 개발자들이 만들어낸 결과물이 미쿡 애들이 만들어 낸 결과물보다 안 좋으냐?”는 질문이 나왔고, 그에 대해서 수십개의 댓글이 달리는 걸 봤었다. 그 때는 연구에 치여서 길게 못 읽어봤고, 몇 마디 경험담을 읊고 지나간게 전부였는데, 요즘에 한국에서 개발자들 면접보고 IT 업계 돌아가는 방향을 보니까 솔직히 말해서 왜 그런 질문이 나왔는지, 그리고 왜 결과물이 더 안 좋은지가 눈에 보인다. 그리고 같은 스토리가 데이터 사이언스 필드에서 그대로 반복이 되고 있는 것도 눈에 보여서 혼자만의 생각을 좀 정리해보고 싶었다.

우선 경험담 몇 가지를 정리해보자.

 

1. 비 IT – Deutsche Bank에서 iBanker 하던 시절

제일 기억에 남는건 우리팀 MD (10년차 이상, 한국팀 대표지만 사실 대기업 부장급)랑 VP (7년차 이상, 이사?라고 불리지만 차장급)가 소위 말하는 “영어만 잘하는” 아이뱅커였다는거다. Finance 101으라고 할 수 있는 재무관리 수업에서 제일 중요하게 배우는 내용이 Miller-Modigliani (MM) 이론이라고, 주식 or 채권 어떤 조합으로 파이낸싱을 하건 상관없이 회사의 가치는 운영에서 나오는 현금 흐름과 프로젝트들이 노출된 위험의 가치로 결정이 된다는 이론이다. MD, VP뿐만 아니라 그 밑에 MBA 다녀온 Associate 분도 이 개념을 이해 못해서 자사주 매입을 하면 회사 가치가 올라간다고 생각했었다. 심지어 N사의 증권 게시판을 가보면 자사주 매입한 회사의 기업 가치가 올라가서 계산이 되어 있(었)다. 실제로는 발행된 주식을 되사들였으니 외부 공개된 주식 숫자가 줄어서 주식 가격이 올라야 방정식의 등호가 성립하기 때문이라는 걸 이해 못 하는 사람들이었다.

저렇게 만들어라는 압박에 꾹 참고 자료를 만들어서 고객사에 들고가면 또 고객들은 그게 맞다고 철썩같이 믿고 간다. 오히려 그렇게 안 가져가면 화를 낸다. 대학에서 경영학과 졸업장 타이틀만 받았지 실제로 재무관리 수업은 아마 “야매”로 학점을 땄나보다. 당연하겠지만 저런 자료를 다른 나라 팀이랑 공유하면 폭풍 비웃음을 당한다. “Fxxxed up”이라는 표현을 노골적으로 들을 때도 있었고, 니네 나라 왜 그러냐고 놀림들은 일도 많았다. 그 자료를 다른 나라 팀이랑 공유할 때는 내가 이걸 알고 있는데, 이상하게 우리나라 시장이 이렇게 돌아가서 이렇게 만들었음이라고 따로 언급을 해주거나, 아니면 짜증나서 영문 버젼은 아예 다르게 만들기도 했었다.

사람들이 학문적으로 잘 훈련이 안 된 부분은 둘째 문제고, 뭔가 일하면서 대충 배운걸로 버틸 수 있다고 생각하는 사람들이 너무 많았다. 한번은 런던 팀에서 에너지 산업에 대한 굉장히 고급스러운 스터디를 한 걸 공유한 적이 있었는데, 그 모델을 똑같이 만들어서 한국에도 적용시켜보라고 VP 분이 퇴근길에 던지시더라. 정말 밤을 꼴딱새서도 그 내용을 제대로 이해하질 못해서 결국은 “가라”로 자료를 만들었던 적이 있다. 성격상 그걸 그냥 넘어갈 수가 없어서 나중에 런던 팀에 담당자랑 이야기할 때 이것저것 물어봤더니 그 친구는 어디서 배웠는지 계량경제학을 제대로 이용해서 그 모델을 만들었더라. 그리고 런던 오피스 안에 그런 모델 만들 수 있는 사람들이 하나 둘이 아니라 여럿 있었다.

시장 수준이 낮으면 사실 일하면서도 충분히 배울 수 있다. 특별히 복잡한 수학이나 통계학이 들어가질 않으니, 누군가에게 이야기를 듣고, 혼자서 앉아서 가만히 생각해보면 열에 아홉은 그 도리를 깨칠 수 있다. 옛 말에 “독서백편의자현(讀書百遍義自見)”이라고 하던데, 백번 읽으면 그 의미를 알 수 있다는 말이 여기에 잘 적용되는 것 같다. 다만 백번 읽어서 이해하려면 그 시절에는 한자가 무슨 뜻인지를 알아야했고, 뱅킹시절에는 (최소한) 학부 재무관리 수준의 지식은 있어야했다. 그걸 모르고 남들이 만든 자료에 자신의 상식을 결합한 수준으로 직장 생활을 하고 있으니 일하면서 배운다는게 고만고만한 내용밖에 안 되는 것이다.

2. 비 IT – 증권사 Research 팀에 있던 친구의 도전

런던가서 손에 굳은 살이 배길만큼 공부에 몰두하던 시절, 국내의 모 유명 증권사 리서치 팀에 있는 매우 가까운 친구 하나의 전화를 받았다. 모교의 어느 교수님이 우리 나라 산업별로 생산성 분석을 하신게 있는데, 이 자료를 어떻게 만드는지 설명해줄 수 있냐고 묻더라. 거시경제학에서 Productivity를 분석할 때 가장 많이 활용하는 방법은, 전체 생산 (보통 GDP 활용) 증가분 중에서 노동과 자본으로 설명할 수 없는 나머지 잔차 (Residual)을 생산성이라고 보는 경우가 많다. 그 교수님 논문에 몇 가지 특이한 사항이 있기는 했지만 어찌됐건 계량경제학을 적용하는 방법은 굉장히 유사한데, 그 팀의 어느 누구도 그 연구를 복제해낼 수가 없었다.

복제해낼 수 없고, 또 그 자료를 써야한다면 외주 프로젝트를 만들어서 그 교수님께 지적인 노동에 대한 비용을 지불해야할텐데, 내 기억에 따르면 그 친구는 같은 방법을 포기하고 쉽게 덧셈, 뺄셈을 하는 대안을 택했다. 아마도 증권사에서 나오는 자료를 읽을 기관 투자자들 중에 저런 Productivity analysis를 이해할 수 있는 사람도 극소수였을 것이다.

저런 내용은 백번 읽는다고 해결되는 문제가 아니라, 따로 수학과 통계학을 공부해야 이해하고 유사한 스터디를 할 수 있다.

3. IT – 개발자 면접을 보면서

필자의 사업에 요즘 가장 큰 화두는 데이터 베이스 관리 및 연동이다. 하나는 데이터 베이스를 회사의 데이터 작업 시스템과 연동시켜서 필자의 단순한 아이디어도 테스트해보고, 때때로 간단히 장난감 만지듯이 테스트도 해 본다. 다른 하나는 RTB (Real-Time-Bidding)이라고 해서, 광고 지면을 파는 회사에서 받은 AD ID와 내 데이터 베이스에 저장되어 있는 AD ID를 매칭시켜, 내가 갖고 있는 데이터를 바탕으로 그 광고 지면을 살지말지를 70ms 안에 자동으로 결정하는 시스템이다. 앞 부분이 더 간단해 보이고, 뒷 부분은 온라인 광고 시장에서 짬이 좀 있는 사람이 아니면 잘 이해를 못할 내용이라고 생각하고, 실제로도 후자쪽이 공부해야하는 자료가 굉장히 많다. 전자는 (약간 과장법을 쓰면 ) 시간낭비에 가까울만큼 순수하게 코딩으로 시간을 쏟아붓는 일이라면, 후자는 데이터 베이스 연동에 대해서 이론적인 지식이 좀 뒷받침이 되어야하기 때문이다.

개발자 면접을 보던 중에, 이 회사에서는 어떤 일을 하냐고 묻길래 RTB에 관련된 오픈소스 API를 하나 보여줬다. 모델이 작동하는 방식을 간단하게 설명하고, 데이터 베이스를 어떻게 만들어야 쉽게 연동을 시킬 수 있는지 내 아이디어를 설명하고, 면접자의 이해&의견을 구해봤다. 예상대로 표정이 @[email protected] 상태더라. 좀 모르겠다가 아니라, 아예 모르겠다는 뜻이다. 차라리 아는체 하면서 나한테 자꾸 찔러보기하는 악당들보다 낫다는 생각에 관련된 자료들을 더 보내주면 스터디해서 올 수 있겠냐, 그래서 내가 만드는 걸 옆에서 도와줄 수 있냐고 물어봤다.

예상했던대로 그 다음부터 전화를 안 받더라. 그런데 저런 경우를 벌써 한 손으로 못 헤아릴만큼 겪었다.

그 중 두 명이 가까운 지인을 통해서 만났던 분들이라 뒷 이야기를 좀 들었는데, 자기들은 그렇게 수식이 복잡하게 들어간 거를 만들어 본 적이 없단다. 데이터를 이용해서 광고에 적용하는 사업이라고 들었는데, 정작 하는 일은 “이상한” 수학 쓰는 일이더라면서, 자기가 잘못 알고 찾아갔던 것 같단다. 스타트업에 관심을 갖고 면접을 보는 분들이면 뭔가 도전적이고 진취적인 분들일 줄 알았는데, 필자가 근본적으로 잘못된 기대를 갖고 있었던 거다. 비단 그 두 분 뿐만 아니라, 우리나라에서 대부분의 개발자들이 수학으로 문제에 접근하는 훈련이 전혀 안 되어 있다는 사실을 요즘 조금씩 조금씩 깨닫고 있다.

심지어 증권사에서 현금흐름으로 모델 만들 때도 손으로 수식 써가면서 작업했고, Data analyst 일을 하고 있을 때도 평소에 간단한 수식을 쓰면서 작업을 하는 일이 흔하다. RTB가 돌아가는 메카니즘은 2nd price auction이라고, 좀 난이도 있는 경제학 개념이니 어려워하는게 이해되지만, 위에 말한 오픈소스 RTB API에 들어가는 수식이라고 그래봤자 중학교 때 봤던, 선 3개로 6개 점을 잇는 방법 같은 기본적인 네트워크 모델링과 그걸 풀어낼 수 있는 고등학교 2학년 수준의 1차 미분 밖에 없다.

더 놀라운 사실은 영어로 된 자료들에 경끼를 일으키고, 무슨 말인지 몰라서 Google Translator에 넣어서 어설픈 한국말로 읽는 개발자들이 그렇게 많다고 한다. 우리가 지식을 생산하는 나라가 아니라, 열심히 쫓아가는 나라인데, 영어를 못하면 어떻게 지식을 습득할 수 있을까…

4. IT – 국내의 IT 커뮤니티

문자 메세지 대체재가 아닌 모든 SNS를 끊고 산지 몇 년 되었다. 그러다가 그래도 강의하고 홍보하려면 Fxxxbook 계정은 하나 만들어야되지 않겠나는 생각에 회사 이름으로 SNS 계정을 하나 만들고 데이터 사이언스에 관심을 가질만한 사람들이 있는 커뮤니티 활동을 좀 해보려고 했다. 그런데 그 커뮤니티들에는 코딩을 어떻게 하는지, 코딩 에러는 어떻게 해결하는지에 대한 기초적인 질문만 가득 있더라. 보통 필자가 이런 질문이 생기면 구글링을 해서 답을 찾는데, 필요한 대답의 대부분은 stack overflow가 stack exchange에서 찾는다. stack overflow는 코딩 관련된 내용 위주고, stack exchange는 여러 학문에 대한 깊이 있는 답변들이 공유되어 있다. Fxxxbook 커뮤니티에 올라온 코딩관련 질문들은 구글링하면 길어봐야 5분안에 답을 찾을 수 있는 내용이 거의 대부분이다. 그리고 stack overflow에 답이 있는 경우가 압도적으로 많았다. 말을 바꾸면, 학문적인 질문이 아니라 코딩에 관련된 질문 밖에 없었다.

끽해봐야 “왜 주식가격은 머신러닝 모델로 예측 못 하나요?” 같은 질문인데, 자기 상관성이 없는 데이터에서 무슨 짓을 하건 어떻게 패턴을 찾나? 아주 특정 기간에 모멘텀이 있어서 찾아냈거나, 아니면 거짓말이겠지. 자기상관성이 뭔지 알고, 데이터가 그렇게 생겼다는 걸 알면 애시당초 시간을 쓸 주제가 아니다. 뭔가 고민하고 나오는 질문이나 연습의 수준이라는 것이 수리 통계학 공부를 안 한 테가 너무 심하게 났다.

물론 저기보다 더 심한 영문 커뮤니티들도 있다. 거의 홍보 자료 올라오는 거 막기에 바쁜 커뮤니티도 봤고, 올라오는 질문들이 공부할 수 있는 교재 추천해달라는 이야기 위주인 커뮤니티도 꽤나 보기는 했다. 그런데 그런 커뮤니티에는 뭐 좀 하는 사람들이 다 떠난다. 와서 얻을게 없으니까. 나랑 같은 전공 했던 사람들한테 주가를 RNN의 LSTM으로 예측할 수 있다고 헛소리를 잔뜩 늘어놓는 인도인 유투버 영상을 보내줬더니 이런데다가 시간 쓰는 사업하고 교육하느냐고 비웃더라. 쩝~ 참고로 그 인도인 유투버 영상은 지금도 엄청나게 인기를 몰고 다니는 영상이다.

지금 시장에서 머신러닝을 배우겠다는 사람들, 데이터 사이언스를 배우겠다는 사람들이 딱 코딩 소화하기에 바쁘고 ,그걸로 만족하는 사람들로만 구성된 IT 커뮤니티를 만들고, 자기들끼리 코딩 지식을 공유하고 있는 수준인 것이다. 그리고 영어로 검색은 안 되고, 대답 잘 해주는 것 같으니까 한국말로 운영되는 Fxxxbook 커뮤니티에 질문 올려보는거다.

저 위에 개발자들 수준에 대해서 필자가 씁쓸했던거랑 너무너무 유사한 문제점이 그대로 반복되고 있다는 증거가 아닐까? 근데, 그렇게라도 코딩 많이 배우면 좋은거 아니냐고?

5. IT – 코딩 기계를 양산하는 시스템

글 처음에 언급한 그 IT 게시판의 글로 돌아가보자. 글 내용인즉, 우리나라 초특급 개발 인재들(“KAIST, SNU 같은 명문 컴공 출신” 이라고 하심)이 평소에도 죽어라 공부하고, 밤을 새어가면서 만든 결과물인데, 대학 졸업 때까지 컴퓨터 언어로 코딩은 해 본적도 없고, 어디 코딩 부트캠프 몇 달 다니고 나온 애들이 만들어낸 결과물보다 안 좋아서 너무 충격먹었다는 내용이다.

답 글들을 보면 결국 코딩 실력이 문제가 아니라, 시스템의 문제이고, 그 시스템이 SUM(코딩실력)으로 끝나는 것이 아니라, 최초 프로젝트 디자인부터 마지막 단계의 QA까지 전체를 다 아우를 수 있는 능력이 있어야된다는 이야기가 주류이다. 특히 필자의 시선을 잡았던 부분은 코더가 필요한게 아니라 프로그래머가 필요한 작업이 우리나라에서 과연 얼마나 있냐? 대기업들은 대부분 단순 코더를 원하지 새로운 걸 만들어내는 능력을 요구하지 않는다는 문구였다. 당장 개발자 연봉을 보면, 새로운 걸 만들어내는 사람이 받는 연봉이라고는 납득하기 힘든 숫자다. 필자도 그런 푼돈을 주고 쓸 사람을 구하는 것도 아니고, “사업 파트너”가 될 만한 분을 찾고 있는데, 애시당초 뭔가를 “카피”한 경험이 있는 사람은 많아도 “만들어”본 적이 있는 사람이 나올 수 있는 사회 구조가 아니라는 거다.

iBanker 시절 현금흐름으로 Valuation 모델을 scratch부터 만들었다고 그러면 “뭐하러 시간 낭비하냐?”, “니네 보스는 모델 공유 안 해주냐?”, “할 일이 그렇게 없냐?” 같은 질문을 받았는데, IT업계도 토시하나 다르지 않은 방식으로 작동되고 있다는 뜻이다.

모르긴 몰라도 그 프로젝트에 투입된 인재들의 능력치를 보면 코딩을 제외한 다른 모든 능력치들은 어디 코딩 부트캠프 몇 달 다니다가 나온 사람들이 훨씬 더 뛰어났을 거라고 생각한다. 어차피 코딩으로 프로그램을 만든다는 건, 건축에서 집을 짓는 것과 같은 방식인데, 벽돌을 1층에서 100층까지 빠르게 실어나를 수 있다고해서 집이 더 잘 지어지는 건 아니다. 굳이 따지면 시간이 좀 덜 걸릴 뿐이다. 진짜 집을 잘 지으려면 설계도의 도면 자체를 이해하는 것 뿐만 아니라, 왜 그런 설계를 했을지에 대한 고민을 설계도면 만든 사람보다 훨씬 더 깊은 수준에서 이해를 해야한다. 좋은 논문을 그대로 따라가면서 복사한 모델을 만들다보면 어느 부분에서 어떤 고민을 했을지가 눈에 보이고, 그 논문을 썼던 사람보다 훨씬 더 많은 지식을 갖추고 나면 그 문제를 해결할 수 있는 다른 방법이 보인다. 일에 대한 태도가 이런 사람과, 이걸 최대한 빨리해서 오늘은 밤을 새고 싶지 않다고 생각하는 사람과의 결과물은 어떻게 차이가 날까?

IT 커뮤니티에서 코딩 열심히 배워봐야 위에 말한 프로젝트 같은 사태가 일어날 것이다. 좀 더 나가면 필자가 학부 갓 졸업하고 갔던 그 외국계 증권사 때처럼, 외국 애들하고 만났을 때 니네는 왜 이렇게 작업하냐는 식의 은근한 비웃음에 직면하는 일도 생기겠지.

나가며 – 문화와 교육의 종합적인 산물

좀 더 깊게 들어가면, 이 모든 문제는 문화와 교육의 종합적인 산물이다.

평소에 논문 쓰고, 남의 논문을 까는게 내 일과였던 박사 과정을 돌이켜보면, 시험은 기똥차게 잘 치는데 정작 논문 주제는 못 가져오고, 탈고까지 못 밀고 나가는 아시아인, 특히 한국인 학생들을 정말 너무너무 많이 봤다. 주제라고 가져가는 걸 보면, 그거라도 빨리 쓰고 졸업할 수 있으면 다행이겠다, 교수님이 착해야지 졸업시켜 줄텐데라는 생각이 들고, 지도교수님한테 연구 중간에 까이고 나면 뭘 해야될지 방향 설정도 잘 못 잡는 경우가 대부분이다. 이게 흔히 말하는 주입식 교육의 결과물, 남들이 보여주는 것만 잘 카피하면 성공하는 교육 문화에서 자라왔기 때문은 아닐까? 학창시절에 미시와 거시경제학에서 만점을 받았던 과 친구 하나가 모 금융권 공사에서 낸 보고서를 보면 거시경제학 수업 시간에 교수님이 틀렸다고 몇 번이나 강조했던 유동성 함정 – LM 커브 논리를 그대로 갖다 썼더라. 카피 능력은 만점인데, 이해능력과 응용능력이 제로라는 이야기다.

런던에 유학가서 한번은 만점이라고 생각했던 시험지에 60점이 찍힌 걸 보고 충격먹은 적이 있었다. (참고로 영국의 대학원 과정에서 80점을 넘기면 과 탑을 노릴 수 있을만큼 채점이 짜다) 수업 조교와 앉아서 하나하나 복기를 해보니, 수학 과목이 아니라 경제학 과목인데 왜 수식만 있고 경제학적 함의는 안 적혀 있냐, 니가 여기서 최소한 10점 이상 날렸다, 그리고 가르쳐 주신 내용만 쓸 게 아니라, 니 나름대로 배운 내용이 있을텐데, 그런 내용이 들어가야 가산점을 준다는 식으로 이야기를 들었다. 그 학교 다니는 내내 필자가 제일 잘 친 과목 점수가 79점이었던 걸로 기억하는데, 죽어라 노력해도 주입식 교육의 한계를 완전히 벗어날 수는 없었나보다.

며칠 전에 어느 출판사에서 데이터 사이언스를 수학적으로 다루는 책을 한 권 쓰자고 연락이 왔다. 위에 쓴 것처럼 수학에 관심도 없는 사람들이 대다수인데 뭐하러 책 쓸까, 돈 안 되고 귀찮은데 굳이 하고 싶나요라고 답장을 드렸더니, 자기네들도 돈 안 되는거 알고 있단다ㅋㅋ

그래도 내가 한국의 주입식 교육에서 벗어나볼려고 발버둥을 쳤던 사람인데, 10년동안 발버둥친걸 반년 동안 페이지에 꾸역꾸역 우겨넣으면 누군가는 읽어보겠지, 그래서 코딩 부트캠프만 하고 나와서 정작 더 좋은 결과물 만들어내는 애들이 생기겠지라는 생각으로 책 쓰겠다고 결심을 했다.

 

왜 한국은 2류일까? (2)

강의 중에 가장 힘들 때는 3시간 동안 서 있어서 몸이 지칠 때가 아니라, 학생들이 제대로 이해 못 하고 있는 것 같은 표정을 지을 때다. 특히 간단한 수식 하나를 붙잡고 나름대로 직관적으로 설명했는데 여전히 알쏭달쏭 표정을 짓고 있으면 너무 괴롭다. 미안해서. (그리고 설명 못해서 부끄러워서.)

가끔은 수식 확 다 빼버리고 쉽게쉽게 코드 몇 줄만 퉁퉁 치는 강의를 해 볼까 싶은 욕심도 울컥울컥 솟아 오른다. 괜히 무리하지 말고, 어차피 이런 개념을 다 이해하고 자기 업무에 충실하게 적용할 수 있는 사람이 얼마나 될까는 자괴감도 든다. (너무 솔직하게 말한 것 같다…)

그러다 수업 끝나고 모델을 이해할려고 노력 많이 했던 사람이 아니라면 불가능한 질문을 하는 수강생들을 보면 맘을 다시 고쳐 먹는다. 몇 줄짜리 코드만 치는 일을 하는 사람이 이 수업을 들어왔을리가 없고, 기대치가 높은 분들을 위해서라도 내가 좀 더 고민해서 직관적으로 설명해보자고 그렇게 스스로를 다잡아 본다.

수학, 통계에 대해서 부담을 느낀 수강생이 많았으니 아예 2-3개 강의 정도를 할애해서 머신러닝용 기초 수학, 통계 강의를 해달라는 요청을 받고, 위의 생각들을 하면서 이런저런 검색을 좀 해 봤다. 정말로 그런 수요가 많이 있을까? 그냥 강의 수준을 좀 낮추는게 낫지 않을까? 근데 쉬운거 강의하면 나는 돈 내고 듣기 싫을 거 같은데….

그런 찰나에 재밌는 글을 하나 봤다

 

Fast Campus – 개발자를 위한 통계와 머신러닝 CAMP 수강 후기

저 수업 진행하시는 김 박사님을 아는 지인한테서 이야기도 들었고, 내 수업과 교차 수강했던 수강생 분의 평가도 듣긴 했었지만, 그래도 위에 링크 걸어놓은 수강 후기를 보고 나니 맘 속에 고민하던 내용이 싹 정리되는 것 같아서 몇 마디 남겨본다.

 

개발자란 도대체 무슨 직업일까?

필자가 개발자가 아닌 관계로 100% 정확하게 알지는 못하지만, 대체로 개발자 커리어 패스는 “개발 실무 -> 프로젝트 PM -> 기술 영업 / 개발 팀 관리” 정도로 요약되는 걸로 알고 있다. 말을 바꾸면 실제로 우리가 알고 있는 “개발” 업무는 어린 시절에 몇 년 정도 하고 나이가 들면 트렌드가 바뀌니까 다른 업무 영역으로 넘어간다는 뜻이다. 해외에서는 나이 먹고도 계속 개발하는 사람이 많던데 우리나라는 왜 그럴까?

저 수강 후기에 따르면 흐름에 뒤쳐지고, 새롭게 공부하지 않기 때문에 주로 쓰는 언어가 바뀌면 실무를 하기가 힘들고, 용례의 트렌드가 바뀌면 실무에서 애로 사항이 많단다.

수강 후기에 있는 표현을 좀 더 직설적으로 바꿔서 필자가 좀 심한 팩트리어트 미사일을 한 방 날리면, 우리나라에서 대부분의 개발자들은 단순하게 API를 갖다 쓸 줄만 알지, 새로운 지식을 공부하고, 새로운 로직을 구현해서 모델을 발전 시켜야겠다는 생각으로 업무를 하는 사람이 없어서라고 본다. 개발자 면접을 들어가면 여태까지 해 봤던 프로젝트를 이야기하는데, 이건 왜 이렇게 만들었나요? 유저들이 별로 안 좋아할 것 같은데요? 같은 질문을 하면 “있는거 갖다 쓰느라…” 같은 대답만 하더라. (아닌 사람 만나보는게 큰 소원 중 하나다.)

“그건 개발이 아니라 그냥 copy & paste 아닙니까?”라는 질문이 곧 튀어나왔지만 꾹 참았다.

이런 이야기를 개발하는 친구들한테 했더니 개발자들 사이에 돌아다니는 용어를 하나 이야기 해 주더라.

 

Coder vs. Developer

우리나라 개발 환경에서 개발자라는 직업의 Job life cycle이 굉장히 짧은 (여러가지 이유가 있겠지만 가장 큰) 이유는 바로 개발자가 Coder이기만 하지, Developer가 아니기 때문이다. (거의 대부분의) 개발자들이 프로그래밍 API와 코드를 어디서 따와서 코어가 되는 알고리즘은 안 짜고 주어진 내용을 그대로 갖다 쓰고만 있다. 일종에, 암기한 공식을 그대로 유형의 문제에 대입해서 풀 수는 있겠지만, 새로운 유형에는 전혀 대응을 못하는 것과 같은 방식이다.

그럼 Developer들은 어떤 사람이냐고 물어보니, 일단 코딩 잘 하면서 수학을 잘 해야 된단다.

엉? 이거 머신러닝 강의할 때 내가 매번 하는 말인데?

어느 API의 로직을 구현하려면 코어가 되는 알고리즘을 짜야되는데, 결국 이 알고리즘은 수학이어서 수학을 못하는 사람들은 아무리 노력해도 Coder에 머물 수 밖에 없지 Developer가 될 수가 없단다.

필자가 어느 스타트업에 가서 매일같이 들었던 이야기가 “코딩은 학문도 아니고, 기술도 아니고, 기능이다”는 표현이었다. 말인 즉, 그들은 Coder였지, Developer는 아니었다는 뜻이다.

 

Developer가 되려면

그 수강 후기에 보면 눈에 번쩍 뜨이는 말이 하나 있다.

“프로그래밍 랭귀지나 응용 과정, 예를 들어 딥러닝이라고 하면 텐서플로우 활용법이나 이를 사용한 간단한 어플리케이션 구현 같은 것들은 인터넷 상에 자료가 많습니다. 저와 같이 이 분야에 오래 몸담고 있는 사람은 마음만 먹으면 얼마든지 자료나 영상 강의 등을 통해 독학할 수 있습니다. 시중에 이런 내용을 다루는 강의도 꽤 있고요.”

말을 좀 바꾸면, 돈 받고 강의하기 미안한 내용은 이미 인터넷 상에 널리 퍼져 있다는거다. (필자가 매번 하는 이야기이지 않나?)

” 수학적 원리와 알고리즘에 대해 깊이 있게 다루는 강의는 없었습니다. 사실, 이런 커리큘럼은 대학원 석/박사 과정이 아니면 접할 수 없죠. 표면적인 내용이 아니라 근본적인 내용을 다루는 차별화된 커리큘럼이 정말 마음에 들었습니다.”

“단순히 API를 copy&paste하고 부차적인 부분들을 수정/구현하는걸 반복하는 건 회사 입장에서 아무런 Royalty를 가지지 못합니다.”

“… 수학적 기초를 튼튼하게 닦아주고, 이를 기반으로 문제점을 파악하고, 해결할 수 있는 역량을 길러주는…”

우와~ 이거 매번 내가 하는 이야기들인데….

 

수강 대상

위에 열심히 Copy&paste를 하다보니, 얼마나 많은 개발자들이 필자 스타일의 머신러닝 수업에 관심을 가질까 의구심이 좀 들었다. 수학에 머리 쓰기 싫어서 Coder로 살고 싶다는 개발자가 얼마나 많은지 잘 알고 있는데, 그들을 대상으로 니네 Coder로 살지말고 Developer로 살고 싶으면 수학 공부 많이 해야된다고 강의 홍보를 해야된다는 말이지 않나?

너무 심하게 팩트리어트 미사일을 또 쏘게 되는 것 같은데, 필자는 Coder vs. Developer라는 논쟁 자체가 잘못되었다는 생각을 한다. 대학에서 정규 교육을 받았으면 애시당초 Coder에 만족하고 살면 안 되는게 맞지 않나?

건설 현장에서 벽돌만 1층에서 10층까지 올리는 벽돌공으로 살겠다면 굳이 대학 학위가 필요할까? 예상 문제를 찍어주는 강사한테서 수업을 듣고, 기출문제 솔루션을 달달 외워서 학점을 받고, 돌아다니는 API를 긁어 붙여서 업무 성과를 내고만 있는 분들은 깊이 반성해야 한다.

집 앞 치킨집 아저씨가 공대 숙제를 다 해결해 줄 수 있을만큼 코딩을 잘 한다는 우스갯소리를 들은 적이 있는데, 그냥 한번 질문 던져보고 싶다. 그 치킨집 아저씨가 직장에서 쫓겨난 건 코딩을 잘하는데도 불구하고 나이가 많아서 짤린 걸까? 아니면 Developer가 될 가능성은 안 보이는데, 코딩 실력은 어슷비슷한 3년차 Coder보다 연봉을 많이 줘야되니 부담이어서 짤린 걸까?

 

나가며

꼭 필자의 수업을 들으러 오지 않아도 좋다. 위에 수강후기를 걸어놓은 F모 경쟁사의 훌륭한 수업을 들어도 되고, 더 실력 있어서 학교 커리큘럼만으로 충분히 좋은 Developer가 될 수 있는 사람들이 많으리라고 생각한다.

그냥 이런 말만 한번 던지고 가고 싶다. 수학 공부 왜 하냐고, 아무런 도움도 안 된다고 불평하던 학부시절 과 동기들에게도 던지는 말이다.

“수학을 포기하면 너는 기껏해야 평균 밖에 안 된다.”

빅데이터 이용에 관련해서 좋은 기사가 났다고 아침에 메일이 하나 왔다.

머니투데이의 “인공지능, 좋은 데이터가 먼저다” 라는 기사다.

한 줄 요약하면, 이 기사 쓰신 아주머니는 빅데이터가 뭔지에 대해서 제대로 감을 못 잡고 있는채로 빅데이터가 중요하다는 글을 썼다. 최소한 제목 자체는 맞는 말이니까 더 이상 까는 건 자제하도록 하자.

 

빅데이터 = 개인의 행동 데이터

필자가 여기 블로그에서도 강조하고, 수업에서도 강조하고, 또 외부 미팅을 나가서도 계속해서 강조하는데, 빅데이터는 열심히 Crawling해서 긁어온 데이터나 데이터 베이스에 관리가 불가능할 정도로 많이 쌓아둔 데이터가 아니다. 빅데이터는 개인의 행동을 추적할 수 있는 데이터다. “기업들이 그동안 축척한 데이터로 신규 서비스를…. ” 이라는 문장에서 이미 이 기사쓰신 분은 낙제점이다. “축척”한 데이터를 쓰는게 아니라, 유저들이 어떤 행동을 해서 어떤 결정을 내리는지를 볼 수 있도록 “추적”한 데이터를 이용해야 한다. “축척”이 아니라 “추적”.

우리나라 정부나 기업이 지금 갖고 있는 데이터로 제 아무리 데이터 기반 상품을 만든다고 해도, 저렇게 철학적으로 근본적인 변화가 없는 이상, 위의 머니투데이 기사 쓰신 분의 수준에서 사고방식이 머물러 있는 이상, 우리나라에서 데이터 기반 산업이 성장할 수 있는 여지는 전무하다. 예전에 다른 글에서 썼듯이, 서울시내에 있는 주유소들에서 매일매일 1리터 기름값을 받은 정보로 “기름값 가장 싼 집”을 찾아주는 서비스는 빅데이터 초창기 서비스에 불과하다. 아직까지 저런 마인드로 지난 3개월동안 어느 상품이 많이 팔렸다는 둥, 유전자를 분석해서 개인별로 적합한 치료법을 제공해 준다는 둥, 단순하게 정리해서 나열하는 식으로 데이터를 “분석”해서는 예전보다 나아진 점이 하나도 없다.

페이페이 리라는 여자분이 구글에서 이미지 분류하는 인공지능 팀장으로 승진했다고, 마치 대단한 업무를 하고 있는 것처럼 써 놨는데, 이 아주머니가 하는 일은 contents-based filtering에서 하는 작업과 다를바가 하나도 없다. 머신러닝이 광범위하게 도입되고 유저의 “행동” 데이터를 모으게 되면 collaborative filtering을 이용해서 접근 철학도 다르고 결과물의 퀄리티도 업그레이드 할 수 있는데, 정말 단순히 주먹구구식 분류하는 “Low-tier” 업무에 팀장을 맡았다고 대단하다는 식으로 치켜세우는 글을 보고 있으니 안타까움을 금할 수가 없다.

(참고: contents-based는 해당 상품의 모든 정보를 미리 입력해놓고, 유저의 반응에 따라 유사 상품을 보여주는 방식이고, collaborative filtering은 해당 상품에 대한 정보가 전혀 없는 상태에서 단순하게 유저들의 반응만을 바탕으로 그 상품의 특성을 유추해내고 유사 상품을 묶는 방식이다. 쉽게 말하면, 옷 매장에서 바코드 찍어서 그 옷이 뭔지를 아는 방식은 contents-based, 사람들이 같이 보는 옷들이 유사한 스타일이라고 가정하는 것이 collaborative고, 당연하겠지만 “행동 데이터”에 기반한 접근법은 collaborative다. 앞의 방식은 빅데이터라고 해봐야 용량만 큰 데이터가 되고, 뒤의 방식은 유저들의 행동이 다 담긴 진짜 빅데이터를 기반으로 한 서비스다.)

 

혁신의 전파

요즘 빅데이터, 머신러닝, 데이터 사이언스 등으로 표현되는 “4차 산업”이라는 단어의 인식 수준을 보면서 혁신이라는 것이 어떻게 퍼져나가는지에 대해서 귀납적인 논리를 세울 수 있게 되었다. 먼저 아주 소수의 사람들이 일부 산업의 영역에 “혁신”을 적용하고, 그 옆에 있는 사람들 중 깨어있는 일부가 “혁신”의 가치를 읽는다. 그리고 그 깨어있는 사람들이 목소리를 높이면 주변에서 소위 말하는 “전문가”라는 타이틀을 달고 다니는 사람들이 자기도 그 흐름에 편승하겠답시고 이것저것 갖다 붙인 다음에 “혁신”이 마치 인류사의 큰 전환점인 것처럼 살을 붙인다. 그리고 대중은 호도된다.

요즘 빅데이터 “혁명”이라고 불리는 이야기들을 보면 딱 이런 상황인 것 같다. 처음에는 컴공과에서 이미지 인식하는 사람들 일부가 쓰던 CNN, 통계학계에서 이단아들이 공부하던 대다수의 머신러닝 테크닉들이 알파고를 비롯한 몇몇 “혁신” 덕분에 세상의 빛을 보게 되었고, 머신러닝이 뭔지 좀 아는 사람들이 알파고를 보면서 Neural Network 기발하게 잘 짰다, 짧은 시간에 Learning 시킬 수 있도록 병렬 계산 시스템 잘 만들었다, Uncertainty 집어넣어서 모델 성능 향상 시키는 아이디어가 Neural Network에서도 큰 성공을 거두는군… 같은 생각을 하면서 인공지능 기술이 한 단계 더 업그레이드 되겠다고 생각했다. (솔찍말 필자는 그런 분들의 해석을 재해석하는 수준에 불과한 인간이라서 그 이상은 잘 모르겠다.) 알파고보다 한 7년전 쯤에 CNN에서 Logit을 Rectifier로 바꾸면서 이미지 인식률이 올라갔을 때 인공지능을 바라보는 눈이 “절망”에서 “희망”으로 바뀌었다면, 요즘은 “기대” 정도로 보는 게 맞는 것 같은데, 밖에서는 마치 “경외”감을 갖고 쳐다보는 것 같다. 최근에는 갑자기 여기에 “4차 산업”이라는 단어를 붙이더니 마치 내일이면 IQ 200대인 인공지능 로봇이 등장하는 것처럼 떠들어대는 사람이 생기기 시작했고, 신문사에서는 그런걸 받아써서 판매 부수 + 노출 지면 숫자 올리기에 바쁘다.

인공지능(?)이라고 불리는 단어에 들어가는 머신러닝은 다 떠나서 패턴 인식하는 알고리즘에 불과하다. 페이스북에서 챗봇을 만들었더니 인간이 인식할 수 없는 단어들로 챗봇들끼리 대화가 일어나서 실험을 중단시켰다는 기사를 보면, 머신러닝을 좀 아는 사람들은 모델 잘못 만들었나보다, 언어 처리할 때 동사랑 형용사에 어근이랑 어미 구분 제대로 안 한거 아닌가라는 생각을 먼저 한다. 머신러닝이 제대로 돌아간다면 인간이 쓰는 단어의 조합을 완벽하게 복제해내야 하는데, 챗봇이 배우는 단어가 인간이 쓴 단어들로 구성된 데이터 베이스에 저장된 단어들에 불과한데, 어떻게 새로운 단어를 만들어 낼 수가 있나? 그러나 언론은 마치 챗봇이 IQ 200대이고 창조적인 능력이 있어서 우리가 모르는 언어를 만들어냈다고 설레발을 치는 기사를 내더라.

기자라는 사람들이 특정 사안에 대한 전문가가 아니라, 전문가들이 제시하는 정보를 정리해서 활자로 바꾸는 작업을 하는 사람들이라는 것도 알고, 그래서 기자가 전문가가 될 수 없다는 사실도 안다. 그러나 수백만 독자에게 노출되고 사회적인 방향성에 영향을 줄지도 모르는 위치에 있는 사람들이 누가 쓴 글을 받아쓰거나 “뇌피셜”에 의존해서 기사를 내는 건, 전문가 타이틀을 달기에 민망한 필자 입장에서도 어이가 털리는 일이다. 하물며 진짜 전문가들 눈에는 어떻게 비칠까?

4차 산업으로 검색하니 윗 사진 같은 스샷이 검색되더라…. 안타깝다. 4차 산업이 뭔지도 제대로 모르는 사람들이 4차 산업이 뭔지도 제대로 모르는 사람들에게서 설문조사를 하다니…

필자의 데이터 사이언스 수업 첫 시간은 언제나 “머신러닝은 요술봉이 아니다. 별 거 없다. 그냥 패턴 인식 알고리즘일 뿐이다. 짝퉁 통계학이다.”는 표현으로 시작한다. 필자는 기자가 아니니까.

 

인공지능, 좋은 데이터가 먼저다

서두에 잠깐 언급했듯이, 저 기사의 내용은 엉망이어도 최소한 제목은 맞는 말이다. 인공지능이 정말 뛰어난 성능을 발휘하기 위해서는 좋은 데이터가 필수적이다. 저 기사의 문제점은 좋은 데이터가 뭔지를 잘 모르기 때문에 엉뚱한 예제를 들었다는 것이지, 메세지 자체가 잘못되지는 않았다.

기업들에서 자기네가 인공지능 상품을 만들고 싶은데 어떻게 해야고 물어볼 때 필자가 제일 먼저 묻는 질문은 “초단위로 개인별 행동 데이터 있으십니까?”이다.

그리고 필자가 만났던 회사들이 그런 종류의 인력을 수급할 수 없는 회사라서 그런지는 몰라도 아직까지 저 질문에 “Yes”를 들은적이 한번도 없다. 굳이 따지자면 “데이터 팀에 물어보겠습니다”는 대답만 들었는데, 그 “데이터 팀”이라는 곳은 “데이터 사이언티스트”가 있는 곳일까, “데이터 엔지니어”가 있는 곳일까, 아니면 “데이터 애널리스트”가 있는 곳일까?

한국처럼 관료제적인 억압이 강한 사회에서 필자의 질문으로 대변되는 “컨셉의 전환”이 일어날려면 둘 중 하나 밖에 없을 것 같다. 윗사람이 엄청나게 똑똑해지거나, 아니면 외부에서 충격이 오거나.

 

지난주에 모비아카데미를 통해서 진행했던 10주짜리 데이터 사이언스 풀 코스 강의를 끝냈다. 강의 초반에는 학생 분들이 수식이 많이 나온다고 불평하셨는데, 정작 10주 강의 종료 후 강의 평가에는 “왜 수식을 넣었는지 이해가 된다, 그 수식들을 직관적으로 가르쳐 주려고 노력해서 고맙다, 열정적으로 가르쳐줘서 많이 배웠다” 등등의 평가들이 실려있더라. 모비아카데미 측 매니저도 풀코스 강좌 기준으로 강의 평가 점수가 굉장히 높다고 고무적이라고, 쉽고 가볍게 가르치지 않는 코스를 택한 것이 좋은 반응을 불러왔다고 그러는데, 평가 받는 입장에서는 너무 과한 칭찬에 머쓱해졌다.

사실 강의 중간에 수강생들의 불만은 제쳐놓고, 필자 역시도 어렵다는 불만에 대응해서 쉽게 전달할 수 없는 아쉬움 때문에 나름대로 자학을 많이 했다. 가까운 친구는 니가 혼자서 책만 읽어도 자학하는 놈이니까 원래 그런거라고, 너무 맘에 담아 두지 말고 앞으로 더 잘 할 생각만 하자더라. 흐름을 꿰뚫고 있는 표정의 수강생 중 한 분은 이걸 처음 배울 때 쉬웠냐? 가르쳐 주던 선생님들도 다들 어렵게 가르치지 않았냐? 어려운 걸 자꾸 쉽게 가르치려면 중요한 내용을 빼먹을 수 밖에 없다며 위로도 해주고 가셨다. 진심이 담긴 위로에 참 고마웠다.

분명히 자기가 원하는 걸 다 못 얻고 간 분도 많았을 것이고, 내용 자체가 어느정도 수학, 통계학 지식을 갖고 있는 사람들 위주로 돌아가다보니 벽을 느끼고 좌절했던 수강생도 있었을 것이다. 수학적인 전개 과정을 다 빼먹고 직관적으로만 설명하니 내용이 부족하다고 생각하는 분도 있었고, 더 쉽게 적용하는 코드를 보고 싶다고 하셨던 분도 있었고, 못 따라가겠다고 중간에 포기하신 분도 있었다. 물론 왜 오셨는지 아리송한 경제학 박사 분 몇 분은 고개만 끄떡끄떡하면서 뭔가 후배가 땀 흘리는 모습을 관조적으로만 봐 주셨는데, 그 분들은 과연 뭘 얻어가셨을까? 머신러닝이라는게 결국은 통계학을 좀 다른 방식으로 이용해 패턴을 찾아내는 테크닉에 불과하다는 사실을 깨닫고 “별 거 없구나”고 느끼고 가셨다면 솔직히 말해서 제대로 얻어가신거다. 정말 별 거 없는데, 통계학 잘하면 정말 쉽게 배울 수 있는데, 다른 분들은 얼마나 필자의 메세지를 받아갔을까?

 

1. 의식 수준

한 사이클이 돌고나니 느끼는 가장 핵심적인 문제는 배우겠다는 사람들의 지식 수준이 아니라, 의식 수준인 것 같다. 지금까지 한 3개월 남짓동안 데이터 사이언스를 배우고 싶다는 내용으로 수십통의 이메일을 받았는데, 이제는 메일의 내용만 봐도 이 사람은 수업을 들으러 오면 인생에 도움이 되겠다, 저 사람은 들으러 안 오는게 더 낫겠다는게 눈에 보인다. 메일 내용에 질문자의 의식 수준이 명확하게 드러나는게, 배움에 대한 진짜 열정이 있는 사람들은 필자의 블로그 글은 물론이고, 장시간 인터넷 검색을 해보고 나름대로의 방식으로 데이터 사이언스에 대한 그림을 그려놓은 상태라는게 눈에 보인다. 반면, 구글링으로 데이터 사이언스 강의 찾아서 필자의 웹페이지에 들어오자마자 바로 질문하는 분들은 평소에 생각하는 훈련을 한 번도 안 해보신 분, 책을 읽으면서 씨름하는 공부를 안 해보신 분, 남들한테 몇 줄 주워들은 걸로 인생을 살아오신 분이라는게 너무 눈에 들어온다. 필자의 수업을 듣고나면 내일 당장 알파고를 만들 수 있는게 아닌데, 저런 식으로 입에 떠먹여주기를 바라는 분들이 뭘 얻고 가시겠나?

메일을 보고 예측했던 수강생의 스타일은 수업을 진행해보면 확연하게 증명이 된다. 필자가 수업 내용을 다시 정리한 동영상을 수강생들에게 제공하는데, 열심히 듣는 학생들은 동영상을 서너차례 봤다는 느낌이 드는 질문을 하고, 질문 내용도 구글링 1분으로 찾을 수 있는 내용이 아니라 필자가 수업 시간에 간과하고 간 부분이나, 강의 노트에 있었으면 더 좋았을 법한 내용들이 많다. 그런 분들을 보면 가르치는 입장에서 되려 부끄럽고, 나는 학창 시절에 왜 저렇게 열정적이지 못 했을까? 나는 왜 매번 집에와서 혼자 문제만 끙끙대면서 풀다가 다 풀었다고 자위하면서 보냈을까? 좀 더 선생님을 괴롭혔(?)으면 더 좋았겠다는 반성도 많이 한다. 반대로 노력해서 지식을 얻고 자기 것으로 소화하는 경험이 적은 사람들, 남들에게 줏어들은 몇 개의 단어로 직장 경력만 10년, 20년이 쌓인 분들은 수업이 어렵다고 불평만 하다가 어느 시점부터 교실에 안 나타나더라. 외람되지만 그 분들은 코드 10줄만 알면 데이터 사이언스 마스터 할 수 있다고 과장 광고를 하는 분들에게 수업을 들으시기 바란다.

제대로 가르치는 선생이 있을까는 회의감에 학창 시절 내내 과외를 한번도 안 받았다는 (자기 잘난 맛에 사는) 친구가 그러더라. 과외를 안 받고 대학가서 천만 다행이었다고. 교재를 읽고 연습문제와 기출문제를 풀어보면서 경제학을 배우고, 신문 읽으면서 내가 배운 지식이 이렇게 적용되는구나는 방식으로 이해를 깊게하는게 상식인데, 과외로 서울대 온 애들은 기말고사 준비라는게, 기출문제 풀이는 커녕 어디서 솔루션을 구해서 달달 외우기 바쁘더란다. (학부시절 필자의 “허접” 솔루션은 그래서 참 인기가 많았다 ㅎㅎㅎ)

 

2. 지식 수준

지식 수준은 정말로 문제가 되지 않는 걸까? 지금와서는 한 발 물러섰지만, 필자도 고교와 대학 학부, 석사가 “문과”인지라, 처음에는 문과생도 충분히 이해할 수 있다고 홍보했다. 가르치는 내용 중 수학과 통계의 거의 대부분은 고교 수학 수준이고, 선형대수학의 기초적인 내용 정도만 다루고 있어서 대학 시절 수학 수업 하나 들었으면, 수학 좀 쓰는 통계 수업 하나 들었으면 충분히 따라올 수 있을 거라고 봤다.

예를들어, 데이터를 두 개 이상의 그룹으로 분리하는 Support Vector Machine (SVM)은 위상 수학에서 말하는 Separating Hyperplane을 찾는 방법인데, 이게 “위상 수학”이라는 단어가 나와서 어렵게 느껴지는거지, 사실은 데이터 위에 그냥 선 하나 긋는 작업에 불과하다. 참고로 미시 경제학 수업에서 (믿을 수 없겠지만) 똑같은 수학으로 두 재화간 교환시 균형 가격과 소비량을 구한다. (General equilibrium에서 Edgeworth box 참조) 그리고 미시 경제학은 “문과”인 “경제학과”에서 “학부 2학년” 때 배우는 내용이다. 그리고 필자의 데이터 사이언스 수업 시간에는 SVM을 수식으로 도출하는 부분은 아예 빼고, 직관적으로 왜 SVM이 Maximum Margin 모델로 불리는지, Maximum Margin 모델은 왜 데이터 셋을 가장 “잘” 나눠주는 선을 찾아주는지만 설명하고 넘어간다. (그래서 불만이신 분도 있을 것이다.)

물론 그래도 어렵다고, 힘들다고 하시는 분들도 있더라.

그래서인지 모비아카데미에서 필수적인 수학, 통계 수업을 번외 수업으로 제공하자고 제안이 왔다. 솔직히 말하면, 이걸로 몇 십억 버는 것도 아니고, 내가 왜 이런 기초적인 내용까지 가르쳐야하나는 생각도 들었고, 데이터 사이언스라면 몰라도 기초 수학이랑 통계를 돈 받고 가르친다는게 양심의 가책으로 느껴지기도 했다.

다른 한편으로 생각하면, 수학이랑 통계가 필요없다고 우기는 피상적인 강의들이 시장에 널리 퍼져있다가 이제 좀 데이터 사이언스가 만만한 내용이 아니다, 그래프만 그리는 내용이 아니다, 코드 몇 줄만 치면 되는 내용이 아니다라는 사실이 알려진 것 같아서 다행이다 싶었다. 어차피 어려운 내용이 아니니까 필자가 이런 수학을 알고 나면 데이터 사이언스가 쉬워집니다고 기초적인 가이던스를 잡아놓고 나면 다른 분들이 복사해가겠지. 내가 안 가르쳐도 다른데서 저렴한 가격에 배워오겠지. 결국 몇 번만 고생하면 시장 수준이 올라가고 피상적인 강의들이 시장에서 구축(crowd out)될 거라는 생각에 고민끝에 모비아카데미 측 제안을 수용했다.

학부 1,2 학년 때 배운 선형대수학 몇 줄이 생각 안 난다는 이유로 실력있는 분들이 데이터 사이언스 공부를 포기하거나 피상적인 공부만 하고 끝나는 게 참 안타깝더라.

그런데 정말이지 초고급 데이터 사이언스를 할 생각이 있는게 아니면 학부 선형대수학만으로도 차고 넘친다고 생각한다. (반박하실 수 있는 분은 꼭 메일 보내주시기 바랍니다.)

 

3. 지식 수준 (X) + 의식 수준 (X)

요즘 시계열 데이터를 필터링하면서 Fast Fourier Transform (FFT) 이라는 간단한 수학을 쓰고 있는데, 처음 FFT를 만났던게 2011년이고 그 땐 시험 답안지에 써 넣을 수 있는 기본적인 내용만 외웠었다. (솔직하게 고백한다 ㅠㅠ) 그리고 보스턴에서 다시 FFT를 만났던게 2013년인데, 그 때서야 겨우 필터링이라는게 주기(cycle)을 잡아내는 통계학의 테크닉이라는 걸 알아냈고, 그리고 2014년에 논문에 공저자로 참여해주신 스탠포드 공대 출신 교수님 덕분에 FFT가 10^n인 값을 2^n으로 바꾸는, 말 그대로 주기를 바꾸는 방법으로 활용할 수 있다는 것을 알게 되었다.

작년 쯔음에는 사기 클릭(Fraud Click)을 잡아내는 알고리즘을 만드는데 FFT를 적용해서 클릭의 주기를 살펴보다가 필터링, 주기 찾기, 주기 변환이 사실은 하나의 작업을 어떻게 활용하느냐에 따라 다르다는 것도 알게 되었고, FFT와 같이 배운 Kalman filter라는게 무슨 종류의 필터링인지, 왜 FFT와 같이 배웠는지를 몇 년만에 이해하게 되었다. (말해놓고도 부끄럽다ㅠㅠ) 요즘은 시계열을 Frequency 값으로 바꾸고 여러가지 아이디어를 테스트 중인데, 다시 FFT 쓰면서 내가 정말 여태까지 FFT에 대해서 수박 겉핥기 식으로 밖에 몰랐구나 싶어서 이불킥을 몇 번씩이나 뻥뻥하느라 잠을 설치는 일이 많다.

(경험상 그 스탠포드 공대 출신 교수님도 FFT의 용례에 대해서 10^n, 2^n 이상으로는 모르셨던 것 같다. R 기본 패키지는 허수 (complex number) 계산을 못하는데, 그거에 맞춰서 짰던 R 코드를 보고 틀렸다고 구박하시던게…. 지금쯤은 더 배우셨을라나? 이래서 학위가 끝났다고, 교수자리 차고 앉았다고 연구 그만하면 바보가 되는거다.)

Filtering 이라는 단어가 나왔으니 말인데, 추천 알고리즘이라고 해서 Collaborative filtering과 contents-based filtering 이라는 알고리즘을 필자의 데이터 사이언스 수업에 가르치고 있다. (FFT와는 다른 내용이니 오해 ㄴㄴ) 물론 깊은 내용을 가르칠 수 있는 수업이 아니라서 아이디어, 예제, 코드, 응용 방법 정도만 가르치고 끝나는데, 정작 그 3시간의 강의를 위해서 필자는 논문도 10개쯤 읽었고, 다른 분들은 이 주제를 어떻게 가르치나 싶어서 MOOC 강의도 몇 개나 들어봤다. 이렇게 공부를 해도 아직까지 부족한 게 많다 싶어서 강의를 앞두고 강의 노트 수정을 여러번 하는 일이 흔하다.

가르치는 포지션에 있는 사람도 이렇게 배움의 길은 멀고 험하다고 생각하는데, 정작 왜 한 줄로 하는거 안 보여주냐, 수학 왜 쓰냐, 현기증 난단 말이에요 그러면 뭐라 할 말이 없다.

물론 수업에 오신 분들은 배움에 대한 의지가 넘치는 분들이라서 그런 경우가 적다. 진짜 문제인 분들은 필자에게 밥 한 끼 사줄테니 데이터 사이언스의 요점을 1시간만에 요약해서 전달해달라는 사람들이다. 좋게 이야기하면, 1시간 만에 전달할 수 있는 내용이 아니고, 나쁘게 말하면 “모욕적인” 사람들이다. 필자한테 모욕하는게 아니라, 데이터 사이언스에게 모욕한다고 하는거니 오해는 하지 말아주셨으면 한다.

학부 시절이나 사회 초년병 시절에는 왜 기업들이 교수 몇 명을 불러놓고 몇 천만원, 몇 억원짜리 프로젝트를 진행하는지, 그런데 정작 그 교수 몇 명은 열심히 일하는 것 같지도 않은데 저렇게 큰 돈을 받아가는지 궁금했었다. 요즘은 너무너무 이해가 된다. 그 기업들은 지식 수준만 부족한 것이 아니라, 배우고 머리를 쥐어 짜내겠다는 의지가 없는 것이다. 그나마 큰 기업들은 돈으로 해결하겠다고 교수들 주머니에 큰 돈을 쥐어주는데, 필자에게 1시간 만에 다 가르쳐 달라는 사람들은 도대체….

 

나가며

어느 스타트업 COO가 한 때 필자에게 “머신러닝 적용할려면 데이터가 얼마나 많이 필요한거냐?”고 물은 적이 있었다. 이 질문에 참 다양한 방식의 대답을 할 수 있겠지만, 좀 “과학적” or “통계적”으로 대답을 한번 만들어보자. 우선 머신러닝이라고 표현한 그 단어는 아마도 신경망 모델 (or Neural Network)이었던 것 같다. 그 시절 그 COO의 용례를 보면 “머신러닝 = 딥러닝 = 인공지능 = 알파고”였으니까.

Neural Network (NN)은 다른 글에서 썼던대로 여러개의 Logistic regression이 중첩된 모델이다. 예를들어, Hidden layer가 4×2만큼 들어가 있다면, Logistic regression을 stage 1에서 4번하고, 그 결과값을 이용해서 stage 2에서 2번, 마지막으로 stage 3에서 1번해서 결과값을 찾아주는 알고리즘이다. 통계학에서 보통 regression을 위한 최소 데이터 수치를 30개로 잡고, 자유도(degrees of freedom)가 120이 넘어가면 t-statistic이랑 z-statistic이 (거의) 같다고 결론 내린다는 점을 감안하면, 입력 변수 10개 + Hidden layer 4 x 2 + 최종 결과값 1개인 모델에는, stage 1에서 logistic regression에 130개의 데이터 포인트가 입력되어야 (130 – 10 = 120) 최소 요구조건이 달성되는 것처럼 보인다.

그렇게 stage 2에 들어갈 데이터 1개를 만들어낸다면 stage 2에는 124개(124 – 4 = 120)가 입력이 되어야하니 130 x 124개 데이터가 필요하고, stage 3에는 122개 (122 – 2 = 120)가 필요하니 130 x 124 x 122개의 데이터가 있으면 통계적으로 유의미할 수 있는 최소한의 데이터 숫자라고 할 수 있을까?

물론 stage 1에서 오차를 최소화하지 않으면 stage 2에서는 측정 오차(measurement error)가 있는 데이터로 작업했으니 Attenuated bias가 생길 것이고, 그 오차는 stage 3에서 더 커질 수 밖에 없다. 오차는 어떻게 줄이냐고? 입력 데이터 숫자가 무한대로 늘어나면 오차는 0에 수렴한다. (표본 분산 = s^2 / n 을 떠올려보자.) 이래서 데이터가 많으면 많을 수록 좋은거다. 물론 처음 만든 모델이 좋은 모델이 아니라면 high bias 문제를 영원히 극복하지 못하겠지만.

(참고로 실제 NN 계산은 stage 1의 130개 데이터로 stage 2의 1개 데이터를 만드는 게 아니라, 1개 데이터에서 나온 stage 3의 결과값으로 stage 2와 stage 1의 가중치를 수정하는 작업이 반복되는 방식이다. 위의 접근법은 오차 최소화를 이해하기 위한 설명의 한 방법으로 이해해주면 좋겠다.)

알만한 사람이 그런 질문하면 어떻게 하란말이냐는 욕 한번 듣고 나시더니 그 스타트업 COO 분 다음달에 수업 오신단다.