brunch

You can make anything
by writing

C.S.Lewis

by Carmen Dec 26. 2017

문과생의 데이터 사이언스 도전기

완벽하게 문과였던 나

학부에서 경영학을 전공한 나는 어릴 때부터 국어, 영어, 사회를 좋아했다. 심지어 친구들 대부분도 문과였는데, 고등학교 때도 문과였고 내가 나온 대학교가 문과 전공과 이과 전공을 두 개의 캠퍼스에 따로 두었기 때문이다. 그리고 첫 번째 직장이었던 광고 대행사 역시 문과 또는 미대 출신이 꽉 잡고 있었다. 그래서 IT기업이었던 두 번째 직장에 들어가기 전까지, 그리고 개발자인 남편을 만나기 전까지 이공계 출신과 말을 섞을 일도 별로 없었다. 30년 동안 순수하게(?) 문과생의 삶을 살았던 것이다. 


순도 높은 문과생이었기 까닭에 석사 유학, 미국, 데이터 사이언스 전공 - 이 셋 중에 내 인생에서 가장 큰 변화를 가져온 것은 전공이었다. 아래 그림에서 보듯 데이터 사이언스를 이루는 3요소 중 두 가지는 수학과 통계학, 그리고 컴퓨터 공학이다. 

https://www.quora.com/Is-Computer-Science-applied-Mathematics


반면에 영어나 미국 생활 자체가 가장 큰 고충인 적은 없었다. 나에게는 수학, 통계학, 컴퓨터 언어가 언제나 상대적으로 더 어렵게 느껴졌으니까.  



유학 준비 시작부터 발을 디딘 이과의 세계

미국 대학원의 데이터 사이언스 전공 프로그램들은 선수 과목(prerequisite)을 요구하는데, 보통은 아래 과목들 중 1개 이상을 요구했다 (영어는 입학 요강에 나와있는 실제 문구들):

기초 통계학 - An introductory statistics course

미적분 - Students must have at least 1 year of calculus; At least one-semester college level calculus course with a grade "C" or better required

선형 대수 - Linear algebra or matrix algebra

프로그래밍 언어 - computing (at least one college-level course or equivalent knowledge in computer programming using a high-level language like C, C++, Java, Python, etc.)

 

'선수 과목'은 정식 대학교에서 수강하고 학점을 받은 이력을 의미하는데 (더러 MOOC에서 certificate을 받는 것을 인정해주기도 함), 기초 통계학은 학부 때 경영학 전공 수업과 교양 과목으로 들었었다. 그 외에는 완전히 처음이었다. 


다행히 일부 사이버대학교와 방송통신대학교는 시간제 학생 제도(입학하지 않고 해당 학교에 개설된 특정 수업만 다른 학생들과 동일하게 수강한 뒤 학점을 받는 제도)를 운영하고 있었다 그리고 위 과목들이 학부 컴퓨터 공학과의 1~2학년 학생들이 들어야 하는 전공 기초 과목인데, 컴퓨터 공학과는 많은 사이버대학교에 존재하는 전공이었다. 결과적으로 두 학기 동안 아래 5개 과목을 시간제 학생으로 수강하였다. 


2015년 2학기

정보통신 수학 (한양사이버대학교) - '공업 수학'과 거의 같은 과목. 미적분을 비중 있게 다룸

SQL 프로그래밍 (한양사이버대학교) - SQL이 선수 과목으로 많이 거론되지는 않았지만 데이터 업무를 하는데 필요한 스킬이라는 조언을 듣고 수강

JAVA 응용 (서울사이버대학교) - 모든 학교 통틀어 2015년 2학기에 수강할 수 있는 유일한 컴퓨터 언어 수업 

2016년 1학기

이산수학 (방송통신대학교)

자료 구조 (숭실사이버대학교)


대학원에 지원하기 위한 선수과목을 찾았다고 끝이 아니었다. 나는 '정보통신 수학'과 'JAVA 응용'을 들을 준비가 되어 있지 않았다. 




차근차근, 순서대로 쌓아야 하는 이과 공부

문과 공부에도 순서는 있다. 예를 들면 마케팅에는 3C, 4P, STP 같은 기본 개념들이 있다. 회계학 역시 회계원리-중급회계-원가회계-고급회계 이런 순서로 수강했다 (나 말고 내 친구들이). 그렇지만 양쪽을 경험해보니 이과 공부의 체계, 순서에 비하면 문과 공부는 상대적으로 경험과 노하우가 더 중요한 것 같다. 


9월에 시작하는 사이버대학교의 '정보통신 수학'과 'JAVA 응용'의 강의 계획서를 확인한 6월에 이 과목들을 위한 기초를 쌓아야 한다는 생각이 들었다. 이 상태로 수강하면 멘탈이 다 부서질 것 같았다. 


