Practical Advices for Future Data Scientists

전공자에게도 다소 도움은 되겠지만 비전공자를 위한 글이다. 이미 데이터 과학자를 양성하는 커리큘럼/학과 (수학, 통계, 컴공/컴사, 폭을 넓히면 산공, 전자 등)에서 공부하는 재학생이나 졸업생, 또는 그런 학과로 진학을 모색하는 고등학생을 위한 글이 아니란 의미다. 정식으로 데이터 과학 과정을 이수하지 못한 비전공자들, 특히 이미 졸업해서 (동영상 강의 외에) 관련 학과 수업도 듣기 어려운 이들을 위한 글이다. 주변 도움과 조언 없이 데이터 과학자가 되려니 어떻게 준비해야 할지 막막해하는 이들을 위한 주제넘은, 그렇지만 현실적이고 실질적인 조언을 적는다. 다소 무리한 조언일 수도 있지만, 반드시 이루겠다는 의지가 있다면 그리고 조금씩 연습하고 익숙해진다면 전혀 불가능한 미션은 아니다. 단지 시작이 어려울 뿐이다.

종종 페이스북 등으로 질문을 해서 Q&A 형식으로 글을 적은 적이 있었지만, 최근 면접 인터뷰어로 자주 들어가면서 하고자 하는 의지는 있지만 어떻게 (준비) 해야하는지 모르는 지원자들을 보면서 안타깝고 아쉬운 마음이 많이 들어서 대략 정리하기로 했다. 이전 Q&A에서는 질문자의 개인 사정에 맞게 나름 답변을 했지만, 이번은 좀 더 일반화해서 적으려 한다. 개인 사정에 맞게 필요한 것은 취하고 아닌 것은 버리면 된다. 그리고 더 구체적인 궁금증은 띠로 요청하면 능력껏 답변할 예정이다. 좀 일반적인 얘기를 적기 때문에 모두에게 똑같이 적용되는 것이 아님을 참고하기 바란다. 한가해서 적는 글은 아니니 다소나마 도움이 됐으면 좋겠다.

아직 대학 진학 전이라면 (서론에서 고등학생을 위한 글이 아니라고 했지만) 자신의 적성/취향에 맞게 수학/통계, 컴공과로 진학하기 바란다. 조금 소프트하게 산업공학을 선택하는 것도 나쁘지 않다. 그리고 현재 비전공 대학생이라면 가능하면 대학원 (석사만이라도)에 진학하길 바란다. 컴공, 산공, 전자과 등에 관련된 연구를 하는 연구실이 여럿 있다. 간혹 화공이나 생명 등에도 관련 연구실이 있기 때문에 학부전공의 연구실로 가는 게 더 편할 수도 있다. (공대생 중에서 데이터 과학에 동떨어진 경우도 비전공자로 간주했다.) 수학과 대학원은 데이터 과학과는 좀 거리가 있는 것 같다. 물론 요즘 트렌드가 많이 바뀌어서 응용분야에 강점을 둔 수학과 및 교수님이 계실 테니 잘 알아보기 바란다. 전공자도 대학원 선택할 때 특정 분야의 관련 대학원으로 진학할지 아니면 더 일반적인 데이터 및 알고리즘을 다루는 곳으로 진학할지 신중하기 바란다. 최근 면접 본 사람은 오히려 특수 분야로 진학한 것이 — 미래에 전혀 도움이 되지 않는다는 얘기는 아니지만 단기적으로 봤을 때 — 경력에 구멍처럼 보였다.

 

책 한 권을 정해서 완독해라. 

