개발자 채용 중 특정 학원 출신인 분을 여럿 뵈었던 적이 있다. 신입 개발자 지원하는데 포트폴리오가 너무 좋아서 신입치고 높은 희망연봉을 제시해도 면접을 진행했었는데, 그 학원 출신 분들 몇몇을 뵙게 되면서 포트폴리오의 화려함만큼 기초 실력이 탄탄한 분들이 아니라는 사실을 인지하게 되었다. 오랜고민 끝에 결국 채용하게 된 개발자 분은 포트폴리오가 화려하지도 않고, 경력이 긴 분도 아닌, 학부 시절 관련 전공으로 열심히 공부했던 분이었다. 학부 전공을 열심히 듣고 혼자 잘 훈련만 했으면 충분한 면접 질문들이었는데, 왜 포트폴리오가 화려한 그 학원 분들은 제대로 대답을 못하셨을까?

그 지원자들과 비슷하게, 문과인데도 N모사 개발자 프로그램을 거쳐 매우 뛰어난 개발자로 살고 있는 자랑스런 친구가 하나 있다. 귀국 후 처음 그 친구 소식을 들었을때만해도 그냥 재밌게 사는 친구라고만 생각했는데, 이번 채용 프로세스를 거치면서 비전공자에 외부 학원을 거쳐서 뛰어난 개발자가 되는 사례가 참 드물다는 사실을 새롭게 인지하게 됐다. 원래도 재밌으면서도 대단한 친구라고 생각했는데, 새삼 그 친구가 더 대단해 보인다 ^^

요즘 이곳저곳에서 데이터 사이언티스트 채용에 관련된 질문을 받는데, 원래부터도 대학원 출신, 통계학을 제대로 배운 전공자를 뽑으라고 그랬지만, 위의 개발자 면접 프로세스를 거치면서 그런 경향이 더 심해진 것 같다. 좋은 학원과 훌륭한 선생님이 세상에 참 많다는 사실을 충분히 알고 있지만, 아주 예외적인 경우가 아니라면, 전공자들이 학부, 대학원동안 머리를 쥐어짜며 쌓아올린 내공을 아무리 좋은 학원이라도 단번에 주입시켜주기란 매우 어렵지 않을까? (그리고 그 개발자로 커리어 전환하고 잘나가는 친구가 그동안 얼마나 많은 노력을 쏟아부었을지 상상해보면…)

(Source: Iron Triangle)

 

어느 교수님의 응원 메일

회사 운영 중에 짬을 내서 관리하는 블로그라 여러가지로 부족한 점도 많고, 때때로 여러 공격에 좌절하는 일이 많지만, 그래도 가끔씩 진심이 담긴 응원 메일을 받고나면 힘이 부쩍 솟는다. 모든 응원 메일을 다 공유해보고 싶지만, 이 글을 쓰는 시점에 받은 어느 공학과 교수님의 응원 메일 일부를 공유할까 한다.

(중략)… 블로그 내용을 보니 한 20여년 전이나 지금이나 별반 다르지 않은 것 같아서 세월의 차이가 느껴지지 않습니다…

(중략)… 여기 고객사로 있는 기업에서 예전에 있었던 일이 생각나더군요. 한참 데이터웨어하우스 붐이 불어 개발하던 와중에 XX가격 의사결정모형 자문을 해 주었는데, 학부출신 한 명이 어디서 배웠는지 모르나 신경망으로 데이터 피팅하니 적합도가 90%가 넘으니 이걸 사용해야 하는 것 아니냐고 집요하게 우겨서 그냥 웃어 넘겼습니다. 피팅이 잘 된다고 예측이 잘 되는 것도 아니고, 설명 이론이나 모형도 없으니 가격의사결정에도 쓰기도 마땅하지 않고. 그래서 함부로 신경망 같은 것을 가르치는게 아니구나 하는….

당시에 잠시 과학원에서 계량마케팅을 박사과정을 대상으로 강의한 적이 있는데, 다들 배경지식이 없어 힘들어하고, 수학이니 경제학이니 통계학이니 하는건 어려우니 소비자 행동쪽만 학생들이 선호하고… (중략)

예전의 신경망 일도 있어 제가 강의하는 통계학 관련 과목에서는 차이점이나 설명하고 자세히 언급하지 않았는데, 새로 강의를 개설하려다 보니 하지 않을 수 없겠더군요. (중략) 잘못 가르치면 남용하거나 copy & paste나 하게 만들지 않을까하는 우려가 생깁니다. (중략)

위의 메일 내용에서 뽑아내고 싶은 포인트는 크게 3가지다

  • 박사과정 생들에게도 수학, 통계학 기반의 모델링 강의는 쉽지 않다
  • 20여년 전이나 지금이나 크게 다르지 않은 상황이다
  • 신경망 모델에 대한 맹신을 막기 위해 학교 교육이 변화하고 있다

첫번째 포인트는 Pabii의 데이터 사이언스 강의에서도 여러번 느끼는 일이 많다. 수강생 중에 석박사 출신도 많고, 교수 or 연구원으로 재직 중이신 분들도 가끔 뵐 수 있다. 그런 분들도 “머신러닝 이거 다 통계학이었네요”, “전생(?)의 기억을 되살리느라 따라가기 힘들었다”라고 말을 하시면서 기억을 되살리려 고민하는 분도 있고, “수식을 이런 방식으로 직관적으로하는 해석은 처음 들어본다”고 놀라고 가시는 분들도 있었다. 필자도 그랬었지만, 대부분의 박사과정 공부 중에는 수식에 파뭍혀 그 수식의 함의를 꼼꼼하게 짚고 넘어가기가 참 힘들기 때문이다. 그래서 더더욱 데이터 모델링을 할 수 있는 레벨의 지적 훈련을 받은 사람을 찾기가 참 힘든 것 같다.

두번째 포인트에서 공부가 어려운 건 20년전이나, (200년전이나, 2000년전이나…) 지금이나 다 똑같겠지만, 저 교수님께서 말씀하시는 상황은 깊이 있게 공부한 사람들이 이끌어가도 시원찮을 분야를 학부출신 한 명이 집요하게 우기기를 시전하고 있는 상황이 안타깝다는 말씀이실 것이다. 필자가 귀국하고 처음 만났던 자칭 데이터 사이언티스트 분들을 생각하면 상황이 조금 더 나아지기는 했지만, 여전히 매우 많은 사람들이 적당히 신경망 코드 구해서 돌리면 이미지 인식도 하고, 자연어 처리도 되는데 무슨 모델링 같은 소리하냐고 필자와 맞서려고 하는 일이 비일비재하다. (이 블로그에서도 많이들 보셨을 것이다.)

그런 “맞서려는 분들”에 대한 분노가 어이없음으로 바뀌며 좌절감에 조금씩 지쳐가던 중이었는데, 세번째 포인트에서 새로운 희망을 찾고 있는 중이다. 몇몇 세부 전공 분야를 제외하면 그동안은 학교에서 신경망을 굳이 꼼꼼하게 가르쳐야할 필요성을 못 느꼈을 것이다. 이게 수학적으로는 “꼼수”에 불과한 계산 작업이기 때문이고, 특정 분야를 제외하면 Computationally inefficient + Overfitting이라는 양쪽 폭탄을 다 맞는 계산법이기 때문이다. 통계학 박사들 중 상당수는 이런식의 꼼수 계산을 받아들이는 상황을 지적인 자아의 붕괴로 받아들이는 경우도 있을 정도다. 그럼에도 불구하고 워낙 많은 사람들의 입에 오르내리니 이제 제대로 통계학 교육을 받으신 분들이 학교 수업에 신경망 계산이 뭐라는 걸 구체적으로 설명하는 섹션을 포함시키시려는 것 같다. 뭔가 속이 뻥~ 뚫리는 기분이다.

그 동안 Pabii에서 데이터 사이언스 강의를 했던 가장 큰 이유가 “신경망에 대한 맹신”, “머신러닝/딥러닝에 대한 잘못된 이해”에 대한 반박이었는데, 학교에서 이렇게 나서서 시장을 정화시켜주신다면 굳이 Pabii에서 길게 강의를 해야할 이유가 있을까?


신 교수님, 응원 메일에 다시한번 고개숙여 감사드립니다. 교수님 제자분들이 한국의 데이터 사이언스 인력 풀 수준을 한 단계 더 높일 수 있게 되기를 간절히 바랍니다.

(Source: 동아일보)

 

데이터 사이언스 학원들

Pabii의 데이터 사이언스 강의에 “스파이”가 몇번 왔다간 적이 있다. 특히 지난 여름의 수학 & 통계학 마지막 오프라인 강의에 강남 일대의 “데이터 사이언스 학원” 관계자임을 확신할 수 밖에 없는 분들이 다녀가셨다. 심지어는 필자가 간단하게 요약한 그 수학 & 통계학 강의 (Quantitative 석사 과정 이상의 공부를 했다면 누구나 충분히 알만한 그런 내용의 강의)를 한국에서 제일 잘 아는 교수님이 누구냐는 질문을 하셨는데, “어느 학교 학생이에요? 그 학교에 괜찮은 교수님 강의 추천해드릴께요”라고 하니 빛의 속도로 사라지시던 그 분들… 한국에서 제일 잘 아는 교수님 이름을 가르쳐주면 강사로 영입하려고 그랬을 듯ㅋㅋ

그 “스파이”분들이 기획하신 강의 페이지를 가 보면, 국내에 있는 다른 강의들을 벤치마킹했다고, 자기네 수업의 수학 & 통계학만 이해하면 된다고 열심히 썰을 풀어놨다. 강의 기획안을 봐도, 실제로 그 수업을 들었던 분들의 뒷 이야기를 들어봐도 강의 기획자 분들이 아직도 데이터 사이언스가 수학과 통계학으로 이루어져 있다는 사실을 잘 인지하지 못한 것 같다. 애시당초 데이터 사이언스가 말 그대로 수학&통계학을 쓰는 “Science”라는 사실을 이해못한채, 기초 통계학만 가르친 다음 “Engineering”스러운 부분을 적당히 섞으면 데이터 사이언스라고 착각하시는듯.

그런 커리큘럼 설명 끝에 3달, 6달의 교육 과정을 거치면 데이터 사이언티스트 “1년차”가 된다는 표현이 있던데, 이 부분만큼은 꼭 짚고 넘어가보고 싶다.

1. 3달, 6달의 교육과정

어느 노 교수님 한 분이 Pabii의 데이터 사이언스 수업 3수강 (재수강도 아니고!)을 하고가시면서 남기신 말씀이, “다들 깡통은 아니니까, 모자라는 부분만 채워넣으면 되지 않을까?”였다. 수학&통계학 모델링을 잘 하는 사람은 코딩 쪽 훈련을 더 받고, 코딩 훈련이 잘 된 분은 수학&통계학 모델링을 더 공부하면 된다는 관점이었을 것이다.

우선 업무 중 느끼는 것들을 정리해보면, 수학&통계학 모델링을 잘 하는 사람이 데이터 사이언스 관련 업무를 위해 써야하는 코딩의 수준은 굳이 코드를 잘 짜는 10년차 개발자 수준이어야할 필요가 없어보인다. 어차피 수학적으로 더 elegant하게 모델을 만들면 코딩은 몇 줄로 끝나버릴 수도 있으니까. 백엔드 개발자들에게 던져줘야하는 결과물 몇 개 때문에 서버/DB관련된 지식을 배워야하는 부분도 크지 않다고 생각한다.

반면, 수학&통계학 훈련이 안 된 분들이 새로 이 지식을 배우는건 거의 불가능에 가까운 것 같다. 사실 고교 시절에 수학 못하던 친구가 재수, 삼수를 해서 수학 실력이 일취월장하는 경우도 거의 없지 않은가? 하물며 과학원의 박사과정생들에게도 힘든 수학, 통계학 기반의 모델링을 수학 손 놓은지 몇 년이 지났고, 원래부터 수학에 큰 관심이 없었던 수알못인 분들이 따라가기는 쉽지 않을 것이다.

실제로 200명 남짓의 학생들을 대상으로 한 강의에서도 같은 결론을 내리고 있다. 아무리 수식 제외하고 직관 위주로 강의해도 원래부터 수알못이었던 분들은 탈락할 수 밖에 없더라.

2. Data Scientist N년차

“N년차”, IT쪽으로 사업을 하겠다고 개발자 커뮤니티와 접하면서 처음 들어보기 시작한 표현이다. “안드로이드 개발 5년차”, “웹 프론트 개발 8년차” (더불어 “풀스택 개발자/디자이너”라는 표현도 이 동네에 와서 처음 들었다.)

하나만 물어보자. 수학&통계학 공부가 전혀 안 된 분이 데이터 사이언스 관련 업무를 10년정도하고나면 수학&통계학을 자연스럽게 이해하고 쓸 수 있게 될까? 자기가 매일 보던 숫자에서 “감”을 잡는 Domain knowledge 부분은 시간과 내공이 어느정도 정비례 관계를 갖게 될 것이라고 충분히 공감하겠지만, 그런 “Data Analyst” 업무는 수학적인 머리를 써야하는 부분이나 경험이 쌓여야하는 부분보다, 비지니스 센스와 더 깊은 관련이 있다.

개발자로 년차가 올라가면서 웹, 앱, 서버, DB 등등 다양한 플랫폼을 연계시킬 수 있는 경험이 쌓이고, 또 웹, 앱 각각에서도 높은 Tech를 타는 엄청난 레벨의 개발자가 될 수 있다는 사실은 인력 채용을 겪으며 매일같이 보고, 배우고, 느끼고 있다. 더불어, 굳이 전공자가 아니어도 충분히 본인의 노력으로 극복할 수 있는 부분이 있다는 것도 인지하고 있다. (우리 회사 채용은 전공자에게 가산점을 줄 수 밖에 없는 구조로 진행되었지만)

하지만, 수학&통계학 기반의 모델링을 알고 모르고는 완전히 다른 종류의 인력, 다른 직군에 대한 이야기가 된다.

그 학원들이 쓰는 표현, 타겟하고 있는 직군을 좀 더 정확하게 바꾸자면 “Data Analyst N년차”가 맞지 않을까?

3. Data Analyst N년차

그 학원 수강생들이 어떤 커리어를 밟고 있으신지 잘 알지는 못하지만, 보고 들은 강의 커리큘럼만 봤을 때는 Business Analyst(BA), Business Intelligence(BI) 같은 직군에 지원하실 수 있는 훈련을 받았다고 판단된다. 2000년대 중후반에 학부 졸업무렵 필자가 봤던 인력 시장에서 그런 자리들에 갔던 친구들은 수학, 통계학 같은 자연계열 학부 전공을 한, 좀 유명한 학교 출신인 친구들이었다.

요즘 DSP 회사들에 가보면 비슷한 일들을 Account Strategy (속칭 AS, 광고주의 광고 전략에 맞춘 관리해주는 세일즈 인력) 분들이 하고 계신다. 아마 우리 Pabii도 광고주 영업을 뛰어야하는 시점이 오면 AS분들을 뽑을 때 예전에 BA, BI 직군이 타겟했던 분들을 뽑을 것 같은데, 학부 출신 신입이면 한 달동안 Tableau와 우리회사 내부 솔루션 가르쳐서 쓰는게 더 낫지, 굳이 저 위에서 말이 나온 “Data Scientist 1년차” 만들어 준다는 학원 출신이신 분들을 뽑고 싶지는 않다. 그런 학원의 수학&통계학 교육 수준이 높기 어렵다는 사실을 알기 때문이고, 그 정도 수학&통계학 훈련만 받은 분께는 아무리 경력이 쌓여도 Data Scientist라는 직함을 줄 생각이 없기 때문이다. 학생 선발 과정에서 이미 우리나라 최상위권의 수학&통계학 훈련을 받은 인재들만 받았을 과학원에서 박사과정생을 대상으로 가르쳐도 힘들었던 지식을 그 학원에서, 아니 어지간한 일반 IT학원에서 비슷한 수준으로 가르치는건 거의 불가능에 가깝지 않을까?

애시당초 데이터 사이언티스트 “N년차”라는 표현을 쓰는게 개발자 중심의 사고방식에서 한발자국도 벗어나지 못했기 때문인 것 같다는 생각도 든다.