일단 수학. 대학교 학부의 컴퓨터 공학과 수업은 학생들이 고등학교 교육과정에서 미적분을 (당연히) 배웠다는 전제하에 진행될 것이었다. 그런데 고등학교 때 (당연히) 문과였던 나는 이과 수학에서 다루는 미적분 심화를 배운 적이 없었다. 그래서 고등학교 수학으로 돌아갔다. 메가스터디 인강으로 이과 수학 중 미적분 부분만 두 달 정도 들으면서 고등학교 때 문과 수학에서 배웠던 내용을 복습하면서 동시에 더 어려운 미적분을 배웠다. 

한국 고등학교 교육은 시험 고득점을 목표로 하기 때문에 문제 풀이에 초점이 맞춰져 있긴 했지만(난 수능 안 보는데) 그래도 짧은 시간에 가장 효율적으로 공부할 수 있는 방법이었다. 


이렇게 준비했다고 내가 '정보통신 수학'의 모든 단원을 제대로 학습한 건 아니다. 막판에 나오는 '라플라스 변환' 같은 건 끝까지 이해가 안 되었다. 단원이 끝날 때 내 상태는 '아 이런 거구나~'의 반응 40%, '이건 당최 뭐야?'가 60% 였다. 


컴퓨터 공학은 수학보다 절망적이었다. 일단 내가 사이버대학교에서 수강해야 하는 자바 자체가 쉽지 않은 언어이고, 나는 프로그래밍을 전혀 할 줄 몰랐다. 말하자면 외국어를 한 번도 안 배워본 한국 사람이 이탈리아어를 배워야 하는 그런 상황이었다.  


개발자인 남편은 내가 자바 같은 특정 언어를 배우기 이전에 프로그래밍이 무엇인지 알아야 한다고 했다. 그래서 Foundations of Programming: Fundamentals이라는 기초를 세우는 과목을 가장 먼저 수강했다. 이 수업은 프로그래밍을 시작하는 모든 사람에게 강추하고 싶은 좋은 수업이다. 


이 수업으로 프로그래밍에 대해 대략 감을 잡은 뒤에 기초 자바 수업인 Java essential Training을 들었다. 안타깝게도, 지금 생각해보면 당연하게도, 기초 자바 수업은 30% 정도만 이해한 것 같다. '아마 난 영원히 class, object, function 같은 개념들을 이해하지 못할 거다'는 좌절감에 휩싸인 채로 사이버대의 'JAVA 응용'을 들었고, 더 큰 좌절감으로 마무리했다. 


대학원 입학 전에는 장님이 코끼리를 만지는 기분이었다. '선수 과목을 채우라고 하니까 채우고 있지만 나는 사실 데이터 사이언스가 뭔지도 잘 모르는데...' 이런 생각이 들기도 했다. 그런데 돌이켜보니 유학 준비 기간에 공부한 수학, 컴퓨터 공학 기초가 없었다면 대학원 입학 후 갑자기 코드를 쓰거나 내 머리 속 어딘가에서 지수로그를 끌어내지 못했을 것이다. 유학 전 준비 기간은, 집 공사로 치면 터를 다지는 시기였다. 




반복 또 반복, 삽질 또 삽질

대학원에서는 기초 통계학부터 다양한 머신러닝 알고리즘을 배웠다. 대부분의 수업에서는

1) 알고리즘의 이론을 접한 뒤에 

2) R, 파이썬, SAS 중 하나로 배운 이론을 실습했다. 

그리고 추가적으로 분석, 모델링 결과를 해석하고 비지니스에서의 활용 전략을 세우기도 했다.


이렇게 공부한 알고리즘을 실제로 써먹기 위해서 필요한 건 개념에 대한 완벽한 이해, 그리고 툴에 익숙해지기이다. 두 가지 모두 시간을 들여서 반복해서 접할 때 가능해진다 (수학 천재, 코딩 천재라면 예외).


대학원 첫 학기 때 배운 알고리즘 중 하나는 로지스틱 회귀(Logistic regression)이었는데 시험은 잘 봤지만 이게 왜 필요한지, 그 공식은 어떻게 만들어지는지 등은 사실 완전히 이해하지는 못했다. 그 상태로 시간이 지나니 로지스틱 회귀분석은 그냥 classification 기법 중 하나로 기억되었다. 그러다가 마지막 학기 수업에서 다시 로지스틱 회귀를 복습할 기회가 있었고, 갑자기 자연스럽게 이해가 되었다. 다른 알고리즘이나 통계학 이론들도 두 번째, 세 번째로 볼 때 더 제대로 이해되는, 와 닿는 경우가 많았다. 