요즘은 정보와 지식을 파편적으로 습득하는 경향이 있다. 새로운 기술이나 알고리즘이 나오면 이를 잘 설명하는 블로그 포스팅이나 유튜브 동영상이 바로 올라온다. 그러면 사람들은 그 포스팅만으로 그 기술을 마치 다 알고 있는 것처럼 생각/행동한다. 하지만 가볍고 때론 지나치게 실용적으로 다룬 블로그나 유튜브를 통한 학습은 체계적으로 지식을 내재화하는데 한계가 있다. 그나마 해당/관련 논문이라도 읽어본다면 다행이지만, 비전공자들이 처음부터 논문을 읽는 게 편한 일이 아니다. 그러니 더더욱 블로그나 동영상에 의존하는 것 같다. 그런데 지식을 체계화하려면 전체를 조망할 필요가 있다. 그렇기에 시작하는 단계라면 이 분야의 책 한 권을 정해서 완독 하기를 권한다. 가능하면 원서를 읽기 바란다. 단편적인 부분을 빠르게 확인하기 위해 한글로 된 포스팅을 참조할 수도 있지만, 장기적으로 봤을 때 대부분의 참고자료는 영어로 적혀있기에 미리 영어 (표현)에 익숙해지는 게 좋다. 책은 두껍고 또 최신 기술에 대한 설명이 없어서 읽기가 싫은 면도 있다. 그냥 최신 논문들과 포스팅만으로 해결하면 될 것 같다. 하지만 책은 저자의 지식과 경험을 바탕으로 그 분야를 나름 체계적으로 재구성해놓았다. 궁극에는 자신만의 지식 체계를 갖춰야겠지만, 시작 단계에서는 다른 누군가가 만들어둔 지식 체계에 의존해서 그 분야를 접하는 것이 나쁘지 않다. 대학원 시절, 친한 교수님이 최신 논문만 읽지 말고 책도 함께 읽으라는 조언을 하셨는데, 그 이유를 알 것 같다.** 한 권을 완벽하게 이해할 필요는 없다. 밑줄 그어가며 개념 하나, 단어 하나를 익히려고 수고하지 말라는 얘기다. 그냥 처음부터 끝까지 소설책을 읽듯이 알면 아는 거고 모르면 모르는 대로 완독 하라는 얘기다. (물론 중요한 또는 반복 등장하는 개념이라면 따로 시간을 내서 자세히 찾아볼 필요는 있다.) 그렇게 한 권을 완독 했다면 가급적 다른 저자의 책도 한두 권 더 읽어보면 좋다. 저자마다 공통/다른 관점 (지식 체계)를 비교하면서 자신의 지식을 구축할 수 있다. 이렇게 책을 통한 기초 쌓기를 하고, 부족한 부분이나 최신 트렌드는 관련 논문과 뉴스를 읽으면서 지식에 살을 붙인다.

** 당시에는 큰 도움이 되는 조언은 아니었다. 이미 상당히 많은 양의 논문을 읽고 있었고 나름대로 지식 체계를 갖춘 상태였다. 하지만 그때의 지식은 불완전했었고, 이후에 새로운 지식과 경험을 쌓으면서 계속 업데이트해가고 있다. 빈도는 줄었지만 새로운 통찰을 얻는 경험을 하고 그러면서 또 기존의 지식의 틀을 꾸준히 바꾸고 있다. 처음부터 견고한 틀 위헤서 체계적으로 지식을 쌓았더라면 어땠을까라며 아쉬울 때도 있다.

 

논문을 꾸준히 읽어라. 

매일 한 편 이상씩 읽으면 좋겠지만 사실 불가능에 가깝다. 본인도 때론 하루에 여러 편 읽는 경우도 있지만 그건 아주 특별한 경우, 즉 어떤 당면한 문제를 해결해야하는 경우에만 그렇다. 비전공자라면 일주일에 한 편씩은 읽는다는 생각으로 꾸준히 읽기를 권한다. 처음 2~3달 동안은 어려울 수도 있다. 하지만 익숙해지면 논문 읽기가 쉬워진다. 이미 전에 읽었던 내용이 있기 때문에 새로운 논문에서는 다른 부분만 빠르게 잡아내면 된다. 그렇게 꾸준히 논문을 읽어 가다 보면 (앞서 말한 책 읽기와 더해져서) 그 분야의 맥을 잡을 수 있고, 지식을 내재화할 수 있다. 매주 한 편 읽기에 더해서, 종종 유명하거나 최신 기술에 대한 중요/주요 논문은 함께/추가로 읽어나갈 것을 조언한다. 처음에는 정해놓지 말고 손에 잡히는 아무 논문이나 막 읽어라라고도 말하고 싶지만, 일단 이 분야의 이정표가 되는 또는 집대성해놓은 또는 처음에는 읽기 편한 논문부터 읽어나가라. 그리고 읽으면서 더 궁금한 내용을 다룬 레퍼런스에 적힌 논문을 찾아서 읽고, 도움이 되면 그 논문을 적은 저자의 다른/최신 논문도 찾아서 읽으면 된다. 개인적으로 새로운 분야를 접할 때 서베이 논문부터 주로 읽는다. 누군가 정리해둔 전체를 우선 조망해보고 구체적인 기술을 찾아가는 타입이라 그렇다. 본인과 다른 성향의 사람에게 굳이 이 방법을 추천하지는 않는다. 서베이 논문은 너비는 있지만 깊이와 디테일이 부족하다. 때론 그 저자의 지식 (분류) 체계가 완전하지 않을 수도 있고, 그럼에도 그 저자가 정해진 틀 내에서 그 분야를 해석할 우려도 있다 (일종의 지식 선입견). 그렇기 때문에 참조된/관련된 다른 논문들을 많이 읽어서 깊이와 디테일을 더하고 자신의 체계로 그 분야를 재구성하면 좋다. 때론 전혀 다른 분야의 기술과 이종 결합해서 더 다양화하고 내실화하는 것도 필요하다.