(Source: 슬램덩크)

 

나가며 – 그냥 대학원 가세요

학원 출신의 개발자 신입 면접을 보고나서 우리 개발자 분들이 입을 모아서 그러시더라. “포트폴리오에 있는건 아는지 모르겠는데, 그런 퀄리티 결과물을 만들기 위해서 알아야하는 개발 일반 지식을 하나도 모르는 것 같다”고.

데이터 사이언티스트 만들어준다는 학원의 커리큘럼을 보면 비슷한 생각이 든다. 저런 학원 출신이신 분들이 Data Scientist라면 기초적으로 알아야할 대학원 수준의 수학 & 통계학을 얼마나 알고 있을까? 필자는 매우 회의적이다. 증권사 Quant 뽑는데 학위과정에서 제대로 Hard-training을 받으신 분이 아니라, 강남에 있는 학원에서 3개월동안 훈련 받은 분 뽑는다고하면 어떻게 될까? 그 분이 Outlier라면 또 모를까, 애시당초 resume screening을 당했거나, 운이 좋아서 면접을 봤다고해도 윗 분들이 “어디서 이런……?” 같은 말로 인터뷰 프로세스를 중단할 확률이 100%에 수렴할 것이라고 자신있게 이야기할 수 있다.

위에서 말했듯이, Pabii에서 저 학원과 비슷한 교육을 받으신 분께 드릴 수 있는 포지션은 Account Strategy지 Data Scientist가 아니다. 우리회사는, 아니 어지간한 DSP는 이제 Account Strategy가 Data Analyst를 해야하는 시장이 되었기 때문이다. 거기다 그 학원 출신이어서 AS 합격될 가능성이 높아지기 보다는, 그냥 좋은 학교에서 괜찮은 수준으로 수학&통계학 훈련을 받은 학부 졸업생이 더 일을 잘할 것 같다. Data Scientist Intern 지원자들을 보면 거의 대부분 수학 실력에 따라 사고의 깊이와 모델의 깊이가 결정되는 걸 보고 있기 때문에 더욱 그렇게 생각한다. 그리고, Data Analyst가 아니라 Data Scientist 뽑고 싶으면 그냥 통계학 공부 많이하고 모델링에 고민 많이 해 봤을 대학원생을 뽑아서 사내 교육을 시키는게 더 맞을 것 같다.

Pabii의 Data Science 강의를 들으신 분들 (중 학부 출신이신 분들) 대부분이 “이제 뭘 공부해야하는지 알게됐다”, “수학을 왜 배우는지 몰랐는데 이렇게 쓰인다는 걸 알게되어 다행이지만, 앞으로 갈 길이 까마득해 보인다”는 말씀을 하시는 것도 같은 이유일 것이다.

특별히 Pabii가 국내외의 좋은 회사들보다 인력을 찾는 눈이 더 까탈스러울 것 같지 않다. 어차피 사람보는 눈은 거기서 거기니까. 우리가 이렇게 생각하고 시장에 접근한다면, 아마 다른 잘 나가는 회사들도 크게 다르지 않을듯.

저 위에 소개해드린 응원 메일에서 모 대학 공학과 교수님께서 말씀하셨듯이 그동안 통계학 훈련을 받은 분들이 “꼼수”라고 외면했던 계산방법론들을 학교에서도 제대로 가르치려고 하시는 교수님들이 많아졌다. (그 분들이 몰라서 안 가르쳤다기보다, 이게 “꼼수”고 학문적인 접근법이 아닌 경우가 많기 때문에 외면했던 계산법에 불과하다는 사실을 다시 한번 상기해드린다.) 본인이 수학적으로 잘 훈련된 인재라고 생각하신다면, 그런데 정말 Data Scientist가 되고 싶다면, Entry barrier로 수학&통계학 훈련에 대한 강조를 많이하는 석,박사 프로그램을 찾아가서 원리부터 차곡차곡 이해하는 훈련을 받고 나오시길 바란다.

 


공지1: 2019년 3월 29일을 끝으로 데이터 사이언스 주제의 포스팅은 종료됩니다. 이 후에는 파비의 스타트업 운영 관계된 포스팅만 월 1회 작성됩니다.

공지2: 위와 같은날을 기준으로 댓글을 모두 삭제합니다. 추후에는 댓글 서비스를 제공하지 않습니다.

학부시절 B모 전략 컨설팅 회사 인턴을 한 후, 평생 다시는 전략 컨설팅을 하지 않겠다고, 내가 그런 서비스를 쓰지도 않겠다고 결심했었다. 여기저기서 “사례”라는 걸 긁어 붙인 후, “분석”이랍시고 화려해보이는 그림 몇 개를 더 추가한 ppt 100장을 제공하는게 전략 컨설팅이라는 걸, 그런 풋내기 시절에 이미 보았기 때문이다. 나이를 먹고 점점 더 경험의 폭과 배움의 깊이가 깊어지면서, 요즘은 유명 전략 컨설팅 회사 출신이고 이름 높은 학교의 MBA를 나왔다고 자랑하면 보통 그 인재는 “걸러야”한다고 생각할 정도가 되었다.

전략 컨설팅 사람들을 싫어하고 무시하는 가장 결정적인 이유는 “잘 모르면서 아는체 하는 꼴”이 너무 꼴불견이기 때문이다. 그리고 그들의 아는체는 대부분 X 기업에서 있었던 Y 사례, 즉 Case Study에 기반해있다. A회사가 B회사를 인수해서 크게 성공했다는 Case Study가 과연 C회사에도 똑같이 적용될 수 있을까? D회사에는? E, F 회사에는? 직접 인력 결합을 시도해 본 분들이 더 경험을 바탕으로 한 지식을 갖고 있겠지만, 최초 입사시에 스펙이 달랐던 것부터 시작해서, 급여 책정 기준도 다르고, 사람들의 성향이나 조직 문화, 나아가 사회적 시선도 달랐던 조직을 하나로 합치는 것은 보통 쉬운 일이 아니다. 인사 문제 하나만 해도 이렇게 풀어야할 고리가 넘쳐나는데, 직접 업무 수행을 하면서 고리를 하나씩 하나씩 풀어나가야 할 일에 Case Study 하나 둘로 해결이 가능할까?

더 근본적인 문제는, 그들 대부분이 사고 실험을 할 수 있는 도구를 갖고 있지 않다는데 있다. 예를 들어, 상품 가격이 올라도 잘 팔리는 일이 있는걸 보면 우하향 수요곡선을 가정하는 경제학은 틀렸다고 주장하는 경영학과 수준의 (한심, 멍청한) 지식인을 보자. 학부 1학년 경제원론을 제대로 배웠다면, 우하향 수요곡선이 한계효용 체감의 법칙을 가정하고 도출해낸 수학식의 그래프 모양이라는 걸 알게된다. 당연히 한계효용 체감의 법칙이 적용되지 않는 영역으로 가면 가격과 수요의 반비례 관계가 깨질 수도 있다. 가격이 오르면 많이 팔리는 사치재를 1명이 수십개씩 사는 일은 없다. 명품백 여러개 가진 사람 있지 않냐고? 똑같은거 말고 다른거 여러개를 사겠지. 거기도 한계 효용은 체감할 테니까. 여러 사람이 1개씩 상품을 사는데, 비싸도 저걸 갖고 싶다는 Peer pressure를 세일즈에 이용했다는 결론을 내리는게 더 합리적인 판단 아닐까? 근본적인 가정을 알고 있는 경우와, 수박 겉핡기 수준의 지식만을 갖고 있는 사람이 새로운 문제에 직면할 때 나오는 반응은 다를 수 밖에 없다.

실제로 Valuation 모델로 열심히 밤을 새던 뱅킹 시절, Sell-side와 Buy-side간에 적정 valuation으로 논쟁이 붙었는데, 2008년 금융위기 당시에 여러 종류의 이자율이 동반 상승한 부분과 특정 영역의 risk premium이 상승한 부분간의 차이를 이해못하는 counter-party를 꿀먹은 벙어리로 만들었던 기억이 있다. 외국에서 오래살다와서 영어만 번드르르하게 잘 한다는 이유로 뽑힌 뱅커들의 문제, 기본 모델을 이해 못하는 바보들이 항상 겪을 수 밖에 없는 문제를 그대로 보여준 비지니스 사례라고 생각하면 되겠다.

Case Study 좀 넣어주세요

요즘 기업들이 Data Science 관련된 강의 요청을 하면서 꼭 Case Study를 넣어달라고 이야기 한다. 업무 하다가 문제가 해결 안 되면 Case Study를 찾는단다.

10년전부터 전략 컨설팅 회사를 혐오 수준으로 싫어하게 되었던 것과 같은 내용을 내 강의에 넣어달라고 하면 좀 비참해진다.

어차피 들어도 못 알아듣거나, 알아들어도 회사에서 구현하기 쉽지 않을텐데? 대충 트렌드 훑어주는 경영학과 수업 스타일의 시간 낭비성 강의를 원한다면 또 모를까, 정말 회사 업무에 적용해서 서비스 수준을 업그레이드하려면 수업 레벨은 당연히 올라가야하지 않나?

실제로 회사들에 강의가서 그런 모델들 적용하는 미쿡 Top class 회사들 사례를 던져주면 강의장이 침묵에 휩싸이는 걸 느낄 수 있다. 평소에 Case Study라고 하면 Harvard Business Review에서 골라온 MBA 수준의 수박 겉핡기 지식 정도의 Case들만 봤기 때문에, Case Study 몇 개만 보고나면 비지니스 수준을 끌어올릴 수 있을 거라는 착각 속에 살다가, Case Study라고 다 같은게 아니라는 걸 깨달았기 때문일 것이다. 미안한 이야기지만, 아마 그 강의장에 앉아있는 회사 임직원들 중에 필자의 Case Study를 알아먹은 사람은 채 5%가 되지 않을 것이다. (폭격맞고 얼빠진 표정 가득한 강의장에 서 있으면 미안함, 안타까움과 더불어 알아먹을 실력도 안 되면서 바쁜사람 왜 불렀냐는 분노도 좀 생긴다ㅋ)

왜 그럴까? 저 위에서 언급한 근본적인 문제, 사고 실험을 할 수 있는 도구를 갖고 있지 않기 때문이다. 대학에서 학문을 배운다는 것은 A 사건이 일어나면 B, C, D 같은 사건이 연쇄로 일어날 수 있는 가능성을 자기 머리나 경험으로 생각하는게 아니라, 체계적인 모델로 인지한 다음, 그 모델의 변형이 일어날 때 결과물이 어떻게 달라질지를 따질 수 있는 지적인 훈련을 받는다는 말과 같다.

그런데, 학창 시절에 공부를 그런 식으로 한 적이 없고, 암기만 했거나, 최소한 회사 생활 몇 년 동안 그런 “지적인 근육”을 모조리 잃어버렸기 때문일 것이다.

그런 예시 딱 하나만 들어보자. 참고로 이건 요즘 미쿡에서 시가총액 세계 1위를 넘보는 A모 회사에 있는 친구가 하고 있다는 업무 중 하나다.

 

수요 곡선 측정하기 (Demand Curve estimation)

온라인 쇼핑몰 회사들이 으레 그렇듯이, 가능한 최저가를 제시해서 유저들의 지갑을 열어보려고 노력한다. 근데, 무조건 최저가를 제시해야 구매하는게 아니라, 자기의 필요에 맞는 상품, 자기 마음 속의 지불 의지보다 더 가격이 낮은 상품이어야 구매 행동이 일어난다. 경제학에서는 Willingness to pay라고 부르고, 수학적으로 이 문제를 도식화하기 위해서 효용 (Utility)이라는 이름을 붙여놨다.

그래서 수요 곡선은 가격과 소비량 순서쌍을 연결한 그래프이기도 하지만, 동시에 소비자들 각각의 Utility 값을 연결해놓은 선(thus, 한계효용체감의 법칙)이라고도 볼 수 있다.

문제는 이 수요 곡선을 실제로 계산하는게 거의 불가능에 가깝다는데 있다. 엥? 가격 (P)과 수요량 (Q) 데이터만 구하면 되는 것 아니냐고?

우리가 시장에서 만나는 데이터, (a) Observation,는 가격 (P)마다 수요량 (Q)이 아니라 구매량 밖에 없다. 구매량이랑 수요량이랑 똑같은 데이터 아니냐고? 글쎄, 사고 싶지만 비싸서 안 사는 경우가 얼마나 많냐? 구매량이라는 데이터는 구매자들의 “수요”가 아니라, “수요와 공급이 만났던 점”이다. 그래서, 수요 곡선을 구하려고 실제 데이터인 구매량을 이용하면 가격이 오를 때마다 공급이 늘어나서 전체 구매량이 증가하는, (b) Estimation, 그래프가 나오게 된다. X를 구하려고 했는데 Y를 구하게 되는 꼴이 되는 것이다. (수요 곡선 구하려고 했는데, 공급 곡선 정보와 뒤섞인 Hybrid 곡선이 나오게 된다.)

상식적으로 생각하기에는 가격이 올라가면 적게 소비하고, 가격이 내려가면 많이 소비하는 우하향 곡선이 나와야하는데, 위의 (b) Estimation 에서 보다시피 곡선의 모양이 우리의 상상과는 많이 다르다. 공급곡선과 수요곡선이 만나는 점만 찾았기 때문이다. 우리의 상상은 (c) Reality인데, 이걸 어떻게 찾냐고?

경제학의 산업조직론에서는 이런 수요 곡선을 찾아내기 위해서 도구 변수 (Instrumental variable)이라는 고급 통계 방법론을 쓰기도 한다. 그 도구 변수를 어떤 변수를 쓰느냐에 대한 논란도 많고, 적합한 데이터를 모으는 작업도 쉽지 않다. 좀 쉽게 말하면, 수요 곡선 하나 찾아내는게 최소한 석사들의 학위 논문 주제는 될만한 내용, 산업 구조가 복잡하다면 박사 연구 주제가 될지도 모를만한 내용이다.

 

이걸 온라인 쇼핑몰에서는 쉽게 계산할 수 있다고?

당장 예전처럼 가격과 구매량 데이터를 구하려고 동네방네 돌아다녀야 할 필요가 없다.  데이터 베이스에 Query 한번 날리면 다 뽑아낼 수 있는 정보 아닌가? 길거리에서 팔리는 상품들은 사람들이 정보 탐색에 얼마나 큰 비용을 쓰는지, 날씨는 어땠는지, 교통비나 걸어서 이동하는 시간의 가치는 얼마일지도 생각해야해서 고려해야하는 변수가 엄청나게 늘어난다. 그런데 온라인 쇼핑몰에서 검색어 한 두번만 더 넣어보면 되는 작업이 정보 탐색 비용이 어마어마하다고 할 수 있을까? 쉽게 말해서, 데이터의 Noise가 확 줄어든다. 그리고 도구 변수로 삼을만한 다른 정보들도 모두 데이터 베이스 안에 다 있다. 비슷한 상품 판매량, 전체 상품 판매량 같은 데이터가 대표적인 도구 변수 후보들이다.

정리하면, 예전에는 석사 학위 논문 주제에 비견할만큼의 지적인 노동을 1-2시간의 간단한 노동만으로 찾아낼 수 있게 되었다.

 

그럼 왜 수요 곡선을 (정확하게) 측정해야할까?

경제학 수업 시간에 “수요 탄력성”이라는 개념을 들어본 적이 있는가?

가격을 내리면 얼마만큼 수요가 증가할지는 수요 곡선의 모양에 좌우된다. 수요곡선이 가파르다면 (왼쪽 그래프, 탄력성이 1이상이면), 수요량이 별로 증가하지 않고, 반대로 수요곡선이 완만하다면 (오른쪽 그래프, 탄력성이 1미만이면), 수요량이 크게 증가한다.

이런 정보를 갖고 있으면 무조건 가격을 내려야 잘 팔린다는 1차원적인 사고 방식에서 벗어나서, 상품 X는 가격 할인 쿠폰을 보내주는게 좋은지, 단순히 홍보를 많이 하는게 더 좋은지를 결정할 수 있다. 아마도 해외 온라인 쇼핑몰을 쓰는 구매자라면 k% 할인 쿠폰이 특정 상품군에만 적용되는 경우를 종종 봤을 것이다. 그 상품군의 상품들은 가격이 조금만 내려도 소비량이 대폭 증가하는 상품이라고 쇼핑몰 내부적으로 판단했기 때문에 가능한 일이다.

