데이터 과학자가 갖춰야 할 5가지 스킬셋

데이터 사이언스, 데이터 과학, 데이터 과학자, 머신러닝, 딥러닝, R

주변에서 데이터 사이언티스트가 될려면 어떤 공부를 해야되는지 묻는 경우가 참 많다. 전에 다녔던 크리테오라는 프랑스 리타게팅 광고 회사의 세일즈 팀 사람들은 Data Analyst 와 Data Scientist가 무슨 차이가 있는지 잘 모르고 날 더러 그냥 데이터 팀 사람이라고 불렀고, 그 중 누구는 자기가 데이터 쪽으로 커리어를 전환하고 싶은데, 나더러 Data Scientist가 될려면 어떻게 해야되냐고 묻더라. 개발자 중에서 요즘 머신러닝 공부하고 있는데, 무슨무슨 수업 다 듣고나면 이제 자기는 데이터 사이언티스트 되는거 아니냐고 하는 경우도 있었다. 필자가 심심하면 찾아가는 모 랩탑 브랜드 커뮤니티에는 자기가 Udemy의 Data Analysis 수업을 듣고 있는데, 앞으로 데이터 사이언티스트가 될려면 뭘 더 공부해야되냐고 느닷없이 개인 메세지를 보내시는 분도 있었다.

간단히 정리하면, 그런 질문 하시는 분들 정말, 진짜 너무너무너무 많다.

솔직한 대답을 드리자면, “저도 몰라요.”가 될 것 같다.

필자의 백그라운드는 Economics 학부, Financial Econometrics 석사, 그리고 Financial Math 박사 출신이고, 석사 시절부터 연구 주제 탓에 MCMC Simulation과 Network Theory라는 통계학과 수학의 한 분야를 깊게 공부했었다. 중간에 친구따라 강남가는 꼴로 연구실 근처에 있는 MIT에서 머신러닝 수업 몇 개듣고 이거 내가 알고 있던 Simulation이랑 같은 수리통계학 쓰고 있구나고 이해했던 정도가 전부다. 처음 데이터 사이언스 쪽 직장을 찾던 시절 쓸 수 있었던 프로그래밍 스킬셋이라고 해봐야 R이랑 Matlab이 내세울 수 있는 수준이고, SQL은 정말 기본만 했다. 다른 코딩 언어는 쓸 줄 모르기는 커녕, 별로 들어본 적도 없는 적이 많았다.

회사 가보니 Data Visulization에 필요한 Tableau라는 프로그램을 가르쳐주길래 공들여 배웠고, 데이터 베이스 접근하는 것 때문에 SQL도 Hive 알게되고, 나아가서는 Hadoop 어떻게 쓰는지까지 공부를 하게됐다. 사실 더 깊게 Data Engineer들 쪽 영역에 손을 댔으면 Spark 같은 것도 공부했으면 됐을텐데, 필자의 주 업무가 Data Science였지 Engineering 쪽이 아니어서 크게 관심을 두질 않았고, 솔직히 공부할 시간도 없었다. 당장 Data Science 업무에 쏟을 시간도 부족했었으니까. (개인적인 백그라운드가 더 궁금하신 분은 링크의 제일 하단을 참조)

시장에서 요즘 데이터 사이언티스트를 많이 뽑는데, 정작 사람은 없다보니까 다양한 분야 출신들을 모으고 있고, 그러니까 더더욱 뭐가 Data Science인지 잘 모르는 상태가 지속이 된 것 같다. 그 탓에 배울 지식이 엄청나게 많아보이는 착시효과가 있는데, 이건 꼭 알았으면 좋겠다 싶은 내용들을 한번 정리해보자.

 

1. R or Python

이 두 개의 프로그래밍 언어는 시장의 스탠다드가 되어버렸다. 둘 중 어느쪽이 더 우월하냐고하면 필자도 대답을 못하겠고, 굳이 따지자면 R 쪽이 약간 더 쉬울 것 같기는 하다. 대체로 R은 통계학 출신들이 많이 쓰고, Python은 개발자 출신들이 많이 쓴다. 실제로도 Python for production 이라고 이야기들 하고, R for deep statistical analysis 라고 이야기 한다. Random sampling 같은 조금 깊은 통계 지식을 활용하고 싶으면 Python에는 없는 기능들이 R에 잘 구비되어 있고, 반대로 결과물을 프로그램에 얹으려고하면 Python만한 프로그래밍 언어가 없는 것 같다.

데이터 사이언스에서 R vs. Python으로 무슨 경쟁체제인 것처럼 몰아가는데, 둘이 상호 보완적인 관계라고 하면 더 맞지 않을까?

아뭏튼, 최소한 둘 중 하나는 잘 해야 어디가서 데이터 사이언티스트라고 할 수 있다. 관련해서 더 궁금하신 분은 여기에서부터 글타래를 따라가시면 된다.

 

2. 머신러닝