** 종류와 경우에 따라 다르지만, 이해하고 적용해야하는 논문이라면 3번 정도 읽는다. 처음에는 그냥 처음부터 끝까지 그냥 읽고, 두 번째는 핵심 기술/아이디어를 이해하려고 깊이 읽고, 세 번째는 (특히 실험 등에 기술한) 디테일을 확인하며 읽는다.

 

직접 구현하고 실험해라.

이렇게 꾸준히 일주일에 한 편 이상의 논문을 읽는데 익숙해졌다면, 이젠 읽은 논문 중에서 중요한 알고리즘을 직접 구현하거나 실제 데이터로 실험해서 결과를 비교해봐라. 모든 논문/알고리즘을 구현하고 실험하면 좋겠지만 한 달에 한 편 정도씩 꾸준히 구현/실험해라. 같은 문제에 대해서 여러 알고리즘을 구현/실험하고 결과를 비교하면 그때 그 지식이 온전히 자신의 것이 된다. (물론 본인은 이 부분(구현)에 참 약하다. 미안) 어떤 알고리즘은 단순히 저자나 제3의 누군가가 만들어서 공개한 오픈소스/라이브러리를 이용해서 돌려보는 것만으로 충분할 수도 있다. 하지만 어떤 것은 가급적 low level에서부터 스스로 구현해보는 것이 필요할 때도 있다. 요즘은 웬만한 것은 오픈소스나 라이브러리로 제공돼서 이런 필요성이 적을 수도 있지만, 그 기술을 온전히 이해하기 위해서 스스로 구현해보는 것보다 나은 방법은 없다. (개인적으론 라이브러리를 활용하는 능력보다 코어를 직접 설계, 변형하는 능력을 좀 더 중히 본다. 본인이 그런 능력을 가졌다는 얘기는 아니다.) 구현 얘기가 나왔으니 추가 조언하자면, 요즘 데이터 과학을 위해서는 그냥 파이썬 (또는 중종 R)에만 익숙하면 대부분 해결된다. 그럼에도 제1 언어 (파이썬)를 마스터했다면 다른 언어 (자바, Go, 스칼라 등)를 하나 정도는 더 익숙해지는 게 좋다. 다른 글에서도 적었지만, 데이터 과학자의 임무가 단순히 주어진 데이터에 알고리즘을 적용해서 실험 결과를 얻는 것이 아닌 경우도 많다. 인력과 인프라를 잘 갖춘 회사/조직에서는 이게 가능하지만, 그렇지 못한 작업 회사에서는 데이터 파이프라인을 구축하는 것부터, 즉 데이터 엔지니어링부터 데이터 과학자의 담당이 될 수도 있다. 분석 언어로서는 파이썬이나 R이면 충분하지만, 그 외의 데이터 생태계를 이해하고 접근하려면 그 이상의/다른 언어의 도움이 필요하다. 프로그래밍 언어에 더해서 빅데이터 관련 오픈소스나 라이브러리에도 익숙할 필요가 있다. 최소한 하둡 (맵리듀스), 하이브(SQL) 등의 기본은 알아야 한다.** 그리고 앞서 직접 구현하거나 실험한 내용은 Git 등에 올려서 코드를 정리하면 그것으로 자신만의 포트폴리오가 된다. 디자이너가 포트폴리오를 만들듯이 개발자/데이터 과학자들도 자신의 만든 코드로 평가받을 수 있다. 비록 현업 경험이 부족하더라도 자신의 강점을 내세우는데 자신이 짠 코드만 한 것이 없다.

** 워낙 쉽게 익힐 수 있는 부분이라 인터뷰이가 이를  모른다고 해서 (개인적으로) 감점을 주진 않는다. 하지만 미리 익혀두면 최소한 면접에서 모른다는 인상을 주는 것보단 낫다.

 

흔히 데이터 과학자에게 필요한 3가지 자질로 수학 (알고리즘) 이해도와 프로그래밍 능력에 더해서 비즈니스/도메인 지식을 든다. 도메인 지식은 현업에 투입된 이후에 자연스레 익혀지는 거라서 크게 신경쓸 필요도 없지만, 역으로 그런 분야로 진출하고 싶다면 미리 최소한의 도메인 지식을 쌓으면 인터뷰 등에서 도움이 된다. (물론 인터뷰에서 관련 질문을 못 받을 수도 있다.) 간혹 회사나 특정 인물을 보고 지원하는 경우도 있는데, 외부에 알려진 허상, 이미지만으로 판단하지 않는 게 좋다. 아니 않아야 한다. 실망은 기대에서 나온다. 나 같은 사이비한테 현혹되지 않기 위해서라도 주변에 편하게 만나서 질문하고 의견을 들을 수 있는 조언자 한두 명을 두는 것도 좋다. 친한 교수님일 수도 있고 선후배일 수도 있고 아니면 옆에 있는 직장 동료일 수도 있다. 인터넷과 소셜미디어의 셀럼들, 입전문가는 조심하고...