이런 Case Study를 실제로 온라인 쇼핑몰 회사들 몇 군데에 공유해 준 적이 있다. (Case Study 싫어하지만 그래도 세상과 타협했다 ㅋㅋ)

이 글을 쓰는 시점을 기준으로 위의 내용을 공유한지 6개월에서 1년 정도가 지났는데, 이걸 자기네 사업에 구현했다는 이야기도 들어본 적이 없고, 궁금하다고 추가 정보를 요구받았던 적도 없다. 아마 그 날 외부 강의 중에 잠깐 듣고 잊어버렸을 것이다. (나같으면, 내가 실력이 없다고 판단되면, 우리 데이터 줄 테니 이거 계산해주는 컨설팅 부탁해도 되겠냐고 물어본다.)

 

나가며 – Case를 모르는걸까? (기본)실력이 부족한걸까?

학부 2학년 1학기에 본의 아니게 경영학과 친구의 마케팅 수업을 한 번 들어갔던 적이 있다. 상품 가격이 비싸면 잘 팔리는 경우도 있다는 사치재 설명을 하신 그 교수님은 분명히 본인의 학위 중에 베블렌 효과(Veblen effect)를 증명하는데 필요한 수학적 지식과 경제학적 훈련을 받은 분이었을 것이다. 그러나 그 한 학기 내내, 아니 졸업하고 10년이 지난 지금까지 그 경영학과 학부만 졸업한 친구가 베블렌 효과를 이해하고 사고의 툴로 활용하는 걸 단 한번도 본적이 없다.

Case Study란 그런 것이다. 겉 껍데기에 대한 얇은 지식만 배우는 그런 공부. 그래서 MBA처럼 학문적이지 않은 학위 과정에서나 쓰는 교육 자재가 되는 것이다.

불행하게도 Data Science의 영역은 그런 말만 번드르르한 전략 컨설팅과 경영학과 or MBA정도의 지적인 수준으로 도전할 수 있는 내용이 아니다. (물론 1차원 수준의 그래프 몇 개 그려놓고 Data Science라고 우기는 사람들이 있다는 걸 모르는 건 아니지만.)

위의 수요 곡선 측정에 대한 설명을 경제학 학부 과정을 충실하게 졸업한 학생이라면 다 이해할 수 있을까? 적어도 학부를 대충 다녔던 필자는 석사 시절 논문을 쓰면서 겨우 이해를 했었다. 그리고 그 시절부터 알고 지내던 경영학과 친구들 중에 수요 곡선을 왜 구해야하는지 이해했던 친구는 한 명도 없다. 예전처럼 석사 학위 하나를 걸고 논문을 써야 겨우 찾아낼 수 있는 정보도 아니고, 대형 온라인 쇼핑몰이라면 쉽게 찾아낼 수 있는 정보, 그렇게들 좋아하시는 미국에서는 이미 써먹고 있는 정보인데, 왜들 그렇게 관심이 없을까? 아니, 관심이 없는게 아니라, 실력이 없는 건 아닐까?

당신들에게 필요한 건 오늘 듣고 내일 잊어버릴 Case Study 몇 개가 아니라, 수요 곡선, 탄력성 같은 교과서적인 지식과 업무 응용 센스다.

Case Study 달라고, 다른 기업 사례 달라고 하시던 기업 관계자 분들, 좀 깨달으셨으면 좋겠다.

메일 섹션을 홈페이지 하단에 넣고, 회사 전화번호를 등록했을때만해도 공부하다가 뭔가 잘 모르는 내용이 있는 사람들, 벽에 부딪혔는데 스스로의 힘으로 극복하기 좀 어려운 분들의 연락을 기대했었다. 수업을 하는 것도 같은 이유니까. 나도 공부할 때 힘들었는데, 누군가 조금만 더 도와줬으면 쉽게 극복했을텐데, 이제 쬐끔 더 알게되었으니 도와주겠다는 마음에서 넣어놓은 개인 연락 포인트건만, 거의 대부분의 연락은 포인트 못 잡는 비지니스 요청이나, 대학원가고 싶은데 스펙이 안 되어서 고민이다, 그것도 아니면 개발자들이 경력 X년인걸 강조하면서 Data Scientist로 전직하고 싶다는 내용들이다.

대학원 가고 싶다는 분, 개발 경력 Y년이라는 분들, 그냥 돈 버린다는 셈치고 내 수업을 하나만 들어보시는 걸 추천한다. 일반인 용으로 쉽게 설명해놓은 웹페이지에 나오는 내용말고, Data Science 대학원가서 배울만한 내용들을 한번 보고나면, 할 수 있는 내용인지 아닌지, 잘 준비하고 있는지 아닌지 쪼~오~끔 더 쉽게 판단할 수 있지 않나? 이미 pabii 블로그 글이 100개 가까이 있고 그 중에는 대학원 수업에 무슨 내용이 나오는지 맛보기라도 넣어놨는데, 글도 안 읽어보고 입에 밥을 떠넣어달라는 식의 연락을 주시면 곤란하다.

솔직히, 수업 들으셨던 분 아니면 딱히 대답하고 싶은 수준의 질문 주시는 분도 없는 마당이라, 요즘은 홈페이지 하단의 메일 섹션 없애고 싶은 유혹이 샘솟는다ㅋㅋ

아래는 기대하는 질문 예시들이다.

 

질문 1. 의학 + 머신러닝

얼마전, 의대 교수로 재직 중인 분이 수업에 오셨다. 한 달 동안 말없이 수업에 나오고 계시길래, 잘 따라오고 계신지 궁금했는데, 종강 후에 연구 분야에서 관심있는 내용을 메일로 보내주시더라. 한번 뵙고 난 다음에 뭘 해드릴 수 있는지 간략하게 설명드렸고, 그 자리에서 왜 다른 사람들 다 놔두고 날 찾아왔는지 납득이 되는 설명을 해 주셨다.

계속되는 Follow-up 대화는 의학 논문들에서 쓰인 머신러닝 방법들에서 데이터를 어떻게 활용했는지에 대한 이야기였지, SVM 썼네, Ensemble을 썼네, Neural Net을 썼네 같은 대화는 일체 없었다.

보내주신 논문 A에서 본 데이터가 X-Y-Z 구조인 것 같은데, 이게 의학적인 관점에서 합당한 이해입니까, 논문 B에서는 이걸 Q-R-S vs. X-Y-Z로 해 놓고 Logit, RF, SVM 다 써보다가 결국 Logit을 이용해서 어느 병 진단에 Q-R-S 구조가 더 적합하다는 결론을 내렸네요, 데이터로 네트워크를 그려보니 구조도가 (K-M)-X-Y-Z 로 나오는데, 교수님께서 K-M이 연결되는게 합리적이라고 해 주셔서 모델을 변형시켜보는 것도 괜찮을 것 같습니다. 그런데, 이런 구조가 Q-R-S에는 없는지요? 가능하다면 apple-to-apple 비교를 해야할 것 같습니다.

 

질문 2. 금융 + 머신러닝

아주 예전에 수업을 듣고 가신 분 중에 모 금융사에 장기근속중인 학부 대선배 분이 있었다. 복습을 다섯달이나 하고 나니 이제 좀 이해가 된다는 겸손한 말씀과 함께, 시뮬레이션으로 만든 가상 데이터로 사내 컨설팅 하신 내용을 정리해서 보내주셨더라. 수업 때는 PCA만 가르쳐 드리고 FA를 개념만 설명해드렸었는데, FA로 latent variable을 찾아내서 각 변수별로 이름을 붙이려고 correlation으로 역추적하신 작업, sensitivity check으로 latent variable 숫자가 달라질 때 correlation 활용도가 어떻게 바뀌는지 논리를 쌓아올리는거보고 정말 감탄사가 절로 나왔다.

질문 하신 부분이 Latent variable과 굉장히 유사해보이는 직접 변수들을 썼을 때, 모델 오차가 얼마나 날지에 대한 결론을 training set / test set으로 내 봤는데, 이 부분이 얼마나 합리적인 추론인지, 혹시나 다른 방법이 없는지에 대한 궁금증이었다.

어차피 Latent variable을 뽑아낼 때 information loss가 있을 것이고, 그게 Bias의 원인이 된다. 유사해보이는 직접 변수들도 “유사”라는 말이 Measurement error가 있는 변수를 쓴다는 말과 같은 말이기 때문에, 아마 attenuated bias가 생길 것이라는 점을 미뤄볼 때, 두 모델 모두 coefficient들의 절대값이 실제로 나왔어야하는 값보다 약간 작게 나올 것이다. Coefficient들의 절대값이 더 크게 나오는 모델이 좀 더 Bias가 작은 모델일 것이라고 직관적인 결론을 내려볼 수 있다는 답변을 드렸다.

참고로 이거 수업 시간에 다 설명했던 내용이다.

 

질문 3. 불량율 + 머신러닝

어느 연구소 분의 질문이다. y = ax1 + bx2 + cx3…..의 간단한 regression 식을 세워놓고, y값이 0/1인 경우를 테스트하겠다고 하시던데, y값을 Normal Q-Q plot에 얹어놓으셨더라. 0/1이면 Binomial이고, 한쪽 skewed로 나올 가능성이 높아보이는데 이걸 왜 Normal의 Q-Q에 얹었는지 이해가 안 되어서 왜 이런 작업을 하시느냐고 물어봤다.

하나의 batch에 N개의 상품이 들어있는데, 각 batch마다 불량율을 k%로 기록하고, 그 불량율 k%를 맞추려고 상품들의 특징을 잡아낸 x1, x2, x3 값들도 batch마다 평균값을 썼단다. 말을 바꾸면, y값도 평균값들의 분포, x1, x2, x3…도 평균값들을 모아놓은 데이터 셋인 것이다.

이런 경우에, y값은 sample들의 평균을 모아놓은 것이므로, Central Limit Theorem에 의해서 정규분포로 수렴하게 된다. y값 이전에 불량/정상 사건은 0/1이고 불량일 가능성이 낮으니까 Poisson일 확률이 높지만, 일단 batch 하나가 sample 집합이고, sample에서 뽑은 평균값들을 주욱 다 모아놓으면 정규분포에 수렴하는건 통계학적인 기초 상식이다.

그런데, y값은 0.1%, 0.2%,…, 1% 범위에 있는, 0 근처에 있는 값, 0보다 작을 수 없는 값이기 때문에 아마 0에서 truncated인 normal이 나올 것이다. 따라서 저 위의 Normal Q-Q 로 데이터가 랜덤인지 아닌지 알기 어렵다. 그전에, 이런 CLT 정규분포인 데이터를 Normal인지 아닌지로 랜덤 여부를 알아본다는 것 자체가 말이 안 되는 작업이다.

거기다, x1, x2, x3… 모두가 batch별 평균값들이잖나? 그럼 x1의 분산이 얼마나 작을까? x2, x3는? 아마 x값들의 분산이 굉장히 작게 나올텐데, 그걸로 truncated normal인 y값을 예측하겠다? 그런 batch가 수만개가 있다고해도 쉽지 않은 작업일 것이다. 바늘구멍으로 10m 밖에 있는 반대편 바늘구멍을 설명하는 작업이기 때문이다.

이래놓고 x1^2, x1 * x2 같은 non-linear 패턴 찾아줄 변수들 쓰면 더 좋아지는거 있지 않냐, 그런 library 가르쳐 달라고 하시던데, 수업시간에 그게 무모한 작업이기 때문에 SVM, Ensemble 같은 모델들이 나왔다는 설명하지 않았었나? 다른 포스팅에도 써 놨던 답변인거 같은데?

애시당초 batch 에서 나온 평균값을 쓰지말고, batch 안에 있는 낱개 데이터들을 썼어야했다.

 

나가며 – Data Scientist들이 할 일, 할 수 있는 일, 해야만 할 일

앞으로는 이런 답변을 할 수 있는 질문이 아니라면 답변을 거절하려고 한다. 돈 벌려고 수업 들으라고 하는게 아니라, 이런 답변을 알아들을 수 있는 사람들에게만 설명하고 싶기 때문에 수업을 들으라고 하는 것이다. 그리고 이런 대화가 가능한 사람들이 많아져야 모델링 수준도 올라가고, 덩달아 시장 수준도 올라가지 않겠는가? Neural net 쓰는 예제 코드만 열심히 모은다고 저런 대화가 가능해질까? 실제로 Criteo 다니던 시절에 한 줌 밖에 안 되는 Data Scientist 들끼리 글로벌 콜을 하면 수리통계학 기반 없는 사람들은 대화에 끼여들 여지가 거의 없었다. 예를 들면, 회사의 어떤 데이터 셋이 Poisson인지, Truncated Poisson인지에 대한 의견을 나누고, 결론에 맞춰 모델 설정을 어떻게 해야하는지에 대한 자신들의 research를 쉐어하고, y=0인 경우를 제거하느냐 아니냐에 모델 결론이 바뀌는 부분에 대해서 이런저런 토론을 했었다. 이런게 진짜 Data Scientist들이 할 일, 할 수 있는 일, 해야만 할 일이라고 생각한다.

무슨 수업을 들어야할까요? 수학 공부는 어디서부터 시작해야하나요? 고교 수학이 기억 안 나는데 정석책을 다시 봐야할까요? 대학 전공은 뭘로 골라야할까요? 등등의 질문은 스스로 답변을 찾을 수 있을만큼 정보가 널려있지 않나? 고교 시절에 수학 못 하던 반 친구가 “이 책 다 보고나면 나도 수학 만점 받을 수 있어?”라고 물었을 때 대답할 말 찾기 힘들었던 것과 궤를 같이 한다. 그 책 한 권만 보면 수학 만점 받을 수 있다는 “쏙쏙 빼먹어서 편하게 공부하고 싶다”는 마인드를 버리고, 시중에 나온 모든 문제집에 나온 모든 문제를 다 풀어낼 수 있는 수준이 되어야 수학 만점을 받을 수 있다고 솔직하게 대답했다면 어떻게 됐을까? 그딴 식으로 사람 힘 빠지는 소리하지마라, 그렇게 힘들게 공부하는게 왕도가 아니다는 반박을 들었을까? 참고로 머리가 딸리는 필자는 항상 “할 수 있는거 다 해본다”는 철학을 갖고 공부해왔다.

저런 대답하기 깝깝한 질문들 말고, 위에 예시를 들어놓은 종류의 답변이 필요한 질문은 아무리 바빠도 늦게라도 시간을 내서 답변한다. 실제로 메일을 잃어버려서 1달만에 늦게 보고서는 답장해드린 경우도 있다. 이미 그런 답변 쓴 내용 중 일부를 이곳, 이곳, 이곳, 이곳에 올려놨기도 하고.

정말 열심히 공부하고 있으신 분들 모두 화이팅이다!

학부 3학년 때의 일이다. 둘 중 하나가 되면 그 길로 가야겠다고 결심하고, 외국계 증권사를 노리는 친구들이 들어가는 경영학과 동아리 면접과 박사 유학 가려는 애들을 지원해주는 SK그룹 산하의 고등교육재단 장학생 시험을 봤다. 어쩌다 둘 다 되는 바람에 많은 고민을 했고, 당시엔 동아리를 거쳐서 서울에 있는 외국계 증권사 IBD 에 교포 or 외국 장기 거주 or 아버지 빽이 아닌 희귀별종 한국 토종인 주제에(?) 들어가게 됐는데, 그렇게 힘들게 들어가놓고는 정작 인간의 본질이 박사 유학을 가야되는 놈이었던지 그 술접대 생활, 겉만 화려한 문화를 못 버티고 런던행 비행기를 탔었다.

그 시절에 동아리 친구들이 항상 했던 이야기가, “넌 너무 어렵게 설명해, 니가 경제학 이야기를 하면 무슨 말인지 잘 모르겠어. 그냥 돈 벌었다 이렇게 쉽게 이야기하면 안 되는거야?” 라는 조언 or 불평이었다. 반면 경제학을 위시한 사회과학 전공하던 친구들은 “니가 핵심만 찝어서 설명해 준 덕분에 이번에 XX경제학 A 받았다. 내가 밥 살께.” 같은 응원 or 칭찬을 많이 해 줬었다.