수업에서 우연히 하는 복습 외에 개인적으로 예전에 배운 것들이 궁금하면 수업 자료나 필기로 돌아간다. 내가 자주 찾아보는 개념은 에버노트에 아예 따로 정리해뒀다.


입학 당시에는 R, 파이썬을 전혀 몰랐다. 물론 컴퓨터 공학 전공이 아니니까 언어 자체를 잘하는 것이 목표는 아니지만 데이터를 분석하고 모델을 만들기 위해서는 이 언어들을 잘 다루어야 했다. 그리고 대학원 수업이 언어를 배우는 시간이 아니기 때문에 R과 파이썬의 기초는 나 혼자 따로 배웠다 (R은 DataCamp에서, 파이썬은 DataQuest에서). 학교 수업에서는 학생들이 코딩을 할 수 있다는 전제하에 R로 로지스틱 회귀를 실습하고 과제를 내주는 식이었다. 


첫 1년은 R을 쓰든, 파이썬을 쓰든 시간이 너무 오래 걸렸다. 모든 명령어를 다 구글이나 책에서 찾아볼 수밖에 없었고, (당연히) 에러도 많았고, 교수님 코드나 구글에서 찾은 코드를 이해하고 내 문제에 맞게 고치는 데에 서툴렀기 때문이다. 거기에 알고리즘 자체가 낯선 상황이면 진짜 진도가 안 나갔다. 석사 과정이 겨우 1.5년인데 내가 취업이나 할 수 있을지, 취업하고 일을 제대로 할 수 있을지 걱정되고 답답했다. 


개념을 반복해서 보는 것처럼 데이터 전처리, 분석, 모델링하는 과정도 반복하면서(더불어 삽질도 반복) 점점 익숙해졌다. 대학원에서 들은 10개 수업에서 이 과정들을 전부, 혹은 일부만 경험할 기회가 최소 3번 이상 있었고 (총 30번 이상), 인턴십도 있었다. R과 파이썬 반반씩, SAS 아주 가끔.


다양한 주제, 형태의 데이터셋으로 이 과정을 반복하니 이제는 산악자전거 정도는 아니어도 일반 자전거는 자유롭게 타는 수준이 되었다. 자주 쓰는 명령어는 외워서 쓸 수 있고, 왜 에러가 나는지 (데이터 타입이 틀렸는지? 이상한 값이 들어가 있는지? 변수가 잘 못 설정되어 있는지?...) 추측해볼 수 있고, 남의 코드가 내가 찾는 바로 그것인지, 어떻게 바꿀 것인지 전보다 더 빠르게 판단할 수 있게 되었다. 




문과니까 안될까요 

내가 문과였으니까, 내가 30대니까 데이터 사이언스를 공부하고 커리어를 바꾸는 것이 불가능하거나 어렵겠다는 생각은 해본 적이 없다. 그 대신 왠지 하면 될 것 같은 근거 없는 확신, 그리고 그렇게 하고 싶은 분명한 동기(이전 포스팅 참고)가 있었기 때문에 시작했다. 무모한 긍정주의였다. 그렇게 유학 준비부터 석사 학위 따는 데까지 3년이 걸렸다. 


지금 와서 돌이켜보면 문과 출신, 30대, 그리고 한국인이라는 사실은 나의 약점이 아니라 강점이었다. 왜냐하면

수준 높은 한국 고등학교 수학 덕분에 미적분, 삼각함수, 행렬 같은 것들의 기본은 이미 배웠으니까 

나이를 먹으면서 사고력, 이해력이 10, 20대 때보다 나아졌으니까 (연륜?)

데이터를 통해 해결해야 하는 문제가 무엇인지 파악하고, 내가 내놓는 해결책이 현실적인지 판단할 수 있으니까

실무자로 쌓은 업계 경험, 지식이 있으니까 (이전 포스팅 참고)

듣는 사람, 보는 사람을 고려한 보고서 쓰기와  프리젠테이션을 해봤으니까


만약 중고등학교 때 수포자였는데 데이터 사이언스에 입문하고 싶다면, 선수 과목을 채워서 대학원 진학을 해야 하는 것이 아니라면 일단 시작하고 필요할 때마다 복습을 하든가 아니면 나처럼 사교육의 힘을 빌려서 어느 정도 수학 진도를 정주행 할 수 있다. 


돈이나 시간이 없는 사정은 내가 뭐라 할 수 없다. 하지만 나이가 많다거나, 수학이 기억나지 않는다거나, 코딩이 처음이라는 것은 데이터 사이언스를 시작하지 못할 이유는 아니라고 생각한다. 정말로 배우고 싶고, 데이터 사이언스로 만들고 싶은 무언가가 있다면 시작하고, 시간이 걸리더라도 나아가기를. 






브런치는 최신 브라우저에 최적화 되어있습니다. IE chrome safari