일주일에 한편 이상 논문 읽기와 한달에 하나 이상의 구현/실험하기는 진짜 터프한 미션이다. 지금 본인한테 하라고 해도 힘들다. 지금 다른 회사를 다니면서 육아도 해야 하는 경우라면 더 힘들다. (그리고 만약 회사를 다니고 있다면 회사 내에서 데이터 관련 업무를 맡아서 지식과 경험을 쌓거나, 또는 동료 데이터 과학자의 도움을 받으면서 성장하기 바란다.) 처음에는 어렵겠지만 특별히 주변의 다른 도움이 없는 상황이라면 이것보다 더 확실한 방법은 없다고 본다. 예전에는 가용 데이터도 한정적이었는데, 요즘은 캐글 등을 통해서 대용량 데이터도 쉽게 구할 수 있다. 많은 동영상 강의, 특히 유명 대학의 유명한 교수의 강의는 유튜브에 넘쳐난다. 그 어느 때보다 데이터 과학을 (혼자서) 준비하는데 좋은 환경을 갖췄다. 그럼에도 실패한다면 기회가 없어서가 아니라 의지가 없어서다. (문제는 당신이다.)

여러 인터뷰에 들어가면서 느낀 안타까움 때문에 주제 넘은 글을 적었다. 주변의 누군가가 조금만 도와줬더라도 괜찮은 데이터 과학자가 됐을 법한 지원자들을 탈락시키면 마음이 늘 아프다. 간혹 가능성이 보이는 전혀 백지의 지원자를 합격시키기도 하지만, 안타깝게 (물론 현재 실력만으로 안타까운 수준은 아님) 탈락시키는 경우가 더 많다. 데이터 과학에 국한된 얘기는 아니다. 회사 (다음)에 처음 입사했을 때 명함을 만들었지만 쓸 일이 없어서 이후에는 명함을 만들지 않았다. 그런데 최근 다시 명함 제작을 신청했다. 주제넘지만 안타까운 (주변 도움을 받지 못하는) 지원자들에게 혹시 조언이 필요하면 연락하라는 의미로 줄 요량이다. 나도 우연히 이 길을 걸어왔지만 더 많은 이들이 실패하지 않고 자신만의 경력을 쌓아갔으면 좋겠다. 그래서 내 주제와 분수를 넘는, 개발자니 stackoverflow한 글을 적었다. 개별적으로 더 궁금한 점이 있으면 댓글, 방명록, 페이스북 등으로 문의하기 바란다.

평어가 불편했던 분들에게는 양해를 바랍니다.

댓글을 달아 주세요

  1. Favicon of https://skysign.tistory.com BlogIcon 건이두 2019.06.14 16:55 신고 Address Modify/Delete Reply

    저도 한권을 잡고 쭉 읽어 보려고 합니다. 한권 추천 부탁드려도 될까요...?
    댓글로 추천해 주시기 부담도시면, 메일로 부탁드립니다. skysign@gmail.com
    아래 깃허브는 제가 공부하면서, 진행 했던 프로젝트 링크입니다.
    https://skysign.github.io/udacity-DANP/

    • Favicon of https://bahnsville.tistory.com BlogIcon Bahniesta 2019.06.24 08:28 신고 Address Modify/Delete

      저도 공부한지가 좀 된 사람이라 예전 책밖에 모르겠네요.
      보통 Duda책으로 알려진 'Pattern Classification'나 Bishop책으로 알려진 'Pattern Recognition and Machine Learning'를 추천하는데, 이 책들도 나온지 벌써 20년/10년이 훌쩍 넘었네요. 최신 트렌드가 반영돼있지 않지만, 기본적인 머신러닝 개념을 이해하는데는 전혀 먼제가 없어 보입니다.
      수학에 자신이 있다면 Kevin이 적은 'Machine Learning: A Probabilistic Perspective'도 보셔도 좋겠지만, 책이 두껍고 어려울 수 있어서 초보자들에게는 추천하지 않습니다.
      대신 'The Element of Statistical Learning'이 삽화도 괜찮고 읽을만 할 겁니다. 이것도 좀 부다스럽다면 동저자들이 적은 입문서인 'An Introduction to Statistical Learning' (번역서 있음)부터 읽으시길 바랍니다.
      오래된 책은 최신 트렌드를 방여하지 않았다는 단점이 있지만, 대부분 pdf가 공개돼있다는 장점도 있습니다.