겉 껍데기를 그럴듯하게 포장하기 바빴던 역겨운 뱅커의 삶을 뒤로하고 유학을 떠나기 전까지는 항상 “내가 정말로 현학적인 인간인가?”에 대한 깊은 의구심을 갖고 있었다. 스스로에 대한 그 자뻑(?)은 석사 공부하던 첫 해, 아니 첫 달에 산산조각 나버렸다. 현학적인 친구들이 프로그램 안에 얼마나 많았는데, 나 주제에 현학은 무슨 얼어죽을… 동아리 친구들이 깊이가 얕은 친구들이다보니 내 설명에 휙휙 등장하는 논리들을 따라오지 못했던 것이다.

“깊이가 얕은”이라는 표현에 학부 시절 동아리 친구들이 무시당했다고 화날 것 같기는한데, 필자가 수학 중에 제일 어려운 과목이라는 Stochastic Calculus를 학부 수학 출신이 아닌 석사 애들한테 그것도 non-native의 영어로 강의하고는 Best TA of the Year를 받았던 사실을 증거로 제시해보고 싶다. 그렇게 어려운 수학 과목도, 심지어 내 모국어가 아닌 언어로 설명했는데도, 단순히 Best TA 상이 아니라, 학교 105년 역사상 처음있는 Landslide 투표였다는 큰 칭찬까지 들었다.

한참 써놓고 보니 좀 자랑같아 보이는데, 요지는 깊이가 얕은 사람에게는 아무리 쉽게 설명해줘도 답이 없다는 거다. 너무 심하게 경영학과 친구들을 무시하는 것 같지만, 학부 1학년 때부터 Demand-Supply 함수로 사치재와 Giffen재를 논리적으로 증명할 수 있는 툴을 배우는 경제학과와 “가격을 올리면 잘 팔리는 경우도 있어요~ 재미있죠?”라는 마케팅 수업을 듣는 경영학과 사이의 지식의 깊이에서 나오는 격차는 어쩔 수 없는 부분이다.

 

데이터 사이언스 출강 요청들

기업들에서 데이터 사이언스 주제로 출강해 달라는 요청을 종종 받는다. 내 사업이 우선인 사람이라 어지간하면 거절하고, 보통은 조건을 내건다.

  • 깊이있는 지식을 이해할 수 있는 사람들을 대상으로 한 수업인가?
  • 배운 내용을 써 먹을 수 있는 빅데이터를 보유하고 있는가?

빅데이터가 없으면 당연히 무의미한 지식이기 때문이기 때문에 두번째 포인트는 쉽게 이해될텐데, 첫번째 포인트는 너무 “현학적”인거 아니냐고 반박을 하실 수도 있겠다. 나보다 잘난 사람 수도 없이 많으니 까불지말자는 생각이 항상 머리 속에 박혀 있기 때문에, 귀국 초기만해도 사람이 쬐끔 더 배웠다고 거만 떨지말고, 겸손하게 최대한 성심성의껏 가르쳐드리자고 생각했었다.

그런데, 딱 학부시절 경영학과 친구들한테 설명할 때랑 똑같은 상황이 벌어지더라.

개념 설명하고, 예제 코드 하나 던져주면 딴데는 못 쓴다고 불평하면서 정작 개념 이해도가 낮은 사람들에 대한 불평은 이미 여러번 썼으니 패스한다. 몇 번은 실리콘밸리에서 자주 언급되고, 수백억 ~ 수천억의 가치를 인정받는 기술들을 최대한 단순화시켜서 설명해줬는데, 너무 “현학적”이고, “이론적”이어서 실제로 적용하는데는 아무런 도움도 안 될 것 같단다. 갔던 기업체들마다 반응이 공통적이었다.

좀 허탈하고 씁쓸한 마음에, 학부 동기들이나 필자의 데이터 사이언스 수업에 찾아온 수강생 분들께 똑같은 설명을 다시 한번 시도해봤다. 보통 반응은 어떠냐고? “정말 저런식으로 Data Science가 쓰인다는 걸 알게되어서 깜놀했다. 단순히 이미지 인식에만 쓰이는 줄 알았는데 이런게 Data Science구나. 데이터를 그냥 Regression하는게 모델링이 아니구만. pabii에서도 이런식의 모델 쓰냐?” 같은 반응들이다.

(물론 깊이 얕은 수강생들이 “저걸 어떻게 써먹냐, 딱 코드로 복붙해넣을 수 있도록 해 줘야지” 같은 반응을 보이는 경우도 있다. 그럴꺼면 그냥 저급 코딩 강좌 찾아가실 것을 추천한다.)

몇 번 유사한 사건을 겪으면서 출강 요청에 대한 대답은 더더욱 확고해졌다. 경영학과, 컴퓨터 공학과 등등 수학과 통계학을 이용해서 모델링을 하는걸 학부 시절에 구경했던 적이 없는 분들에게 강의할 생각은 없다고 딱 잘라 말한다.

그 경영학과, 컴퓨터 공학과 출신들이 보통 Data Analyst나 Data Engineer라는 타이틀을 들고 필자의 출강 수업에 나타난다. 그 분들이 못 알아들을 가능성이 매우 높다는 걸 일찌감치 알고 있기 때문에 보통 강의 기획하시는 분들께 미리 엄포를 놓는다. 통계학 훈련이 된 분들 위주로 모으는게 피차간에 불편한 일이 적을꺼라고.

그런데 회사 일이라는게 그렇게 뜻대로 될리가 있으랴. 통계학 학부에 해당하는 과정을 정상적으로 마치고 대기업에 앉은 분들의 비율이 몇 프로일 것이며, 또 관련 전공 아니라고 엄포를 놔도 큰 상관없겠지라고 찾아오시는 분들도 많다. 그럼 그냥 시간만 날리는거다.

 

데이터 사이언스 컨설팅이 필요한 이유

얼마전에 강의 요청에 답변했던 이메일이다. (일부러 좀 수위가 쎈 걸 골랐다 ㅋ)

외람된 표현일지 모릅니다만, 개발 인력과 BI인력들로만 구성된 상태라면, Data Science 사업 모델의 시작은 커녕, 인력 구성도 안 된 상황이라고 판단됩니다. 그 분들은 Data Science 업무를 하시는 분들이 아닌데, Data Engineer, Data Analyst들만 모아놓고 Data Science 발전 방향을 설명해달라니요? Data Science 시스템 구축을 무슨 X 넣으면 Y 나오는 공학 계산 프로젝트처럼 오해하시는 것 같은데, 개발 인력과 BI인력들로는 기본 DB 만들고, 1차원 그래프 그리는 일 밖에 할 수 없습니다. 말씀주신 내용들은 데이터 사이언스 모델링을 어느정도라도 이해하시는 분들이어야 따라올 수 있는 지식입니다.

그 메일을 보내주신 회사는 일단 DB를 먼저 갈아엎어야되는 상황인데, 도대체 뭘 어떻게 갈아엎어야하고, 데이터를 어떻게 분석해야할지, 도대체 데이터 사이언스란 뭔지 감이 없는 상태에서 이런저런 “찌라시”들만 보고 들은 상태였다.

회사 상황에 대한 설명을 들으면서 “데이터 사이언스를 당신네 사업에 이렇게, 저렇게, 요렇게 적용하면 x년 안에 대박이 납니다~” 같은 (경영학과 친구들스러운) 강의를 요구하는 것 같아서 굉장히 불편했고, 자기들이 뭘 모르는지도 모르면서 강의 비용만 조금 쓰면 데이터 사이언스 전문 인력이 양성되는거라고 or 회사 발전 방향을 잡을 수 있을거라고 착각하는 것 같아서 안타까웠다. (무X하면 용감…. 아니 그만하자)

그 회사는 자기네 사업에서 뽑아낼 수 있을만한 데이터 목록을 추려내고, 그걸 어떻게 DB에 찍어넣을 수 있는지 고민해야하는 업무 1개, DB에 찍힌 데이터로 단순한 그래프성 “분석”을 할 수 있는 앵글을 고민하는 업무 1개, 그리고 그런 데이터를 가공해서 회사가 궁극적으로 하고 싶은 주제들을 Tackle 해보는 여러 시도를 하는 업무 N개가 눈 앞에 놓여있는 상태라고 생각한다. 앞의 2개는 지금 인력으로도 어떻게 해 볼 수 있겠지만, 뒤의 N개 업무는 미안하지만 그 분들의 영역이 아니다.

단순히 순차적으로 진행하면 되겠지라고 생각하시는 분들께 한 말씀 올리면, 처음에 데이터 목록을 추려내는 자리부터 이게 왜 필요한지를 따지는 Domain knowledge와 데이터 모델링 스킬을 갖춘 Data Scientist가 설계를 해야한다. 그렇게 필요할성 싶은 데이터를 추려내고, Data Engineer가 DB를 만드는 동안, 간단한 처리로 활용할 수 있는 Stream성 데이터를 보는 Data Analyst 팀이 Front-end 개발팀과 Visualization에 대한 고민을 해야한다. 그런 스테이지가 지나고나서야 Data Scientist가 뭘 해줄 수 있는지가 좀 더 구체화될 것이다. 데이터 사이언스라는게 단순하게 그래프 그려서 Insight 뽑아내는 일이 아니라, 데이터들을 가공해서 특정한 패턴을 잡아내는 작업이기 때문에, 데이터가 없는 상태에서 나온 아이디어는 모두 가설에 불과하기 때문이다.

말을 바꾸면, DB설계부터 뒤에 따라올 N개 업무에 대한 생각을 미리 깔고 시작해야한다. 나중에 Data Scientist 뽑으면 되겠지라고? DB 새로 만들어야되겠지라고 대답하겠다.

 

강의 vs. 컨설팅

기업에 출강 온 데이터 사이언스 강의들을 들어보신 분들은 입을 모아 공감하실 것이다. 보통 그렇게 강의 가신 분들이 깊이있는 모델링을 깊이있게 한 적이 없는 사람들이기 때문에 “A 모델을 쓰니까 85% 정도의 정확도를 확인할 수 있었습니다” 같은 수준의 강의만 하고 갈 것이다. 그래서 뭔가 좀 제대로 된 일처리를 해 보자고 데이터 컨설팅을 써 보면, 통계학 모델링으로 짬밥이 굵은 사람이 Domain Knowledge를 갖춘 사람과 이야기하면서 데이터로 찾아낸 내용들을 하나하나 확인해가는 절차를 거치며 모델을 쌓아 올리는게 아니라, “모델 A, B, C, D… Z를 써 본 결과 D 모델이 제일 좋으니까 앞으로 D 모델을 쓰십시오.” 같은 이야기만 할 것이다.

데이터 컨설팅으로 돈 버는 사업을 하고 있지 않았기에 망정이지, 그게 밥 줄이었으면 저런식으로 데이터 사이언스 이미지 망치고 시장 망가뜨리는 사람들에게 느끼는 분노는 지금보다 더 했을 것이다.

왜 이런 일이 발생할까? 왜 깊이도 없는 사람들이 저렇게 저가 수주로 데이터 사이언스 시장을 망치는 상황이 지속되는걸까?

가장 큰 이유는 “갑”들이 “바보”이기 때문이다. “갑”들이 똑똑하면 “을”이 절대로 대충 일을 할 수가 없다. 당장 결과물 발표 때 질문이 폭풍같이 쏟아질텐데?

데이터 사이언스라는게 결국은 통계 모델링의 업그레이드 판이고, 통계학 내공이 꽉 들어찬 사람들에게 의뢰를 해야하는데, 자기 내공이 충만한 사람이 그런 저가 프로젝트에 뛰어들기에는 너무 재능이 아깝고, 가격을 높여 부르면, 이걸 무슨 리모델링 건축 프로젝트인 줄 아는 “바보 갑”들이 돈 적게 쓰고 비슷한(?) 결과물을 얻으면 된다고 생각하는 것이다.

집 리모델링에 쓴 돈 차이가 결과물에 어떤 영향을 미치는지는 비전문가인 필자가 할 말이 아니므로 패스하지만, 데이터 사이언스 모델링은 필자의 눈에 정말 0과 1의 게임이다. “돈을 싸게하겠다고 0의 결과물을 얻을래, 아니면 돈 좀 쓰고 1의 결과물을 얻을래”의 게임이라는 뜻이다. 마치 썩은 대들보를 100만원주고 살래, 30년은 끄떡없을 고급 대들보를 500만원주고 살래라는 질문을 받았을 때, 요즘 Data Science 적용해 보겠다는 시장 상황이 내일모래 썩어 부스러질지도 모르는 썩은 대들보를 고르는 모습같아 보인다. 조금씩 배워서 실력을 올리겠다는 관점이 이해가 안 되는건 아니지만, 금융권에서 검증 안 된 어설픈 모델 쓰는거 본 적 있나? 0하나만 빼거나 더해도 회사 망할지도 모르는데?

건물도 설계도가 잘못되었으면 보수 하자 공사가 아니라 새로 지어야한다. 위에 언급했던 그 회사는 어설픈 Data Scientist가 DB 설계를 이끌고나면 데이터 모델링을 다시해야하는 것은 차치하고, 나중에 DB를 처음부터 다시 만들어야할 수도 있다. 회사들이 DB 새로 엎는다는 소리들 자주 들어보지 않았나? 다시 만들어야한다는 이야기 해 준 곳 참 많은데, 개발자들 표정 썩어들어가더라. 완성된 건물에서 썩은 대들보 빼고 새 대들보 넣는데 집 형태는 그대로 유지하면서 작업하려면 얼마나 힘들까?

 

나가며 – 진짜 Data Science

학부 동기 중에 계량경제학은 커녕 선수과목이었던 경제 통계도 겨우 낙제점을 면하고 졸업한 녀석이 있다. 매번 자기가 통계학과보다 “데이터를 잘 본다”고 주장하는데, 미안하지만 필자의 눈에 그 친구는 딱 경영학과 수준으로 데이터 “분석”이라는 걸 바라보고 있다. 매출액 그래프 그려놓고, “남들은 매출액만 보는데 나는 마진율도 보면서 무조건 외형 성장이 좋은게 아니라는 걸 증명했다, DuPont analysis로 마진율이 나빠진 원인이 무엇인지 구체적으로 분석해볼 수 있었다”고 주장하던 경영학과 친구들 수준.

빅데이터 모델링이라는건 그렇게 데이터를 “잘 본다”와는 그닥 큰 관련이 없다. 이 동네는 수학과 통계학을 이용해서 모델링을 하는 동네니까.

수학 & 통계학 기반이 아니라 직관 기반의 Data Analyst가 Data Scientist 업무를 하는 건 불가능하다. 수학 공부 안 한 경영학과는 수학 쓰는 Hard Science 전공 박사 학위에 Admission을 받을 수가 없다. (반대의 경우는 매우 자주 일어난다.) 제발 좀 Data Analyst 팀한테 Data Science 강의해주면 우리회사 Data Science 역량이 비약적으로 올라가는거 아니냐고 묻지 말아주셨으면 좋겠다. 그런 질문하지 마시고, 데이터 모델링 할 줄 아는 Quantitative 대학원 출신 뽑거나, 실력있는 외주 컨설팅 업체 부르시는게 어떨까?

Teaching position에 있다보면 친구들끼리 모임에서 내 수업에 진짜 똑똑한 학생 있다는 이야기를 하는 경우는 거의 없고 (애시당초 그런 학생이 잘 없다 ㅋㅋ), 대부분은 “내 수업에서 이렇게 깝깝한 질문 받았음ㅋㅋ” 이라는 불평을 토로하는 경우가 많다. 보스턴에서 박사 시절, 학부나 MBA 학생들용 수업 TA로 들어가면, 정말 충격적인 질문을 많이 받았는데, 고교 수준의 등비급수를 몰라서 이해를 못하는 학생, 등비 급수 푸는 법을 알려주고 변수 문자를 r에서 x로 바꾸면 처음보는 것 같은 표정을 짓던 학생 등등 저래놓고 MBA 졸업했다고 자랑질하고 다니겠지… 라는 생각이 들만큼 퐝당한 학생들이 정말 많았다. (그런 친구들 때문에 백인 애들이 수학 못한다는 편견이 생기긴 한다.)