데이터로 뭘 하는걸 사이언스라고 주장하는 학문 분야가 나오게 된 가장 중요한 두 가지 “혁명”을 꼽으라면 빅데이터머신러닝을 들 수 있다. 굳이 따지자면 빅데이터가 있기 때문에 머신러닝이 의미가 있는 것이기는 하지만, 기술적인 지식이라는 측면에서 빅데이터를 배울 수는 없으니 (데이터를 어떻게 “배우”냐? 데이터를 활용하는 “지식”을 “배워”야지 ㅋㅋ “머신”이 “러닝”하게 양보하자), 당연히 머신러닝이 데이터 사이언스 업무의 필수 스킬셋이 될 수 밖에 없다. (참고, 빅데이터 만드는 백엔드 개발자는 또 다른 종류의 직업이다)

이쪽 업계에서 R이나 Python 같은 프로그래밍 언어가 크게 성공한 가장 중요한 이유가 바로 머신러닝을 실제로 돌려볼 수 있는 몇 안 되는 무료 패키지기 때문이다.

이미 많은 오픈소스 코드들이 돌아다니기 때문에, 코드를 적용한다는 측면에서 난이도는 그렇게 높지 않다. 솔찍말 학부 통계학 + 회귀분석 정도 알고 있으면 따라가는데 아무 문제 없다. 대부분의 경우에 학부 통계학과 회귀분석을 몰라서 문제고, 그 코드들이 작동하는 배경지식이 없어서 문제더라. (강의 초점을 모델 속에 숨겨진 직관직관을 받쳐주는 수학&통계학에 집중하는 것도 같은 이유다.)

학부 때 컴퓨터 사이언스 해야되는거 아니냐고? 아니다. 정말 아니다.

차라리 로봇 공학, 기계, 산업 공학 같은 공대 전공이나, 경제학 같은 전공이 훨씬 더 적합한 전공이다. 이런 전공들도 학부, 석사 시절에 코딩 많이하고, 문제에 대한 접근 방식이 수학 식을 세우고, 그 문제를 풀어나가는 방식이고, 뭔가 잘못 되었을 때는 코드만 쳐다보는게 아니라 수식도 함께 쳐다본다. 굳이 차이가 있다면 수학을 코딩하는 거지, 개발자들처럼 IT 시스템의 일부를 구현하는 코딩을 하지 않는 것일 뿐이다. 머신러닝도 같은 방식으로 수리 통계학 모델링이 들어간 코딩이다.

그럼 학부 때 수학이랑 통계학 엄청 공부했어야되는거 아니냐고? 그냥 학부 1-2학년 수준의 수학 지식에 3학년 정도에 배우는 회귀분석만 알면 된다. 이건 필자의 수업을 들은 이학, 공학, 경제학 “박사 학위자”들의 공통적인 의견이다.

물론 머신러닝에 대해서 깊이 있게 알려면 아래 3번을 보자.

 

3. 수리통계학

개발자들이 하는 가장 큰 착각이 바로 머신러닝은 공학이지 수학이 아니라는 거다. 여기에 필자는 정면으로 반박하고 싶다.

머신러닝은 수학이지 공학이 아니다. 머신러닝 입문자들이 듣는 Coursera의 Andrew Ng 아저씨 수업을 평가한 Quora 글을 보라.

“What most people missed was that they approach machine learning as some kind of programming project, while in reality it is actually more of an applied math project with computational approach, and they really needed to focus on learning the math, which, in this case, is linear algebra.”

머신러닝은 한 단어로 요약하면 응용수학이다. 선형대수학과 회귀분석을 섞고, 발전하다보니 더 고급 수학과 더 고급 통계학을 쓰는 그런 응용수학이다. 필자가 데이터 사이언티스트라고 소개하니 머신러닝을 공학이라고 생각해서 “어, 공대 출신이 아닌데 어떻게 데이터 사이언티스트에요?” 라고 질문하는 벤쳐 캐피탈리스트도 있더라.

정리하면, 확률론 + 선형대수 + 회귀분석이 머신러닝의 근간이고, 이걸 정말 잘하고 싶으면 대학원 수준의 수학과 통계학을 공부해야한다. 수업 왔던 개발자들 일부가 커리어를 접고 대학원으로 방향을 튼 이유도 같은 맥락일 것이다. 그냥 갖다 쓰는 방식의 개발과는 근본적으로 다른 학문이라는 걸 이해했기 때문일 것이고, 데이터 사이언스 영역에서 인정받고 싶다면 수리통계학 깊이가 깊어야한다는 사실을 깨달으셨기 때문일듯.

