장기적인 데이터 사이언스 로드맵
이 글은 원문 A long-term Data Science roadmap which WON’T help you become an expert in only several months by Andrew Lukyanenko 을 저자의 동의하에 번역한 글입니다. 흔쾌히 번역에 동의해 주신 저자 Andrew Lukyanenko 님께 감사의 말씀을 드립니다.
어떻게 데이터 사이언티스트가 될 수 있나요? 어떤 수업을 들어야 하나요? 얼마나 걸릴까요? 어떻게 데이터 사이언티스트가 되셨나요? 비슷한 질문을 하도 많이 받아서, 미래의 데이터 사이언티스트를 위해 이 글을 쓰기로 했다.
About Me
필자는 모스크바 국립 대학교에서 경제학 석사 졸업 후 ERP-system Implementation Sphere에서 약 4년간 분석가이자 컨설턴트로 일했다. 클라이언트와 소통하여 그들의 니즈를 알아내고, 문서 작성, 개발자들에게 직무 설명, 결과 확인, 프로젝트 정리 등의 다양한 일들을 담당했다.
하지만 스트레스가 심한 일이었다. 여러 문제점도 많았지만, 무엇보다 하는 일을 즐기고 좋아하지 않았다. 데이터를 다루는 것은 좋아했지만, 대부분의 업무는 그다지 흥미롭지 않았다. 그래서 몇 달 동안 다른 일을 찾기 시작했다. 린 식스 시그마(Lean Six Sigma)에서 그린벨트(Green Belt)를 받았음에도 불구하고 마땅한 기회가 없었다. 그러던 도중 빅 데이터(Big Data)에 대해 알게 되었고, 몇 주간 구글링과 수십 개의 블로그를 읽은 후 내가 꿈꾸던 직업이라는 것을 깨달았다.
퇴사 8개월 뒤 은행에서 데이터 사이언티스트로 일을 하게 되었다. 그 후 여러 회사에서 일을 했지만, 데이터 사이언스에는 여전히 관심이 많다. 머신 러닝과 딥 러닝 관련 수업들을 듣고, 챗봇(chat-bot) 이나 숫자 인식기 앱(digit recognizer app)과 같은 프로젝트도 만들었다. 또한 다양한 머신 러닝 대회와 활동에 참여하고, 캐글(Kaggle)에서 세 개의 실버 메달도 획득했다. 데이터 사이언스 공부 경험도 꽤 있고, 데이터 사이언티스트로 일 한 적도 있다. 물론 아직 배워야 하는 지식과 스킬은 넘쳐난다.
Disclaimer
이 글은 순전히 개인적인 의견을 담았기 때문에 다른 의견이 틀렸다고 주장하는 것이 절대 아니다. 다만 데이터 사이언티스트가 되려면 누구든지 엄청난 시간과 노력을 쏟아야 한다. 몇몇 수업들은 단시간 안에 머신 러닝, 딥 러닝, 데이터 사이언스에 전문가가 될 수 있다고 말하지만, 그것은 사실 불가능하다. 몇 주, 몇 달 안에 웬만한 지식과 스킬을 얻을 수는 있지만, 반드시 수업에서 요구하는 것 외에 추가로 연습 및 노력해야 한다.
내적 동기부여도 필요하지만, 더 중요하게는 규율(discipline)이 필요하다. 이 규율은 초기의 동기부여가 사라졌을 때도 계속 일할 수 있게 도와줄 것이다.
반복해서 말하지만 스스로, 자발적으로 해야 한다. 혼자 몇 분 동안 생각해보거나 구글이나 스택오버플로우(StackOverflow)에 검색해보지도 않고, 기본적인 질문을 바로 물어본다면 절대로 전문가를 따라잡을 수 없다. 필자가 수강했던 거의 모든 수업에서도 약 10~20%의 사람들만 끝까지 완주했고, 중간에 포기한 사람들은 대부분 데이터 사이언스에 올인하지 않거나 인내력이 없는 사람들이었다.
Who is a Data Scientist?
데이터 사이언티스트가 가져야 하는 주요 지식을 보여주는 좋은 자료가 많지만, 이 글에서는 위 사진을 참고하도록 하겠다. 수학 & 통계(Math & Stats), 프로그래밍 & 데브옵스(Programming & Devops), 기술지식(Domain knowledge), 그리고 소프트 스킬(Soft skills)이 필요하다고 나와 있다.
굉장히 많은데 어떻게 이 내용을 전부 알 수 있을까? 당연히 시간 투자가 상당히 필요할 것이다. 좋은 소식은, 전부 알아야 할 필요는 없다.
2018년 10월 21일, 얀덱스(Yandex)에서 흥미로운 강연 내용이 있었다. 바로 앞서 말한 기술들을 다양한 전문가들이 각각 다른 조합으로 가지고 있다는 점이다.
위 사진을 한번 참고하자면 Domain, Math, 그리고 Dev까지 세 분야가 꼭짓점인 삼각형들이 그러져있다. 우리가 상상하는 데이터 사이언티스트는 세 분야에 모두 능숙하다는 의미에서 삼각형의 중앙에 있다. 그런데 사실 실제 데이터 사이언티스트는 특정 분야에 더 많은 지식이 있을 수 있기 때문에, 삼각형 위 아무 데나 위치할 수 있다.
Switching careers? This means you already have something!
많은 사람들은 커리어 전환이 굉장히 어렵다고 말한다. 틀린 얘기는 아니지만, 바꿀 수 있는 커리어가 있다는 것은 이미 위 세 분야 중 하나에 지식이 있다는 얘기와도 같다. 프로그래밍과 데브옵스에 경험이 있을 수도 있고, 수학이나 통계 관련 직종에서 일했을 수도 있다. 아니면 매일매일 본인의 소프트 스킬을 발전해 나아갔을 수도 있다. 모두 최소한으로 본인 직무의 분야에는 전문 지식이 있으니, 자신 있는 부분에서 시작해서 펼쳐나가면 좋은 시작일 것이다.
Roadmap from Reddit
첫 로드맵은 레딧(Reddit)의 포스트에서 가져왔다:
먼저 Hastie, Tibshirani(스탠포드 대학교의 교수가 쓴 The Elements of Statistical Learning), 뭐든지 읽어라. 챕터 1–4와 7–8까지. 이해가 되지 않는다면, 이해가 될 때까지 반복해서 읽어라.
궁금하다면 책의 나머지도 읽어도 된다. 중요한 내용이기 때문에 한 번쯤은 읽는 걸 추천하지만, 이미 알고 있는 내용이라고 생각된다.
Coursera에서 Andrew Ng의 수업을 들어라. 모든 연습 문제들을 Python과 R을 사용해서 풀고, 오답이 없는지 확인하는 것도 잊으면 안 된다.
이제, 앞서 배운 내용을 전부 잊고 딥 러닝 책을 읽기 시작해라. 리눅스(Linux)에 tensorflow와 pytorch를 적용해보고, 답이 맞을 때까지 연습 문제들을 반복해라. CNN과 RNN, 그리고 NN의 feed forward 과정도 경험해라.
다 했다면 arXiv(코넬대학교에서 운영하는 무료 논문 사이트)에서 유용한 최신 자료들을 읽어라. 몇 달 안에 내용이 빠르게 바뀌기 때문에 꾸준히 읽어야 한다.
자, 이제 취업할 준비가 되었다. 이력서를 더 채워야 한다면 캐글(Kaggle) 대회에 참가해라. 디버깅 질문이 있다면 스택오버플로우(StackOverflow)를 사용해라. 수학 질문이 있다면 더 읽어라. 삶에 대한 질문이 있다면, 나도 답을 모른다.
그리고 해당 포스트의 댓글에서 가져온 내용이다:
이것만으로는 아직 부족하다. 훈련 데이터(training data)가 없는 새로운 문제를 생각해내고 데이터를 어떻게 수집할지 혼자 고민해 내라. 스크레이퍼(scraper)를 만드는 법을 터득하고, 라벨링과 특징값 추출(feature extraction)을 해라. 새로운 데이터가 만들어지면서 모델도 꾸준히 훈련되고 사용될 수 있도록 코드를 짜야 한다.
짧고, 불친절하고, 어렵지만, 이 가이드는 꽤 괜찮은 구성으로 우리를 취업할 수 있는 레벨까지 도와줄 수 있다.
물론 데이터 사이언티스트가 되기 위한 방법은 다양하게 있다. 두 번째 로드맵으로는 완벽하지는 않지만 경험을 바탕으로 만든 필자의 로드맵을 보여주겠다.
My Roadmap
우리를 좋은 데이터 사이언티스트로 레벨업 시켜줄 중요한 스킬이 하나 있다. 아직 그 실력이 없다면 서둘러 연습하고 발전시키는 것을 권한다. 바로 자신의 생각을 명확히 표현하고, 필요한 정보를 찾고, 찾은 정보를 이해하는 능력이다. 간단해 보이지만 실제로는 이 스킬이 없는 사람도 많다. 어떤 사람들은 본인의 생각을 명확하게 전달하지 못하고, 어떤 사람들은 기본적인 질문에 대한 답조차 찾지 못하는 경우도 있다. 구글에 제대로 질문하는 법도 모르는 사람도 있다. 기본적이지만 필수 스킬이기 때문에 더더욱 완벽하게 마스터해야 한다!
- 한 프로그래밍 언어를 선택하고 공부를 시작해라. 보통 Python이나 R일 것이다. 개인적으로 두 언어 중 Python을 더 추천한다. Python과 R 중 어떤 언어가 더 나은지에 대한 주장은 이미 많기 때문에 이유를 전부 나열하지는 않겠지만, 경험상 Python이 더 유용하고 다방면으로 사용이 쉽다고 생각한다. 2–4주 동안 그 언어로 기본적인 것들을 할 수 있을 만큼 배워라. pandas/matplotlib이나 tidyverse/ggplot2와 같이 자주 사용되는 library에 대해 전반적인 이해를 갖춰라.
- Andrew NG의 머신 러닝 수업을 들어라. 오래된 수업이지만 기본적인 베이스를 잘 잡아줄 수 있다. 필수는 아니지만 Python이나 R로 수업 문제들을 풀어보면 도움이 될 것이다.
- 머신러닝에 대한 수업을 더 들어라. R 유저들에게는 Analytics Edge를 추천하고, Python 유저들에게는 mlcourse.ai를 추천한다. 러시아어를 안다면 Coursera의 이 수업도 추천한다. 개인적으로 세 수업 중 mlcourse.ai가 제일 좋은 것 같다. 꽤 좋은 이론과 도전적인 과제로 구성되어있을 뿐더러 수강생들에게 캐글(Kaggle) 대회에 참가하고 개인 프로젝트를 하도록 서포트해주기 때문이다. 이런 수업 방식은 실전에 도움이 많이 된다.
- SQL을 공부해라. 많은 회사들은 데이터를 관계형 데이터베이스(relational database)에 보관하기 때문에 데이터를 엑세스하기 위해서는 select, group by, CTE, joins 및 다양한 SQL command에 익숙해져야 할 것이다.
- 로우 데이터(raw data)로 작업하고, 정리되지 않고 지저분한 데이터 세트에서 시작하면 좋은 경험일 것이다.
- 5번은 필수가 아니지만, 6번은 필수다! 적어도 한두 개의 프로젝트를 스스로 처음부터 끝까지 완성해라. 데이터 세트를 활용해 심층적으로 분석하고 모델링하거나 앱을 만들어보는 것도 좋다. 이 과정을 통해 우리는 아이디어를 떠올리고 구현하는 방법과 데이터를 수집하고 활용하는 방법을 전부 배우며 프로젝트를 완성하는 전체적인 프로세스를 이해하는 것이 중요하다.
- 캐글(Kaggle)에서 커널(kernel)에 대해 배우고 대회에 참가해라.
- 데이터 사이언스 커뮤니티를 가입해라. 나는 러시아의 데이터 사이언티스트가 15,000명 이상 활동하는 ods.ai라는 커뮤니티에 조인했고, 내 데이터 사이언스 여정에도 도움을 주었다. (참고로 이 커뮤니티는 러시아인뿐만 아니라 모두에게 열려있다!)
아직은 시작일 뿐이지만, 위의 로드맵을 따라가거나 비슷하게 해본다면 데이터 사이언티스트의 여정에 좋은 시발점이 되어줄 것이다. 그 후의 여정은 여러분의 선택에 맡기겠다!