제일 기억에 남는 사건은, MBA 학생 중 하나가 Finance concentration을 고르고 나니 정말 삶이 너무 힘들어졌다, Marketing concentration할 껄이라면서 후회하는걸 엘리베이터 안에서 얼핏 들은 적이 있었는데, 정작 그 MBA 학생이 들었던 수업들은 경영학과 학부 2-3학년 수준의 재무관리보다도 쉬운 수업이었다. 그 과목 시험 채점하면서 Partial credit을 도대체 어디에서 어떻게 줘야할지 모르겠다고 교수님께 불평했더니, “그래서 내가 TA가 필요한거지 ㅋㅋㅋ 그냥 적당히 잘 줘~ 그래야 Complaint 안 들어오지.”라는 조언을 들은 적도 있다. (이게 MBA의 현실이다.)

데이터 사이언스 수업을 하면서도 물론 당황스러운 질문을 받는 경우가 꽤 있지만, 그래도 수학, 통계학 못하면 오지마라는 공포 마케팅(?)에도 제 발로 찾아오신 분들이라 그런지, 굉장히 수준이 높다는 느낌을 받는 경우도 있다. (가끔은 학부만 졸업하고도 수준 높은 질문을 하는 사람들이 있는데, 나는 왜 학부 시절에 저렇게 공부 안 하고 놀았을까 부끄러워지는 경우도 은근히 있다.)

며칠 전엔, 한 달 수업 듣고 정말 열심히 고민하고 또 고민했다는 흔적이 잔뜩 묻어나는 질문 메일을 하나 받았는데, 수강생 분의 동의 아래 질문과 답변 몇 개를 공유할까 한다. 이런 내용을 수업에 가르치고 있고, 또 이런 고민을 따라올 수 있는 사람들이 Data Scientist구나는 이해를 할 수 있는 좋은 자료가 될 것 같아 보인다. (질문 보면서 “깝깝한 질문”이라는 생각보다, 요런거 조금만 더 뚫으면 되는데… 같은 아쉬움이 많이 생겼으니 오해마시라.)

참고로 질문자 분은 수학과 출신으로 어느 회사 데이터 관련 업무 하시는 분이라고 하시더라.

 

1. 회귀모델의 진단

Q. 다중 회귀분석 (Multinomial regression)에서는 모델링 과정에서 정규성, 선형성, 등분산성, 이상치 등을 살펴보기 위해서 Plot을 그려보던데, 머신러닝에서 Gradient descent를 할 때는 Regression에서 하던것처럼 잔차에 대한 여러 가정들을 별도로 확인해보지 않아도 되나요?

A. 수업 중 Ensemble을 다루면서 저 질문에 대한 답변을 좀 더 깊이 있게 다룬다. 통계학에서 Regression은 모델링의 결과값이 Error 최소화, 즉 Variance 최소화에 맞춰져 있다. Variance가 크게 나오면 Regression 모델에서 나온 상관계수들이 0이 아니라고 주장하는 p-value 값을 믿을 수가 없기 때문이다. 그런데, Regression을 (특히 Linear regression을) 적용하는 데이터들은 Error의 패턴이 없는 경우, 즉 데이터의 Error에 해당하는 부분이 랜덤으로 생성된 경우다. 머신러닝을 쓰는 이유는 그런 랜덤이 아닌 부분, 패턴이 있는 부분, 특히 패턴이 단순한 선형 관계 (ax+b)가 아닌 부분을 찾아내기 위해서다.

그런 비선형의 복잡한 패턴을 다항식으로 (무식하게?) 찾아내는데는 한계가 있으니까, 머신러닝의 여러가지 방법론들 (SVM, Decision Tree, Neural network 등등)을 활용하는 것이고, Gradient descent는 그런 탐정놀이 게임 중 수학식으로 쉽게 떨어지지 않는 trial-and-error 계산을 하기 위해 디자인된 계산 방법이다. 비선형 함수를 찾아낸다는 말 자체에서 이미 데이터의 non-random을 가정하고 접근하는 것이고, Gradient descent는 계산 비용을 줄이면서 결과값이 최대한 근사치가 나오도록하는 계산법이다보니, 당연히 잔차의 구조에 대한 고민을 안 하게 될 수 밖에 없다.

 

2. 데이터의 정규성 확인

Q. 데이터에 알고리즘을 적용하기 전에 먼저 정규분포를 따르는지 아닌지 확인하기 위해 Histogram과 QQ-plot을 그려봤는데요, t-test 적용에서와 같이 정규성 검정까진 할 필요가 없는 건가요? 중심극한정리에서는 표본이 충분할 때 “표본분포”가 정규분포의 형태를 따른다고 했는데, 우리가 가진 데이터는 표본 하나인 것과 같으니 단순 데이터 셋의 정규성만 확인해도 충분한 것인지 궁금합니다.

A. 우선 몇 가지 사실 관계를 점검해야할 것 같다.

t-test하는데 정규성 검정이라는 것은, 원래 데이터가 (approximately) 정규분포를 따르고 있는지에 대한 확인이다. 원래 데이터가 정규분포가 아니라면 학부 수업 때 배운 t stat말고 다른 계산법이 존재한다. (수학 & 통계학 시간에 Poisson일 경우 어떻게 해야된다고 했는지 노트 참조)

또 중심극한정리 (Central Limit Theorem, CLT)는 표본이 충분하면 분포가 정규분포를 따르는게 아니라, 샘플 추출을 여러번 했을 때, 그 평균값이 정규분포를 따른다는 정리다. 쉽게 예시를 들면, 모집단을 모르고 단순하게 1,000명의 표본집단만 여러번 뽑으면 (ex. 선거 직전 여론 조사), 그 표본집단의 평균값들 (처음엔 평균이 49%, 다음엔 51%, 그 다음엔 48.5% 등등등)이 정규 분포 형태고르게 퍼진다는 뜻이다. (수학적으로는 정규분포에 수렴한다고 표현한다.) 데이터가 많으면 무조건 정규분포에 수렴한다고 잘못 알고 있는 사람들이 많은데 (나도 예전엔….), 그러다보니 Underlying distribution이 포아송 분포인데도 t stat을 무조건 정규분포 기반으로 계산해서 모델 테스트를 엉망으로 하고 있다고 수학 & 통계학 시간에 강조한 바 있다.

일단 위의 1번에서 설명한대로, 데이터(의 에러)가 정규분포를 따른다면 Random 이라는 뜻이니까, 단순한 Linear regression으로 충분한 모델링이 되고, 머신러닝에서 배운 여러 테크닉들은 그런 randomness가 깨질 때만 의미가 있다. 따라서 현재 가진 데이터의 정규성을 확인해보는 것만으로 충분하다.

 

3. lm(), glm() 등의 함수와 caret 패키지 사용의 차이

Q. R 코딩 실습 부분에서 저는 평소 caret 패키지를 사용하지 않았었는데요, lm(), glm(), svm() 드으이 함수를 쓰는 것과, caret 패키지에서 method = ‘lm’, ‘glm’, ‘svm’ 등을 지정하는 것은 계산 방식에서 어떤 차이가 있나요? 앞의 함수들은 Normal equation으로 해를 구하고, caret은 gradient descent 알고리즘을 이용하는 건가요?

A. 우선 Normal equation이 작동하는 유일한 영역은 데이터가 정규분포를 따르고, 그 때 Best Unbiased Estimator인 MLE가 OLS estimator와 똑같을 때 밖에 없다. 이게 통계학 수업 시간에 배우는 내용이다.

위에 나온 glm(), svm() 같은 머신러닝 모델을 간략화해놓은 함수들은 Normal equation을 쓰는게 아니라, glm은 Newton’s method를 이용한 approximation, svm은 Duality를 이용한 Group error minimization 계산을 한다.

두 계산 함수 그룹의 차이는, caret은 R 플랫폼의 함수들을 결합해서 위의 계산을 하도록 만든 패키지고, svm, xgboost등의 외부 패키지들은 외부 플랫폼 (C++, Java 등등)의 계산 모듈을 빌려온다. 왜? 계산 속도 자체만 놓고보면 시스템 자원을 효율적으로 쓰지 못하는 R이 압도적으로 느리니까. 참고로 Python, R등의 언어는 C++, Java가 시스템 자원을 활용하는 방식과는 완전히 다른 설계로 짜여져 있기 때문에, 계산 속도가 현격하게 차이날 수 밖에 없다.

Python에서도 scikit-learn을 쓰면 R의 caret과 똑같은 상황이 벌어질 것이다. 진정한 개발용 언어인 Java, C++이 1초만에 계산하는걸 R이나 Python위에서 Java, C++의 계산 모듈을 빌리면 3-4초로 늘어나고, 그냥 caret, scikit-learn 위에서 돌리면 거의 20초 정도 걸린다는 벤치마크도 있다. 데이터를 처리하고 모델링을 고민할 수 있도록 만들어 놓은 프로그램이니만큼, 복잡한 데이터 구조 (ex. n x k x p x q 행렬)를 처리하는데 초점이 맞춰져 있다보니 정작 계산 속도의 효율성 측면에서는 굉장히 나쁜 플랫폼이 되어버리는 것이다.

 

4. Polynomial regression의 경우의 수

Q. 회귀 직선이 주어진 변수만으로 적합이 안 되어서 Polynomial 형태를 적용하게 될 때, 기존 변수가 n개라면 n(n+1)/2의 경우의 수가 생기게 되잖아요. 그럼 회귀 모델 적용할 때 2차 교호작용까지 고려해서 모델을 만드는게 이런 Polynomial 형태를 고려하는 형태의 예라고 생각해도 될까요? 만약 맞다면, 그래서 2차 교호작용 외 다른 경우의 수도 고려하고 싶다면, 실제로 n(n+1)/2 횟수만큼 변수를 바꿔가며 코딩을 해야하나요?

A. 아니다. (걱정하지 마시라ㅋㅋ)

그런 Polynomial regression을 이것저것 모든 조합으로 다 해보는게 무모한 작업이라는 걸 알고 있기 때문에 svm, decision tree, ensemble, neural network 같은 대체재들이 있는 것이다. Polynomial을 쓴다는 것 자체가 이미 데이터가 선형으로 설명되지 않는다는 이해를 깔고 있고, 데이터가 랜덤이라는 가정을 깨고 들어가는 것이다. Non-linear 패턴을 잡아낸다고 했을 때, 인간이 할 수 있는 가장 단순(무식)한 방법이 Polynomial이고, 이걸 좀 더 수학적으로 세련되게 (학문적으로는 Elegant라고 표현함) 만드는 모델이 바로 여러분들이 열심히 머신러닝 테크닉이라고 배우는 svm, ensemble, neural net 같은 모델들이다.

참고로, 지금도 사회학 계열로 연구하는 분들 중에 통계학을 거의 모르는 분들은 stepwise regression이라고 모든 변수를 다 넣어보고 그 중에 설명력 (R-squared)이 제일 좋은 모델을 “단순하게” 고르는 경우도 있다. (저 분도 박사학위가 있는데, 니가 생각하는거처럼 그렇게 절망적으로 통계학을 모르진 않을꺼야…라고? 연구자 취급 못 받을 사람들 진짜로 많다 ㅋㅋㅋ)

 

5. Variable Importance를 통한 변수의 중요도 판단

Q. Random Forest, Boosting 계열의 모델을 보면 Variable importance에 순위를 잡던데, 그 변수가 중요변수가 아닐수도 있다고 하셨던 부분이 어떤 경우였는지 잘 기억이 안 납니다. 

A. Random Forest를 비롯한 Tree 기반의 모델들에서 중요한 변수들 중에, 한 변수가 Tree 안에 여러번 반복이 되기 때문에 중요한 변수로 나타나는 경우가 있다. Tree 구조를 보면 이해가 되겠지만, 그 변수의 여러 구간 (ex. 3-5, 10-15, 30-37 등등, 연속되지 않은 여러 구간)이 y값에 영향을 주는 경우에 Linear regression에서는 연속된 구간 값을 사용하는 탓에 두 모델간 변수의 중요도가 다르게 나올 여지가 있다. 수업 중에서 Variable Importance plot을 그린 다음, 이걸 Regression 기반 모델들에도 무조건 적용하면 문제가 생길 수 있다고 지적하기도 한다.

 

6. 기타 추가 질문

Q. 우연히 ‘머신러닝 피드백을 이용한 게임 지표 분석’ 이라는 글을 보게 되었는데, 제가 실무적으로 활용하면 도움이 될듯한 내용들이라 꼭 적용해보고 싶은데요, 정확히 어떤 개념을 이용하는 것인지 잘 모르겠습니다.

링크의 글을 읽어보면, Vowpal-wabbit을 통해 손실함수를 계산해서 각 독립 변수들이 종속 변수에 어떻게 영향을 주는지 귀납적으로 추론한다는 방식이고, 여기서 독립 변수마다 계산된 연관성 점수 (Relation score)에 따라 positive, negative를 판단하여 독립 변수들의 영향도? 효과? 등을 파악한다는 것인데 여기서 나오는 연관성 점수가 무엇일까요?

A. 두 가지 경우를 생각해보자.

1번. 위의 5번에서 본 Variable importance를 구하는데, +인 경우와 -인 경우를 구분해서 순위를 다시 잡으면 어떻게 될까? 그 다음 단순하게 몇 %의 기여도만 따지는게 아니라, 기여도가 있는 변수들을 다 모아놓고 -100% ~ +100%로 재조정을 한다면?

2번. Regression에서도 가능할까? 물론이다. 모든 변수를 standardize 해놓고, 각각의 상관계수 값에 따라서 어떤 변수가 더 큰 기여도를 가지는지, 어떤 변수가 마이너스 기여도를 가지는지 구분할 수 있다. 그렇게 상관계수들을 모아놓고 등수를 잡거나, -100% ~ +100%로 재조정을 해도 된다.

실제로 Variable importance를 구하는 과정을 보면, 각각의 변수가 cost function 값이 얼마나 변하도록 만드는지에 따라서 변수의 중요도를 따진다. Regression에서 모든 변수를 같은 구간에서 움직이게 묶은 다음 (i.e. 표준화) 상관계수를 보는 것도 같은 컨셉이다.

저 링크의 글을 보면 Vowpal-wabbit이 무슨 엄청나게 기술(!)력 있는 모델인 것처럼 느껴지는데, 정작 위에서 설명한 단순한 중요도 계산 + 재조정 작업에 불과하다.

“우와~ 이거 완전 대박이네!”, “어캐 베끼지?”

보통 공대생, 특히 수학 (계산말고 수학) 공부 많이 하는 전공자들에게서 흔히 보는 모습인데, 뭔가 새로운 계산만 나오면 “우와~ 이거 완전 대박이네!”, “어캐 베끼지?” 이런 반응을 보이더라. (뭐, 스티브 잡스도 베끼는거 좋아하긴 했다.) 머신러닝에서 Neural network도 그래서 “떴다”고 생각한다. 그러나, 필자 같은 사람들 눈에는 “저거 XYZABCD로 계산했겠네”가 그냥 눈에 보인다. 평소에도 저런 모델링을 하는걸 머리속으로 고민하고 있으니까. 더더군다나 Vowpal-wabbit은 그렇게 수학적으로 Elegant 한 방법도 아니다. 저거 제대로 돌아가게 하려면 보정작업이 엄청나게 많이 필요할 것이다. (직접 적용해보시라.)

 

나가며 – 데이터 사이언스 (진짜) 공부란?

질문이 더 많았는데, 질문자분의 Privacy도 좀 고려해드려야 되겠고, 나머지는 강의와서 들으시라고, (더 솔직하게는 치다가 지쳐서…) 6개의 질문으로 요약정리해 봤다. 질문 내용도 아주 살짝 바꿔썼는데, 자기 글을 고쳐서 기분 좋을 사람 없다는 걸 잘 알기에, 질문자 분의 넓은 아량을 구한다.