당장 빅데이터로 작업할려고 전처리할 때 Dimensionality reduction에 쓰이는 PCA나 FA 분석이 어떻게 작동하는지 머신러닝한다는 개발자들에게 물어봐라. 둘 중 어떤 방법을 써야하는지도 모르고, 프로그램에서 디폴트로 되어 있는 PCA만 쓰고 있을 것이다. (애시당초 “그냥 데이터 크기 줄여주는거 아냐?” 수준을 너무 많이 봤다.) PCA는 Total variation을 볼 때, FA는 변수들간 C0-variation을 볼 때 쓰는 테크닉들이다. 이 차이를 몰라서 학계에서 유명한 통계 패키지 하나가 계산을 거꾸로 하던 바람에 1990년대에 쓴 모든 논문을 다시 써야하는 사건들도 발생했다.

왜? variance & co-variance matrix하나 그려놓고, 모든 숫자를 다 쓰는지, off-the-diagonal term만 쓰는지에 따라 연구 결과는 당연히 다르게 나올 수 밖에 없다. 심지어는 자기 논문을 스스로 비판하고 저널에서 내려달라고 하던 연구자도 있을 정도였다.

무슨 말인지 잘 모르겠다고? 근데 이거 사실 자연계열 1, 2학년 선형대수학 수업에서 배운 지식이다. (그리고 필자가 페이X북 Data Scientist 면접볼 때 나왔던 질문이기도 하다.)

 

4. 데이터 시각화 패키지 지식

빅데이터 분석을 해서 결과값을 보여주는데 최적화된 수 많은 툴들이 있다. 당장 R로도 예쁜 그래프들 참 많이 그릴 수 있는데, 필자는 회사 생활하면서 Tableau로 작업하는 걸 배웠다. 좋더라. 비싸서 그렇지. 그리고 가격경쟁력이 좀 더 있는 툴로 Qilk도 써 본적이 있다. 왜 기업들이 Tableau 쓰는지 알겠다는 생각도 들었고, 이것도 참 쓸만하다는 생각도 했다.

사실 R로 작업하기로 맘 먹으면 Java Script로 그래프 만드는 걸 처리해주는 패키지도 있기 때문에, 왠만한 일들은 다 R로 해결할 수 있다. 당장 Sankey, Sunburst 같은 그래프들 한번 그릴려고 시도해봐라. 아마 아직도 R말고 다른 패키지로 저런 복잡한 그래프를 쉽게 Customizing 하기 힘들 것이다.

 

5. Data Modeling 센스

마지막으로 가장 중요한 스킬 셋이다. 위에 4가지 지식은 사실 없으면 배우면 된다. 그런데 Data Modeling 센스 없으면 데이터로 분석을 요하는 그 어떤 종류의 직업도 할 수가 없다. (아마 데이터 서버 관리하는 엔지니어가 이쪽 관련 직군에서 유일한 대안이 아닐까 싶다.)

가장 단순하게는 엑셀로 그래프를 잘 그려서 보는 사람들이 한번에 쉽게 이해할 수 있도록 해 주는 것도 포함될 것이고, 복잡하게는 어떤 통계 모델로 가설들을 검증할 수 있을지에 대한 아이디어들이 포함된다.

필자가 석사 처음들어가서 논문을 쓸 때였다. 논문 주제로 뭐 하나를 가져갔다가 입이 좀 걸걸한 교수님께 거의 모욕 수준의 평가를 듣고 나왔는데, 지금 생각해보면 그 교수님 그래도 착했다는 생각이 든다. 이런 말도 안 되는거 하지말고 주제 제대로 잡으라고 리스트를 쭈욱 뽑아주셨는데, 그 예시들 보면서 정말 눈물이 찔끔 나더라. 주제라고 뽑아주시는 리스트에 있는 내용들을 어떻게 테스트하는지 다 수업시간에 배웠는데, 실제로 이런 방식의 테스트를 하겠다는 생각을 그전까지 한번도 해 본 적이 없었다.

비싼 돈 내고 공부하러와서 여태까지 답답한 공부만 하고 있었다는 쪽팔림에 속으로 울었다.

그 분수령같은 사건 이후로, 어떤 통계 모델을 써서 테스트해야되겠다는 그림을 머릿속으로 그릴 수 있게 되었으니 그 교수님께 참 감사해야된다 싶다. (물론 그 때 같이 수업 들었던  친구들 대다수가 아직도 그 교수님의 독설에 많은 반감을 갖고 있기는 하다 ㅋㅋ)

다른 글에서 소개한 한국 제약산업의 리베이트 관행에 대한 분석, 스페인 은행들 Network 분석, 나중에 연구지원금 받고 손을 댔던 Systemic externality 논문들 모두가 결국엔 그 날 모욕을 들으면서 얻은 Data Modeling 센스에서 나왔지 않을까 싶다. 필자가 운영하고 있는 강좌 중 가장 어려운 수업이 바로 데이터 사이언스 모델링에 관한 수업이다. 당연하겠지만, 이런 내용을 이해하려면 통계학, 머신러닝 전반에 대한 여러 지식이 필요하고, 수요만큼 공급이 없는 스킬셋이다. 

 

사실 이 중에 3개만 잘 갖추고 있어도 데이터 사이언티스트로 먹고사는데 별 지장없을 것 같기는 하다 ㅋㅋ

X