마지막 6번 질문을 제외하고 받았던 모든 질문들은 사실 수업 시간에 최소 1번 이상 언급하고 갔던 부분이고, 많은 부분은 여러번 반복 설명을 하게 된다. 보통은 수업 때 했던 이야기를 다시 질문하면 (귀차니즘에) 메일로 상세하게 답장을 하질 않는데, 질문자 분이 뭔가 열심히 노력하고 있는데 (아주 얇은) 벽을 하나 못 뚫은 상태인 것 같아서 큰 맘을 먹고 최대한 상세하게 답변을 해 드렸다.

아마 수업에 오시는 분들 중 석, 박 학위까지 깊이있는 공부를 안 하신 분들 대부분이 위의 질문자 분과 비슷한 수준의 이해도를 갖고 강의장을 떠나게 될 것이다. 한번듣고 쉽게 알 수 있는 내용이 아니니까 ㅋㅋ

“한번 듣고 쉽게 이해할 수 있는 내용은 아니죠.”

학부 3학년 때 계량경제학을 듣는데, 황윤재 교수님이 “한번 듣고 쉽게 이해할 수 있는 내용은 아니죠.”라고 웃으면서 질문을 받아주셨던 기억이 난다. 위의 짧은 질문 & 답변을 보면서, 어느 경제학과 출신 학생 분처럼, 계량 공부 잘 해놨으면 머신러닝이라는거 진짜 쉽구나는 생각을 하신 분도 있을 것이고, 이거 진짜 코딩이랑 완전히 다른 지식이네라고 깜놀(!)하시는 개발자 분도 있을 것이다. 그런 정보 공유 차원에서 수업 내용 중 일부에 해당하는 질문 & 답변을 공개해봤다.

꼭 필자의 수업을 오라고 홍보하는건 절대로 아니고 (모르면 진짜 오지마시라… 가르치기 힘들다ㅠㅠ 특히 무조건 코딩이라고 우기는 꼰대 개발자들…), 굳이 더 속내를 드러내자면 아마 시중에 돌아다니는 대부분의 교재들에서 위의 질문에 대한 제대로된 답변을 못 찾을텐데, 이게 진짜 데이터 사이언스 공부라는 걸 좀 일깨워드리고 싶었다. 그 책들 십중팔구는 개발자들이 여기저기서 코드 따와서 급조한 책이니까. 필자만큼 수학 공부한 사람들이 머신러닝 바라보고 이해한 책을 쓰면 “수포자 입장에서 수학이 너무 어려웠다”는 둥, “다시 고교 정석책을 펴야될 것 같은 압박이 생기네요.”라는 둥의 잘못된 이해에 기반한 비겁한 변명만 들을 가능성이 높기도 하고, 그런 책은 잘 안 팔리기도 할 것이기 때문에 기획하기가 더더욱 힘들지 않을까? 이거 코딩인 줄 알고 있는 개발자들 제발 비겁한 변명 좀 그만했으면 좋겠다 ㅋㅋ

“R이랑 Python 코드 비교하기” 같은 코딩 책 써달라던 어느 출판사 분 생각난다. 데이터 사이언티스트 입장에서 양심의 가책이 느껴지는 코딩(!) 책을 내 이름을 걸고 내고 싶지 않더라.

 

자칭 “데이터 사이언스” 학원 하나가 “강사” 모집 중이라고 메일이 왔었는데 (한 땐 이런 메일 여러번 왔는데, 요즘은 좀 뜸하더만…), “실제 데이터를 기반으로 하는 실무형 프로젝트 참여”를 목적으로 하는 기관이라고, 날더러 “강사”에 “지원”해라고 하더라.

뭐… 내가 왜 “지원”해야되는거지? 당신들이 pabii에 지원하시던가 ㅋㅋㅋ 근데 또 개발자들을 “강사”로 모셔놓고서는 “실무형”이라고 우기는 건 아니겠지? 이론을 (몰라서) 안 가르쳐놓고, 데이터만 넣으면 무조건 실무형이 된다고 우기는 그런 종류의 수업은 아니겠지?

 

실무형 프로젝트 참여

정말 “실무형 프로젝트 참여”에 관심이 있는 분들은 모델링 수업에 오시면 된다. 모델링 수업 수강자들 대상으로 3-4개월짜리 Hackathon(?) 같은 걸 진행해볼까 생각중이다. 적으면 1-2명, 많으면 3-4명이 팀, 주제, 나름의 데이터와 모델 설계를 들고 오시면, 필요한 코멘트를 주고, 3-4개월간 계속해서 지도 편달을 해드릴 생각이다. 향후에 어떻게 진행될지는 모르겠지만, 1년에 2차례 정도 모델링 강좌를 Hackaton과 연계해서 운영할 계획에 있다.

모델링 수업 수강자를 대상으로 하는 이유는 당연히 데이터 사이언스에 대한 기본적인 지식모델링이 어떤 개념인지 잘 이해하신 분들일테니 퀄리티 컨트롤이 되었다고 생각하기 때문이다. 미안한 말이지만, 나도 바쁜 사람이고, 성격이 좋은 편이 못 되어서 불가능에 가까워 보이는 주제를 들고 와 놓고는 날 더러 대신 해달라는 식으로 나오거나, 코멘트를 줬는데 무슨 말인지 못 알아먹는 수강생들을 상대하고 싶진 않다.

참고로 데이터 사이언스 메인 강좌의 수준은 ISLR을 학부 3학년이라고 했을 때, 학부 4학년 ~ 석사 1학년 정도의 내용이고 (물론 수학을 좀 빼긴 했지만), 모델링 강좌는 확실히 석사 1학년 수준인 것 같다. 박사 공부를 해 보신 분들은 다 아시겠지만, 수학과 통계학을 다 알고 있다고 해도 다른 학문에서 쓰이는 용어와 철학이 다 다르니, pre-requisite waiver를 해 드리지 못하는 점을 이해해주시길 바란다. 특히 저 위에 살짝 언급한 시중의 “코딩” 스쿨에서 공부하고 왔으니 waiver 해달라고 하시면 정말 화낸다. (쩝~ 성격 안 좋다니깐)

부담스러워서 못 하겠다고, 저 위에 언급한 학원을 가셔도 되는데, 아마 내 수업을 들어본 분들이면 내가 왜 이렇게 저런 학원들에게 강한 거부감을 갖고 있는지 잘 이해하실 것이라고 본다.

가끔보면 모델링 수업 4개 토픽 중에 “나는 하나에만 관심있는데, 왜 4개를 다 공부해야됨?” 이라고 생각하시는 분들도 있던데, Neural net만 배우고 싶다고 그 앞에 배웠던 모델들 안 배워도 되는 게 아니라는 정도는 데이터 사이언스 메인 강좌에서 다 겪어봤지 않나? 주제를 저 순서로 딱 4개 수업으로만 빼낸데는 다 이유가 있다. 어차피 Stochastic 으로 접근하는 고난이도 머신러닝은 고급 수학 공부를 안 한 사람들에게 가르치기 불가능한 내용이고, 머신러닝 모델을 좀 더 수준 있게 쓰려면 남은 옵션은 Bayesian 밖에 없기 때문이다.

앞으로 2-3년 내에 그냥 머신러닝이 아니라 Bayesian 머신러닝을 할 줄 알아야 된다는 식으로 언론 플레이가 나올텐데, 그걸 배우고 응용하는 기본 모델을 단순 Neural net에서 끝내는게 아니라 Reinforcement learning까지 끌어올려보는 수업이다. 빅데이터가 아닌 데이터로 모델을 만드는건 pabii 수업에서 다룰 내용은 아니고, 빅데이터를 활용하는데 데이터를 Dynamic 하게 쓰는 방법들은 어느정도 정해진 코스가 있다. 교수들이 자기 학문으로 잘 훈련된 학생과 논문 주제를 놓고 토론하는걸 생각해주시면 된다.

주제는 어느쪽이건 상관없다. 당연히 IT쪽, 금융업쪽 데이터는 본 적이 많고, 의료업 데이터도 다뤄본 적이 있다. 어차피 데이터는 데이터일 뿐이다. 수업에서 살아남은 분들이니 어떤 데이터가 빅데이터고, 어떤 데이터를 갖고와야 수업에서 배운 테크닉들을 응용할 수 있을지도 잘 이해하고 있으실테고, 필자가 어떤 강점을 갖고 지도를 해 줄 수 있는 사람인지 잘 알고 있으실 것 같아서 더 자세한 내용은 생략한다.

또, Pre-requisite과 모델링 수업을 들은 시점에 이미 내 수업을 2-3개는 들으신 분들에게 더 이상 수강료를 받을 생각은 없다.

몇 달전에 수업을 듣고 가신 모 대기업 중간관리자 분 한 분께 들은 말인데, 회사원들 입장에서 자기가 참여한 프로젝트가 책으로 출판되면 기업에서 좋은 평가를 받는데 도움이 된다고 하시더라. 여태까지 본인이 묻는 질문을 제대로 답해주는 Data Scientist를 만난 적이 없었는데, 여기와서 명확한 답변을 많이 받고 나니 속이 후련하다면서, 이런 걸 아예 프로젝트 지원하는 수업(?) 같은 걸로 운영해보면 어떨까는 아이디어를 주셨다. 그렇게 운영했던 프로젝트 모아서 책 내고, 책에 이름 올라간 직원들을 위에서 좋게 보게되니 선순환 구조가 아닐까라고 하시던데, 정말 그런가? 국내 대기업을 다녀 본 적이 없어서 잘 모르겠다ㅋ

기업 내부 사정이 있는 주제들이야 PCA로 바꿔버린 데이터나 시뮬레이션 데이터로 대체하면 될 것이고, 너무 민감한 주제는 굳이 책으로 내지 않아도 된다. 책을 내는게 목적이 아니라, 책을 내고 싶어하는 분들께, 실력 있는 분들, 정말 데이터 사이언스를 하실 수 있는 분들이 회사에서 인정 받을 수 있도록 지원해드리겠다는 뜻이다. 이 부분을 지원해드리고 수익금(?)이 생기면 불쌍한 후학들을 위해 기부(?)하면 어떨까? 아님 우리끼리 고기파티해도 되고.

가끔씩 주말에 열던 Excel로 하는 기초 강의, 월말 토요일에 하던 수학 & 통계학 강의를 온라인으로 이전하는 이유가, 저 Hackaton 하면서 주말에 모임하시는거 좀 지원해드리고 싶어서였다.

 


아이디어 주신 박X석 차장님 감사드립니다.

 

출퇴근 시간에 자주 방문하는 Datanami라는 블로그가 있다. 여기 pabii처럼 수준 낮은 블로그가 아니라, 기자가 직접 발로 뛰면서 신기술을 최대한 자세하게 설명하는 블로그라서 항상 기대를 갖고 새 글을 기다리는 곳이다.

지난번에는 Markov Logic Network (MLN)라는 DB 설계 & 처리 구조에 활용되는 컨셉을 설명하는 본 적이 있는데, 처음 저 개념이 나왔던 2006년부터 지금까지 다양한 연구가 이뤄졌고, 실제로 쓰이는 곳도 엄청나게 많아졌다. 저 아래에 소개하는 Apple의 Siri에 적용하는 아이디어, 배터리 활용 최적화, RAM 활용 최적화 등등 다양한 곳에서 저런 개념이 활용되고 있는데, 정작 MLN 이라는 용어를 알고 제대로 이해하는 사람들은 극소수인 것 같아서 필자의 짧은 이해를 공유해보고자 한다.

모델을 이해하기 위해서는 먼저 MLN의 핵심 개념인 Markovian information structure을 이해해야 한다. Markov 라는 수학자가 만든 이 컨셉을 제대로 이해못하는 분들을 위해서 애시당초 Markov process라는게 무슨 뜻이고, 어디에 쓰이는지 최대한 수식 없이 간단히 정리해보겠다. (어찌됐건 필자의 박사 전공에서 쓴 시뮬레이션을 한 마디로 요약 정리하면 Markovian Programming이다.)

 

Markov (information) process

주식 가격을 생각해보자. 오늘 주가가 10,000원인데, 어제 12,000원에서 오늘 10,000원으로 떨어진 경우와, 어제 8,000원이었는데 오늘 10,000원으로 오른 경우를 놓고 볼 때, 상승 모멘텀과 하락 모멘텀이 과연 내일 주가에 어떤 영향을 미칠까? Markov process는 과거 주가의 움직임을 바탕으로 오늘 주가가 x원이 될 때, 이미 내일 얼마가 될지에 대한 모든 정보가 그 x원에 담겨있다는 가정에서 출발한다. 말을 바꾸면, 하락 모멘텀으로 or 상승 모멘텀에 관계없이 오늘 10,000원이 되는 순간, 내일 y원이 될 가능성이 a%, z원이 될 가능성이 b%로 결정된다는 뜻이다. (학문적으로는 History independent라고 표현한다 – 물론 상식적으로 좀 받아들이기 힘든 가정일 수 있는데, 수학 모델링은 이렇게 단순한데서 시작해서 복잡한 걸 집어넣는거다.)

(Source: Wikipedia)

위의 그래프를 보면, 이 전에 Bear market이었건, Bull market이었건 상관없이, 오늘 주식 시장이 Stagnant market이었다면 내일 Bear가 될 확률은 40%, Bull이 될 확률을 2%가 된다. (나머지 58%가 그대로 Stagnant에 머물러 있는 확률이라고 생각하면 된다. 다른 경우의 수가 없으니까.)

참고로 증권사 퀀트들이 파생상품 모델링을 할 때 위의 Markov process에 기반한 Brownian motion (주가 수익률이 정규분포)과 Poisson (주가 수익률이 포아송분포) 을 섞어서 가격을 계산한다. 그리고 MCMC (Markov Chain Monte Carlo) Simulation이라는 건 이런 Markov process로 된 특정 데이터 셋에 나올 수 있는 모든 경우를 다 살펴보는 방식으로 시뮬레이션을 해 보는 걸 말한다. 그렇게 가능한 조합을 다 뽑아내면, 주가가 x원에서 출발해서 1주일 후에 y원이 될 확률이 얼마인지 계산할 수 있다는 개념이다.

물론 주가에 모멘텀이 없다고 가정하는 모델링이 완벽하다고 생각하진 않는다. 실제로 모멘텀이 나타나는 걸 증명한 사례도 많고, 그걸 저런 기본형 모델에 추가하는 작업이 모델 변형의 출발점이라고 생각하면 된다. 필자의 박사 시절 연구 중 한 분야는 기습적인 주가 대폭락을 Poisson 분포로 모형화한 다음, 그 원인이 될 만한 내용이 변하면 Poisson 분포 형태가 어떻게 변하는지, 그 때 금융시장에 어떤 영향을 미치는지를 살펴보는 것이었다.

뭔가 복잡하게 써놨지만, 요지는 간단하다. 랜덤 분포에서 과거 값은 아무 소용없고, 현재 값이 모든 미래의 가능성을 결정한다는 수학 개념이라고 보면 된다. MLN에서 쓰이는 부분은 Bull – Stagnant – Bear market 간 서로 확률적으로 연결된 고리 네트워크로 바꾸고,네트워크를 데이터 처리 작업에 적용했다고 보면 된다. 그런 연결 고리를 만드는게, 특히 확률적인 연결 고리를 만드는게 도대체 어떻게 DB 설계, 데이터 처리에 도움이 되냐고?

 

Markov Logic Networks (MLN)

MLN의 포인트는 확률로 가능성을 구분하는 아이디어를 Network으로 그리고, 그걸 데이터 베이스 Join하는데 적용하는 부분에 있다. 데이터로 XYZ같은 작업을 해야 인공지능이라는게 나온다는 건 이미 다 알고 있을 것이고, 결국 데이터로 내 목적에 맞는 모델링을 하기 위해서는 회사 DB에 있는 데이터 중 일부를 뽑아서 정리를 해야한다. 보통은 DB하나 안에 여러개의 Table이 있고, 내가 원하는 데이터는 몇 개의 Table을 겹치는 작업 (Join)을 해야 뽑아낼 수 있다. (그래서 Data Scientist의 필수 스킬 중 하나가 SQL인 것이다.)

그런데 이런 Join 작업이 사실 굉장히 시간 낭비인 경우가 많다. 데이터 테이블이 커질수록 Join에 시간이 많이 걸리는 것은 당연한 일이고, 메모리 상에서 두 개 이상의 테이블을 모두 불러와 매칭 시켜야되기 때문에 필요한 하드웨어적 계산 비용이 기하급수적으로 증가할 수 밖에 없다.

(Source: Wikipedia)

위의 그림을 보자. D 테이블에 있는 데이터를 이용해서 A-B 그룹과 E-C 그룹을 묶는게 Join 작업의 요지다. 실제 이뤄지는 작업은 A-B, A-D, B-D 이렇게 3개의 연결을 묶어서 A-B-D 를 잇는 대형 테이블을 메모리에 얹은 다음, A-B-D와 E를 잇고, A-B-D-E에서 다시 C를 잇는 작업을 진행한다. 당연하겠지만 이렇게 여러개의 테이블을 묶는 작업을 하면 계산 비용 or 작업 비용이 엄청나게 클 것이다.

좀 더 기발하게 처리할 수 있는 방법은 없을까?

일단 그림에서 A, B, C, D, E를 빼놓고 단순하게 5개의 동일한 동그라미가 연결된 상태라고 생각해보자. Network Theory에서 봤던 걸 떠올리면 된다. 이 때 어느 Node가 더 연결이 강하고, 어느 Node가 더 연결이 약한지는 그 Node에 얹혀있는 가중치 값들로 결정된다. (인스타그램 알고리즘 설명 포스팅 참조)

똑같은 컨셉으로 데이터 테이블을 묶는다고 생각해보자. 어떤 테이블들은 강하게 묶여야할만큼 교차점이 많고, 또 어떤 테이블들은 연결고리가 느슨할 수도 있다. 또 여러개의 테이블들이 같이 묶여야 유의미한 거대 테이블을 만들어 낼 수 있는 경우도 있다. (인스타그램 알고리즘 설명 포스팅에서에서 Shapley value 설명 참조) 새롭게 추가되는 데이터가 있다면 Node간 가중치가 바뀔수도 있고, 심지어는 Node가 새로 추가될 수도 있다.

다시 A, B, C, D, E를 불러들이자. 위의 그림만 놓고보면 왜 단순하게 테이블들을 하나하나 연결하는 작업을 하는지 답답함이 생길 수 밖에 없다. 위에서 보면 D가 가운데에 있고, A-B-D는 서로 묶여 있는 구조가 보이기 때문이다. 저 작업을 하는 기존 시스템은 그런 그림은 없고, 단순하게 A-B, A-D, B-D… 순서로 데이터 테이블들을 연결시켜 나갈 뿐이다. 이런 답답함에 대한 해결책은 바로 “위에서 내려다보는” 구조를 도입하면 된다. 어떻게? 데이터를 단순하게 테이블에 저장시켜놓고 끝나는게 아니라, 테이블 네트워크의 Node와 가중치를 먼저 계산해서 네트워크 구조를 이용한 Join 작업을 실행하면 된다.

말은 쉽지, 실제로 쉽게 적용될 수 있나? 당연히 Network를 먼저 계산해서 완성하는 작업이 더 무거운 계산일 수도 있기 때문에 모든 경우에 적용할 수는 없다. 이런 작업이 실이득이 있는 경우는 당연히 Join 구조가 복잡한 대용량 데이터 밖에 없을 것이다.

 

실무 활용 – Apple’s Siri

어디에 비슷한 아이디어가 적용된 곳이 있을라나 싶어서 검색해보니 Apple의 Siri가 데이터를 처리하는 방식이 딱 위의 MLN이라고 한다. 링크건 글에 자세한 내용을 못 찾아서 Siri의 서비스 구조를 보고 역추적을 해 봤다. 어차피 음성을 처리해서 유사한 파트를 찾아서 매칭하는 작업을 하는 음성인식 챗봇이 모두 LSTM (Long-Short Term Memory)이다. 따라서 특정 시퀀스로 바뀌는 단어의 조합이 다른 조합보다 더 자주 나타난다는 걸 매칭하려는 작업에 가능성의 조합을 모두 다 따질 수는 없으니까, 효율적으로 조합을 따지기 위해서 새로운 단어가 더 입력될 때마다 매칭하는 문장 셋이 들어간 DB의 크기를 팍팍 줄여나가는 작업에 쓰이면 딱 좋겠다 싶었다.

(Source: Apple)

좀 더 쉽게 설명하면, 문맥/현재 작업에 맞춰 전체 DB에 있는 문장 중 일부만 뽑아놓고 “답장 대기 중” 상태로 있다가, 이번 문장에 나오는 단어들을 보고 답장을 위한 Table 결합체 (Join으로 만든 Table)를 작은 크기로 & 빠른 속도로 찾아내는 작업이라고 보면 된다.

Apple의 Siri처럼 실시간으로 수천만명의 유저 로그가 쌓이고 필요한 답장, 답변, 작업의 종류가 다양하다면 이런식으로 확률 게임을 해서 작업을 최대한 효율적으로 진행하는 아이디어는 시스템 속도 향상 + 자원 배분 효율화에 엄청나게 큰 솔루션이 될 수 있다.

같은 아이디어를 배터리 활용 최적화, RAM 관리 최적화에도 그대로 적용할 수 있다. 안드로이드 스마트폰을 쓰는 유저들은 폰 사용 초반에는 버벅거림을 느끼다가, 시간이 지나면서 버벅거림이 사라지는 걸 느낄 것이다. (물론 아주 많은 시간이 지나고나면 재부팅, 초기화를 시켜줘야할만큼 느려지는 건 “쓰레기”가 많이 쌓여서 그런거다 ㅋ) 실제로 유저들의 사용 패턴을 보고 자주 활용하는 앱들을 백그라운드에 그냥 띄워놓는게 아니라, 시스템 자원에 쉽게 로드될 수 있도록 pre-load 상태로 두고 있고, 이런 방식으로 백그라운드에 있는 앱들에게 주는 RAM이나 전력 값을 적절하게 배분할 수 있게 된다. 사용자 입장에서는 간단해보이는 배터리 최적화지만 뒤에서는 이런 수학적인 개념이 활용되고 있는 것이다.

알려진 인공지능이라는게 결국 데이터 매칭 작업이라는 걸 이해하고 나면, 새로운 데이터 관리 방법이 어떤 방식으로 쓰이게 될지 곰곰히 따져보는 것도 그렇게 어려운 일이 아니게 된다.

 

나가며 – 한국 블로거 vs. 실리콘 밸리 블로거

비전문가의 블로그 임에도 Datanami를 즐겨 읽는 이유 중 첫번째로 집필진의 이해도를 꼽는다. 정식 신문사 기자도 아니고 단순 블로거 팀인데 딥러닝이 머신러닝의 여러 테크닉 중 하나라는 인식, 인공지능은 데이터 기반의 자동화라는 인식, 기술 이해를 위한 적절한 수학 지식 등등, 데이터 사이언스 주제로 글을 쓸 수 있는 내공을 단단히 갖추고 있더라. 보통 한국의 여느 신문기사나 블로그를 읽으면 디테일이 틀렸거나, 이해도가 엉망인채 Buzzword만 여러번 나열했다는 느낌을 받는 경우가 많은데, Datanami에서 그런 경험을 하는 경우는 매우 드물다. (필자의 포스팅 중에 한국의 한심한 실태에 대한 지적질이 절반을 넘는게 좋은 예시다.)

처음에는 가까이 지내는 기자 친구들한테 추천해줬던 블로그인데, 다들 뭔말인지 하나도 모르겠다고 다시 한국말로 풀어서 설명해달라고들 불평하는 경우가 잦았다. (실제로는 어설프게나마 한국말 번역 페이지도 있는데 말이다ㅋㅋ 정확하게는 한국말이 아니라 비수학적 용어를 써달라는 뜻이겠지.) 블로그 수준이 높으니 이해를 못하는건 백보 양보해서 받아들일 수 있지만, 그래도 한국에서 관련 기사나 블로그 글을 쓰시는 분들께 간곡하게 부탁드리고 싶다. 그냥 베껴쓰기 하지말고, 제발 좀 이해하고 쓰시라고. 정말 모르겠으면 주변에 잘 아는 사람들한테 물어보고 난 다음에 써주시면 안 될까? 잘 아는 사람들이 그렇게 없나? 영어권의 어느 블로거보다 더 저질의 지식을 가진 한국 메이져 신문사 기자의 글을 보는 것, 그 글에 지인의 이름이 실린 걸 보는 것, 그런 글 내용의 사실 관계를 확인해달라는 요청을 받는 것, 그 정도 수준의 외부 관계자를 만나는 것도 지겹고, 또 괴로운 일이다.

필자의 사업 모델을 한국 VC들에게 이야기하면 뭔 말인지 모르겠다는 표정이거나, “뭔가 될 것 같은데, 뭔 말인지는 잘 모르겠네요. 일단 인공지능 쓰는거죠?”라는 얕은 지식 수준을 스스로 드러내는 경우가 많다. 얼마전에 실리콘 밸리에서 좀 이름있는 VC 한 분과 연락이 닿아 비지니스 모델을 설명했더니, “안드로이드 시스템은 어떻게 뚫는다치고, 그런 메가 데이터용 DB는 어떻게 설계했습니까? 모델링쪽 내공은 이해가 되는데, 그정도 실시간 대용량 데이터 처리하는 DB 셋팅 하실 Data Engineering 실력은 없는 것 같은데요?” 라고 묻더라. 사업 시작하고 지금까지 만난 VC들에게서 받은 가장 날카로운 질문이었다. 내가 이래서 CTO 뽑거든.

한국이어서, 실리콘 밸리여서 수준이 다른걸까? 글쎄… 요즘은 정말 “왜 한국은 2류일까?” 라는 글에서 말했던 한국 비지니스 업계 평균의 지식 수준과 지식을 얻으려는 노력 수준 자체에 대한한 의구심이 더 많아지고 있는 것 같다. 코드나 베껴서 빨리빨리 (Read 대충대충 or 그럴듯하게)만 생각하는 그들에게 무슨…..

데이터 사이언스에 대한 견해를 묻는다는 메일을 하나 받았다. 엉? 견해? 무슨 견해?

(중략) 최근에 데이터 사이언스에 대한 관심이 많아진 공대 학부생입니다. 제가 어떤 데이터를 추출하고 분석하여 새로운 유용한 가치를 주고 싶은데, 데이터 사이언스, 맞는 길이겠죠? 다만 한 사람이 그 과정을 전부 하기는 불가능하다고 합니다. 그래서 데이터 엔지니어, 분석가 (도메인 지식), 그리고 수학, 통계의 박사과정을 밟은 True 데이터 사이언티스트 중 한 가지 테크를 타라는데, True 데이터 사이언티스트는 도메인 지식을 쌓기 어렵나요?

즉, 데이터 사이언티스트가 엔지니어 분석가 둘 다 할 수는 없나요? 저는 선배님이 쓴 글에서 자동차 설계자가 되고 싶습니다. 카카오나 네이버 채용을 보면 데이터 처리의 전과정과 인사이트 도출까지의 역할을 하는 데이터 커리어 직군을 뽑던데, 이는 데이터 엔지니어인가요, 분석가인가요, 데이터 사이언티스트인가요?

또, 어떤 영국 마이크로 소프트 데이터 사이언티스트라고 하는 분의 페이스북 글을 보게 되었는데 상당히 현실적? 비관적? 이었습니다. 간단히 정리하면, 5년 후에는 데이터 사이언티스트의 입지가 좁아질 것이고, 사실 지금도 웬만한 데이터 분석 작업을 해당 분야 내부자가 교육을 조금 받으면 충분히 행할 수 있다고 합니다. 물론 그 분도 문과 학부 개발자 출신이지만 독학을 통해 데이터 사이언티스트가 되었다고 합니다.

데이터 과학, 진입장벽이 이렇게 낮은거 맞나요?

물론 선배님도 그런 교육을 하시고 있지만 제 커리어를 데이터 사이언스 쪽으로 잡고 석사까지 계획하고 있는 저로써는 상당히 불안합니다. 그 분의 페이스북 글들을 보고 저에게 조언을 보내주시면 감사하겠습니다.

데이터 사이언티스트가 되는 법

데이터 사이언티스트가 되는 법2

난 죽어도 데이터 사이언티스트 신입으로 들어가야겠다면

빅데이터에 대한 단상

 

 

분노의 답변

필자도 비슷한 논조의 글을 몇 번 쓴 적이 있다. 데이터 사이언스는 죽었다, 데이터 사이언스 민주화 등의 제목으로 이 시장이 결국은 대단한 스킬셋이 아니라 평범한 지식이 되는 수준이 5년 정도 안에 올 것 같다는 식으로.

그러면서도, Low skilled 포지션들은 자동화 작업으로 빠르게 대체되겠지만, 모델링을 해야하는 자리는 결국 교육받고 똑똑한 인간이 오랫동안 자리를 지킬 것이라는 글을 쓴 적도 있다.

아래의 답변은 그런 글들과 필자의 다른 블로그 글들을 종합한 내용이다.

 

Data Engineer는 DB 개발자, DB Architect라는 포지션으로 예전부터 그 직군에 종사하는 사람들이 많이 있었습니다. 단지 요새 머신러닝 패키지들이 좋은게 많이 나오는데, 그걸 플랫폼에 얹으려고 하다보니 이름이 약간 업그레이드 (?)된 거라고 봅니다.

Data Analyst는 예전부터 Business Intelligence라는 직군이 있었습니다. SQL로 DB에서 데이터 뽑은다음, 그래프 그리고, 자기들 나름대로 결론 도출하고 등등 나름대로 “Intelligence”를 데이터에서 뽑아내는 업무죠. 이 분들도 머신러닝이 뜨니까, 그리고 BI 툴들에 머신러닝 테크닉들이 포함되니까 그걸 응용해보려고 한다는걸 알고 있습니다.

그리고 위의 두 직군은 개발자 커리어와 경영학과 커리어로 구분되어야 한다고 봅니다. SQL이 들어가니 아직도 상당수 회사들이 저 자리를 “전산직”으로 뽑고 있던데, SQL 배우는데 일주일 하드코어 훈련이면 충분하고 (회사들이 그 교육마저도 시키기 싫으니까 아마도…), 그 다음부터는 도메인 지식으로 그래프를 설득력 있게 그리는 업무에요. 다만 위의 두 직군은 Data Science 업무가 아닙니다.

Data Scientist는 모델링하는 작업이에요. 완전히 기술적으로 다른 백그라운드가 필요한 직군입니다. 괜히 수리통계학으로 박사 과정 훈련을 받은 사람들한테만 열려있었던 직군이 아닙니다. 이런 직군도 위의 두 직군과 마찬가지로 예전부터 곳곳에 다른 이름으로 존재해왔습니다. 대표적으로 R&D 담당하는 기관에 가면 연구원이라는 이름의 직업이 있죠. 모든 산업이 다 빅데이터를 갖고 있는게 아니라, 아주 일부 산업만 빅데이터를 갖고 있는 시점에 특정 산업에 있는 연구원만 진정한 Data Scientist 업무를 할 수 있는 건 어찌보면 너무나 당연해 보입니다. 현재 IT 산업과 금융권 일부에만 빅데이터가 있습니다. 당연히 이런 산업에서만 빅데이터를 이용한 머신러닝 최적화 모델링이 제대로 돌아갈 것이고, 그러다보니 Data Scientist라는 이름으로 사람을 뽑는 경우가 제일 많은 동네가 실리콘 밸리가 되는 거겠죠.

아래 말씀주신 카카오나 네이버의 업무들은 전형적인 BI 작업인데, 이름만 데이터 사이언티스트로 달린 것 같습니다. 실리콘밸리가도 그런 경우 많아요. 이름만 그렇게해서 한 단계 높은 교육을 받은 인력을 싸게 쓸려고 하는 거죠. 저도 그런 경우를 겪어봤고, 시장에 넘쳐나는 인재들이 갈 곳이 없어 그런 곳이라도 가야한다는 사실을 알고 있습니다만, 어찌됐건 그건 Data Scientist가 아니라 BI 입니다.

제가 겪은 사람들만 놓고 보면, 박사 학위 없는 대부분의 Data Scientist들이 Data Engineer거나 혹은 Data Analyst였습니다. 당장 Reinforcement Learning 모델 만든다고 했을 때, Bellman Equation을 풀어야 모델에 쓸 식을 만들 수가 있는데, 이거 Value function 푸는 수학이고, 제가 박사 1학년 때 이런 수학을 거시 경제학 문제에 응용하는 공부를 한 적이 있습니다. 2학년 때는 Continuous time으로 파이낸스 문제 푸는데도 같은 테크닉을 그대로 썼네요. 기계항공 전공하는 후배를 보니 박사학위 내내 저랑 똑같이 생긴 식을 머리 싸매고 풀고, 안 되면 시뮬레이션 돌리고 있더군요. 물리학 박사하는 선배들도 그랬구요.

간단한 테크닉만 써서 데이터 가지고 단순한 작업하는건 있는 툴을 활용하면 되니까 진입장벽이 낮다고 생각합니다. 물론 그 정도도 못해서 나가떨어지는 실력없는 사람들이 수없이 많다는 걸 잘 알고 있구요. 그렇게 나가떨어지는 분들은 쫓겨나게 될 것이고, 남아 있는 사람들 대부분에게 지금 제가 강의에서 가르치고 있는 지식은 평균적인 지식이 될 거라고 봅니다. 시장의 수준이 올라가겠죠. 다만, 공부 안 했고, 깜냥없는 사람들이 자기 수준으로만 알고 있는 세계관으로 Data Science라는 직군의 진입 장벽이 낮다고 이야기하는건 그냥 얼굴에 조소를 머금게 할 뿐입니다.

 

좀 옛날 이야기

작년 이맘 때 쯤으로 기억한다. 전에 다니던 회사의 한국 세일즈 분 하나가 공부를 좀 더 해서 데이터 쪽으로 커리어를 전환하면 어떻겠냐고 물으시더라. 그 분이 저 위에 말한 데이터 사이언티스트가 되는 건 수학 공부에 들여야하는 시간을 봤을 때 좀 무리라고 생각했고, 결국 BI 관련 직군을 가셔야하는데, 그냥 SQL로 데이터 뽑아서 그래프 그리는 Back-office 자리만 차지하시기에는 세일즈를 너무 잘 하시는 분이라고 생각했다. 메일로 질문하셨던 분이 보내주신 링크에서 보이는 부정적인 논조가 딱 그 세일즈 분의 고민에 대한 답변과 일치하는 것 같은데, BI라는 직군이 할 일이 사실 고만고만한데, 굳이 잘나가는 세일즈 커리어를 갈아엎어야하는지 잘 모르겠더라.

예전에 대형 보험사 다니던 형이 자기네 회사에 수학, 통계학 학부 전공인 애들 뽑아서 SQL로 데이터 뽑고 그래프 그리는 일 시키는 자리 있는데, 거기 있던 애들이 3년정도 채우고 나면 어디 스타트업으로 “도망”가서 항상 힘들다고 그러셨던 기억이 난다. 그 “도망”가신 분들이 몸 값이 높아져서 연봉을 올려서 이직한 측면도 있겠지만, 똑똑한 애들한테 BI 업무라는 단조로운 일을 시켜놨으니 얼마나 지루하고 따분했을까 싶었다. 필자 역시도 직장 다니던 시절에 BI 업무할 때가 제일 재미없었다. 좀 격한 표현을 쓰면 “바보”들도 알아먹을 수 있도록 최대한 단순화한 “그래프”를 “예쁘게” 그려야하는 작업인데, 모델 만들고 아이디어 증명되는거에서 쾌감을 느끼는 필자 같은 사람에게는 말 그대로 직장에서 시키니까 돈 벌려고 하는 일들이었다.

실리콘 밸리에서 봤던 데이터 팀 사람들을 보면 학벌이나 실력이 모두 부족한데 심지어 세일즈에 적합한 외모와 말빨도 없는 사람들이 BI 시장에 진입하고, 똑똑한 애들이 다 도망가는 동안 장기간 그 자리에 있다가 짬밥으로 “팀장”같은 타이틀을 달고 있었는데, 요즘처럼 똑똑한 인재가 그 시장에 진입해서 물갈이가 되고 난 다음에, upgraded BI 직군은 어떻게 진화하게 될까?

 

나가며

요즘보면 BI 툴들이 경쟁적으로 머신러닝 알고리즘들을 “쉽게” 적용할 수 있도록 버젼 업되었다는 소식이 들려온다. 예전에 필자가 처음 머신러닝 수업 들을 때만해도 Neural net 하나 만들려고 코드를 직접 다 쳤던 걸 생각하면, MXNet, H20, TensorFlow 같은 간략화한 코딩용 패키지가 등장한 것도 모자라, Tableau, Qilk 같은 Data Visualization 툴들에도 그런 기능들이 들어가고 있는 마당이니, 얼마지나지 않아 그런 지식들은 정말 “평균”적인 지식이 되는 시절이 올 것이다. (엑셀로도 할 수 있냐는 요청을 받고 요즘 짜투리 시간을 써서 작업 중이다 ㅋㅋ)

간단한 회귀분석 식이나 상관관계 계산하는 공식보고 “Super complicated equation”이니 “Cool analysis”니 같은 소리하는 사람들이 퇴출될 때까지 한 5년 정도 걸릴 것이고, 그 동안 제대로 교육받은 인재들이 BI 시장에 진입하고 나면, 그 다음은 어떻게 될까? 메일로 질문 주신분의 링크에 걸려있는 글을 쓰신 분은 아마도 BI 업무를 하시는 분인 것 같다. 그리고 그 시장이 5년 정도 지나고나면 닫히거나, 혹은 평균적인 지식이 되어서 평균 연봉으로 돌아간다고 생각하시는 듯.

공감한다.

그렇다고 모델링을 전문으로하는 “True” Data Scientist 업무까지 “평균”이 되기는 좀 힘들 것 같다. 필자도 나름대로 수학 잘한다고 이름난 “놈”이었는데, Value function 이용해서 Bellman equation 푸는 문제들, 그거 조ㄹ라리 참 어렵더라.

지난 9월로 기억한다. 모비 아카데미에서 데이터 사이언스 강의 한 사이클을 끝내던 무렵이었는데, 필자의 강의가 수학&통계학 요구 조건이 무겁고(?), 학생들 중에 준비가 안 된 경우가 많으니, 그 다음 사이클에는 번외 강의로 수학&통계학 수업을 짧게 개설하자고 요청이 왔다. 이런 사소한 걸로 돈을 받는다니… 라는 생각에 망설임이 있었지만, 필자도 영혼이 이탈한 표정인 수강생들을 대상으로 강의하고 싶질 않아, “이런거 모르면 오지마세요”라는 뉘앙스로 짧은 수학&통계학 강의를 개설했다.

한 두번만 하고 접을 생각이었는데, 그 수업을 듣고 본 강의를 찾아오신 어느 경영학과 출신 분이, 데이터 사이언스라는게 뭔지, 왜 통계학이 필요한지, 수학은 어떻게 쓰이는지에 대해서 완전히 새롭게 눈이 뜨였다고 하고, 짧은 수학&통계학 수업을 들으면서 어느 정도 자신감이 붙어서 데이터 사이언스 본 강의도 들을 결심을 하셨다고 하더라. 원래부터 데이터 사이언스 강의를 하는 목적이 “개발자가 하는거 아닌가요?”, “우리 회사 DB 서버도 크고, 데이터도 많아요. 빅데이터 적용하는데 문제 없습니다.”라는 앞 뒤 꽉~~~ 막힌 소리하는 사람들을 좀 교육시키겠다는 목적이었으니, 그냥 두 개의 셋트 강의를 계속 유지해야겠다고 나름대로 결론을 내렸다.

지난 1월 강의가 수학&통계학을 먼저하고, 그 다음주부터 데이터 사이언스 본 강의를 진행하는 첫번째 케이스였는데, 지난 주말에 종강하고 뒷풀이에서 들은 이야기를 종합하면, 아래의 몇 가지 측면에서 꽤나 적절한 조합이 아니었나 싶다.

 

1. 데이터 사이언스에 대한 두려움 극복 or 자신의 한계 확인

수학&통계학 수업이 끝나고, 4명의 수강생이 데이터 사이언스 본 강의에 수강신청을 취소했고, 7명이 추가로 신청했다. 솔직히 말하면 수강 취소하신 4명이 수업에서 못 살아남을 것 같아서 미리 포기하시라고 말씀드리고 싶었었는데, 그래도 스펙만 보고 사람을 판단하면 안 된다는 생각에 그 분들이 의사결정을 하실 때까지 가만히 기다렸다. 다행스럽게도 짧았던 수학&통계학 수업이 적절한 가늠자가 되었는지 그 다음주에 바로 수강 취소 연락을 주시더라. 공부라는건, 특히 수학이 들어가는 공부라는건 정말 힘든 공부다. 본인의 한계가 명확하게 느껴지는 강의를 제공할 수 있어서 다행이라고 생각했고, 그 분들이 적절한 판단을 하셔서 되려 뿌듯한 감정도 있었다.

수학&통계학이 끝나고 새롭게 신청하신 7명에게 들은 뒷 이야기를 보면, 대체로 저 위에 언급했던 그 경영학과 출신 분의 생각과 비슷비슷하다. 데이터 사이언스라는게 개발자들의 코딩이 아니라, 통계학의 패턴 인식이라는걸 어느정도 인지할 수 있었고, 코드만치는 수업, 수학 몰라도 된다는 수업을 찾아갈게 아니라, 이런 수업을 들어야 제대로 배우겠구나는 판단이 섰다고 하시더라. 다룬 내용이 자연계열 1-2학년에 배우는 선형대수, 미분방정식, 회귀분석 정도였던 덕분에 자연대, 공대, 경제학과 고학년 정도면 충분히 따라올 수 있다는 자신감도 가지게 되었다는 말씀도 있었다.

 

2. 수업 구성 변화

지난 9월 강의에 어느 수강생 분이 SVM 설명하는 부분에서 구체적인 증명이 없으니 제대로 이해하고 넘어간 건지 잘 모르겠다는 말씀을 하셨다. 일반인을 대상으로한 강의에 수학적인 증명을 넣기는 너무 힘든 부분이 있어서 개념만 짚고 넘어가던 시절 이었는데, SVM이 그렇게 간단하게 개념 위주로 볼만한 내용이 아님을 더 잘 아는 입장에서 너무 강의를 가볍게 만들고 있는 건 아닌가하는 자책감을 느낀 순간이었다.

사실 학부 2학년 때 경제수학에서 배웠던 Constrained optimization만 이해하면 좀 더 깊게 설명할 수 있는 내용인데, Constrained optimization을 SVM 중간에 설명하기도 좀 그랬고, 그렇다고 Lagrangian을 푸는 내용 전체를 다 언급하려니 수업의 밀도가 흩어질 것 같아서 이래저래 깝깝했던게 사실이다.

수학&통계학 수업에 그런 내용들을 따로 빼낸 구성을 해 놓고 나니, 본 수업이 훨씬 더 유기적으로 구성되었다는 느낌이 들었다. 실제로 수업 시간에 부가적으로 전달한 내용도 많았고, 작년 12월 강좌와 올 1월 강좌를 두번 수강한 분들도 같은 의견을 주시더라.

 

3. 수강생 필터링

“이런거 모르면 오지마세요.”라는 뉘앙스는 사실 돈 벌려는 사람이 절대로 하지 말아야되는 어투다. 그러니까 데이터 사이언스 수업들을 인터넷에 뒤져보면 “수학을 몰라도 상관없다” 라는 말이 꼭 들어가는 광고 문구가 곳곳에 배치되어 있는 거겠지.

필자의 강의는 그런 수업들과 꽤나 상반된 목적을 갖고 운영된다. 당장 큰 돈을 벌려고 하는 강의도 아니고, 어느 정도 준비된 분들이 강의 하나를 듣고 좀 혼자 소화하는 과정을 거쳐서 “진짜” 데이터 사이언티스트가 되기를 원해서 꾸려나가는 강의다. 당연히 수학&통계학 모르는 사람이 오면 무슨 말인지 하나도 모르는 상태에서 시간만 날리게 된다.

수학&통계학이 추가로 개설되어 있으니 도대체 왜 수학이 필요한지에 대해서 어느 정도는 이해하고 오신 분들이 많고, 최소한 마음가짐이라도 수학적인 도전이 있는 수업을 감당하실 수 있는 분들 위주로 수업이 구성되었던 것 같다.

 

4. 수업 집중도 향상

박사 졸업생들이 가장 꿈꾸는 직장은 좋은 학교 교수로 임용되고, 열심히 연구해서 좋은 논문을 내는 것이다. 물론 그런 자리는 한정되어 있기 때문에 좀 덜 좋은 학교로 가더라도 연구 환경만 잘 갖춰주기를 요구하는 걸 많이 보는데, 필자는 가르치는 학생이 필자의 기대 수준을 못 맞춰주는 학교는 연구 환경이나 생활 기반 시설과 관계없이 무조건 안 좋은 학교라고 생각했다.

이번 사이클에 필터링된 수강생 분들이 오신 덕분인지, 필자의 수업에 임하는 태도가 매우 적극적으로 바뀌더라. 영혼이 이탈한 표정을 짓는 분들 앞에서 하는 강의는 서 있는 것만으로도 고역인데, 반대로 “어디서 배우기 힘든 귀한 지식임을 알기에 더 노력해서 허투루 사용하지 않겠습니다”는 눈빛을 가진 분들 앞에서는 오래전에 까먹었던 내용도 다시 생각이 나더라.

인간은 참 환경에 많은 영향을 받는 동물이다 ㅋㅋ

 

나가며

산업공학과 대학원 진학을 고민하던 수강생 한 분이 아래의 메일을 보내주셨다.

안녕하세요. 1월 수강생 XXX입니다.

패스트캠퍼스 강의를 수강하려다 마지막으로 한 번 더 데이터사이언스 강의를 찾아보자 하여 우연히 파비 블로그를 찾게 되었고 수강하게 되었습니다.

그 때 그 짧은 순간이 정말 운이 좋았다고 생각합니다…

저 나름대로 대학원 진학을 결정하는 것이 쉽지 않았는데 수업을 들으며 ‘모델들이 어떤 아이디어로 만들어졌는가’, ‘어떤 것을 공부해나가야 하는가’와 같은 것들에 대해 잘 전달해주셔서 의사결정을 하는데 도움이 많이 되었습니다.

당장 산업의 일꾼이 되셔야할 분을 괜히 대학원으로 이끈게 아닌가는 핀잔을 들을지도 모르겠지만, 최소한 필자의 의도, 더 근본적으로는 데이터 사이언스란 무엇인가에 대한 정확한 관점을 갖고 나가는 수강생이 있는 것 같아서 은근히 뿌듯했다.

메일에 언급하신 다른 교육 기관에 대한 직접적인 불만은 없지만, 그들의 가격 정책과 데이터 사이언스 과정 홍보 내용에 대한 반감으로 시작한 강의이니만큼, 한 분이라도 더 제대로 된 데이터 사이언스를 배워나가셨으면 좋겠다. 그 동안 홍보 한 번 제대로 안 했는데, 윗 메일을 보내주신 분들 같은 분을 위해서라도 어쩌면 홍보를 하는게 더 맞지 않을까는 생각도 든다.

(퀄리티로 승부하는 시장에서는 광고가 필수적이라는 모델까지 증명해놓고, 정작 퀄리티로 승부하고 있으면서 홍보는 하나도 안 하고 있으니….)

데이터 사이언스 강의 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 같은 대중적인 오픈 소스 언어로 실행해보는 온라인 플랫폼을 만들어 볼까 한다. (귀차니즘을 이겨낸다면…) 두번째 수업은 지적인 도전의 비중은 낮으니 오프라인 수업을 들을 필요는 없어보이고, 손을 많이 쓰면서 몸에 숙달을 시키는 작업 위주로해서 대학교 갓 졸업하는 학생들이 지금보다 더 퀄리티 있는 포트폴리오를 만들 수 있도록 돕고 싶다. 학생들의 수준이 높아져야 시장 수준도 높아지고 업계도 발전할 것 아니겠나?