미시건 대학교의 Data Science Specialization 과정은, 이름 그대로, 데이터사이언스에 대하여 폭넓게 가르친다. 데이터 전처리와 시각화부터 머신러닝을 활용하여 모델을 설계하는 작업까지 모두 배울 수 있는 수업이었는데, 개인적으로 정말 많은 것을 얻어갈 수 있었던 Specialization 과정 중 하나였다.

 

 매 코스마다 내주는 높은 난이도의 코딩 과제는, 수업 내용으로는 모자라서, 직접 추가 자료와 라이브러리 Documentation 들을 인터넷에서 찾아서 해결해야 했다. 이러한 과정은 꽤 힘들었지만, 지금 돌아와서 보면 이때 배운 내용들이 어렵게 배운만큼 정말 큰 도움이 된다고 느낀다. 또한, 일부 과제의 경우는 정해진 해답이 없이, 자신이 주제를 정하여 데이터 분석 과제를 수행한 후, 수업을 듣는 수강생들끼리 서로의 과제물을 채점하는 peer review형식으로 채점이 되었는데, 같은 문제를 가지고 다양한 방법으로 접근하는 열정적인 학생들을 보면서, 많은 아이디어를 얻음과 동시에, 큰 동기부여가 되었다.

 

 이 수업을 수강하면서 느낀점을 크게 세가지로 요약할 수 있을 것 같다.

 

 첫번째는, 데이터분석에서 절대로 빼놓을 수 없는 Python 의 pandas 라이브러리와 matplotlib 라이브러리를 제대로 이해하고 배웠다는 점이다. pandas 라이브러리는 쉽게 이야기하면 마이크로소프트의 엑셀과 비슷한 녀석이라고 생각하면 된다. 데이터를 열과 행으로 구성된 깔끔한 표의 형태로 나타낼 수 있도록 도와줄 뿐만 아니라, 프로그래밍 언어로 가능한 모든 연산을 데이터에 쉽게 적용할 수 있도록 해주고, 데이터를 자르고 합치는 모든 번거로운 작업들을 코드 몇줄로 끝나도록 해주는 마법같은 라이브러리다.

 마이크로소프트 엑셀의 경우는, 데이터를 입력하는 것은 편해도, 사실, 원하는 값을 얻기 위해, 데이터를 조작(manipulation) 하기에는 매우 무겁고 비효율적인 도구이다. 간단한 예시로, 엑셀은 데이터 행의 수가 몇 만줄만 되어도, 프로그램이 굉장히 무거워 질 뿐만아니라, 두 개의 엑셀 파일을 특정 컬럼의 데이터를 기준으로 교집합인 데이터 행만 합치거나, 특정 컬럼의 데이터만 추출해서 가공한 후, 새로운 컬럼을 생성하고 싶을 때, 이를 쉽게 할 수 있는 마땅한 방법이 거의 없다. 반면에, pandas 의 경우는 데이터의 행이 수백만 줄이 되더라도 성능 저하가 거의 없고, 아무리 복잡한 데이터 조작(manipulation)이더라도 코드 몇 줄만 작성하면 작업을 쉽게 끝낼 수 있다. 더군다나 pandas를 이용하면 엑셀파일도 읽어들일 수 있고, 작업한 내용을 엑셀파일로 저장할 수 있기까지 하니, 엑셀 노가다 경험이 많았던 나로서는 충격이 아닐수가 없었다.

 matplotlib의 경우는, 데이터를 바탕으로 차트와 플롯을 그려주는 라이브러리로, 엑셀에서 표를 바탕으로 차트를 그리는 것을 생각하면 이해가 쉬울 것이다. pandas와도 찰떡궁합으로, 데이터 전처리가 올바르게 되었는지 시각화 하거나, 결과물의 시각화를 통해 타인의 이해를 돕는데에 매우 유용한 라이브러리 중 하나이다.

 

 두번째는, Feature Engineering의 중요성에 대해 다시 한번 깨달았다는 점이다. Feature Engineering 이란, 수집한 데이터를 가공하는 과정에서, 데이터의 특성을 이해한 후, 유의미한 데이터를 골라내고, 머신러닝 모델에 집어넣을 수 있도록 재단하는 작업이다. 이 과정은 머신러닝 모델 뿐만아니라, 데이터 그 자체에 대한 깊이있는 이해를 필요로 한다.

 

 간단한 예로, 집 값을 예측하는 머신러닝 모델을 만든다고 생각해 보자. 우리가 갖고있는 데이터에는 집의 넓이(제곱미터), 방의 개수(숫자), 집의 종류('아파트'or'단독주택'or'오피스텔'), 집의 위치(주소),  총 4가지 값이 있다고 가정하자. 그럼 이 데이터들을 어떻게 활용하여야 할까?

 

 기본적으로 머신러닝 모델에 데이터를 투입하기 위해서는, 투입되는 데이터의 사칙연산이 가능해야만 한다. 집의 넓이와 방의 개수의 경우는 numeric value(숫자값)로서, 더하고 빼고, 곱하고 나누는 것이 가능하여 머신러닝 모델에 투입될 수 있다. 그러나 categorical value(종류값)인 집의 종류는 '아파트 + 단독주택' 이 아무런 의미가 없는 것처럼 일반적인 연산이 불가능하여 별도의 처리가 필요하다. 뿐만아니라, 집의 주소는 심지어 그냥글자이다. 글자를 어떻게 유의미한 값으로 변환해서 머신러닝 모델에 활용할 수 있을까?

 방법은 여러가지가 있겠지만, categorical value인 집의 종류의 경우는 one-hot encoding을 이용하면 집의 종류값을 여러개의 컬럼으로 쪼갠 숫자값으로 변환시킬 수 있다. 예시의 경우에는 '아파트' 를 (1,0,0) '단독주택' 을 (0,1,0), '오피스텔'을 (0,0,1) 로 변환하면, 사칙연산 및 비교가 가능해 지기 때문에, 머신러닝 모델에 투입할 수 있게 될 것이다.

 마지막으로 주소값의 경우는 글자이기 때문에, 이를 그대로 활용할수는 없다. 따라서, 주소값을 수치화하기 위해서, 주소에 해당되는 우편번호 값이나 경도값과 위도값을 주소값 대신 사용하여, 머신러닝 모델에 집어넣으면 될 것이다.

 하지만 아직 모든 것이 끝난 것은 아니다. 이대로 학습을 하게 되면, feature 간의 scale(범위)이 다르기 때문에, 학습 정확도가 떨어지거나, 학습이 오래걸릴 수 있다. 예를 들어, 집의 넓이의 값은 대부분 10~150 정도 범위의 숫자일 것이다. 반면에 방의 개수는 1~5 정도의 범위안에 들어가는 숫자가 대부분일 텐데, 이런 경우, 모델이 학습을 하는 과정에서 방의 개수 보다는 집의 넓이의 값에 더 큰 영향을 받을 가능성이 높아진다. 따라서, 이를 방지하기 위해 Feature Scaling혹은 Normalization과 같은 작업이 필요하게 된다.

 이러한 특성들 때문에, Feature Engineering 과정은 분석자의 도메인지식이 매우 중요한 역할을 하는 부분 중 하나이다. 기업의 회계정보를 담고 있는 재무제표를 다룬다고 생각해보자. 관련 지식이 없다면, 재무제표에서 어떤 수치가 유의미한 수치인지 골라내는 데에도 어려움을 겪을 것이다. 또한, 유의미한 수치를 골라낸 이후에도, 만약 feature 자체가 feature들 간의 상관성을 갖고 있는 경우, 무작정 Feature Scaling을 해버리면 데이터가 내포하는 의미가 훼손되기 때문에 많은 고민을 해야한다. 더군다나 시계열 데이터가 섞여있는 경우에는, Data Leakage가 일어나지 않도록 유의해야 하는데, 이러한 모든 과정들이 머신러닝, 딥러닝 모델을 만들고 학습시키는 것보다 더 많은 노력과 시간을 필요로 한다는 점을 깨달을 수 있었다.

 

 마지막으로 느낀점은, 머신러닝과 딥러닝은 데이터사이언스의 일부분일뿐이라는 것이다. 아무리 알파고가 사람보다 바둑을 잘두고, 인공지능 왓슨이 의사보다 암을 잘 찾아내도, 컴퓨터는 아직까지도 계산기일 뿐이다. 머신러닝 알고리즘은 수십년 전부터 존재해왔었던 것들이며, 현대에 들어서 인터넷의 등장으로 데이터의 수집이 용이해지고, 컴퓨터의 성능이 비약적으로 발전하면서 상용화가 가능하게 되자, 마치 없었던 것이 처음 발견된 것처럼 인식되는 것이다. 

 즉, 컴퓨터는 추론을 할 수 없다. 추론을 하는 것처럼 흉내내는 것일 뿐이다. 그리고 흉내내는 방법은 인간이 하나하나 데이터를 주입시켜 가르쳐 주어야만 한다. 예를 들어보자. 어린아이, 혹은 심지어, 강아지들도 컵이 책상위에서 떨어지면 피하는 시늉을 한다. 왜그럴까? 컵이 공중에 뜨게 되면 떨어진다고 누군가에게 교육을 받아서 인지하는 것일까? 아니다. 여러번의 관찰을 통해 자연스럽게 사물은 공중에 뜨면 떨어진다는 것을 은연중에 깨닫는 것이다. 즉, 중력의 개념을 자연스레 이해하게 된다. 그리고 이러한 개념을 한번 깨닫게 되면 컵뿐만이 아니라 사과, 펜, 휴대폰 등 다른 물건들도 책상을 이탈하면 똑같이 떨어진다는 것을 알게 된다. 그러나 컴퓨터는 아니다. 컵이 책상에서 이탈하면 떨어진다는 사실을 10만번의 예시를 주입시켜 학습시키고 나면, 컴퓨터도 컵이 떨어질 것이라는 것은 사람만큼 정확하게 예측할 수 있다. 그러나, 컵이아닌 사과 혹은 휴대폰이 떨어지는 경우에는 전혀 답을 내놓지 못하게 된다. 

 이를 극복하기 위해 최근, Transfer Learning(전이학습)을 통해 미리학습된 딥러닝 모델을 다른분야에도 적용할 수 있도록 알고리즘에 대한 연구가 계속 되고 있지만, 아직까지 자연어처리 분야를 제외하면, Transfer Learning은 굉장히 제한적인 것이 현실이다. 즉, 사람은 하나를 가르쳐 주면 열을 알지만, 컴퓨터는 하나를 가르쳐주면 하나만 안다.

 따라서, 여러가지 태스크에 대한 머신러닝 모델을 설계할 때 가장 중요한 것은 바로 데이터의 수집과, 처리이다. 앞서 말했던 것과 같이, 데이터를 어떻게 수집하느냐, 어떻게 유의미한 feature 들을 추출, 가공하느냐가 머신러닝과 딥러닝만큼이나 중요하다는 것을 몸소 깨달을 수 있었다.

 

 

 

 

 

블로그 이미지

찰리와마약공장

,

인간이 배우는 스킬은 크게 두 가지로 나눌 수 있다. 첫 번째는 가치를 발견하는 통찰력, 대인 관계 능력 등의 추상적인 능력인 소프트스킬이고, 두 번째는 직무 스킬과 같이 증명하기가 쉬운, 하드스킬이다. Coursera의 딥러닝 Specialization 과정을 수료한 이후, 곰곰히 생각해보니, 나의 하드스킬이 굉장히 부족하다고 판단했다. 머신러닝과 딥러닝이 정확히 무엇이고, 어떻게 활용이 가능한지, 미래에 어떠한 가치를 지니게 될지 등의 추상적인 개념의 학습은 충분히 되었지만, 그러한 아이디어를 직접 프로그래밍 코드에 녹여내어, 배포하는 단계가 여전히 막막하게 느껴졌기 때문이다.

 

 그도 그럴것이, 이제껏 주먹구구식으로 코드를 짜깁기하면서, 프로그래밍 언어를 체계적으로 공부한 적이 없었으므로, 다시 Python을 기초부터 차근차근 닦아나가기로 마음먹었다. Python은 문법이 직관적이서 배우기가 쉽고 수많은 머신러닝/딥러닝 라이브러리를 지원하기 때문에 데이터사이언스에서 주축이 되는 언어이다. 

 수업은 미시건 대학교의 Python Specialization을 택해 수강했고, 동시에, 웹을 통해 배포하는 방법을 배우기 위해, 같은 대학의 Django Specialization도 함께 수강했다.

 

 이것 저것 수업을 듣다보니 퍼즐 조각이 하나하나 맞추어지는 느낌이었다. 내가 모르던 부분을 알게되고, 내가 궁금해하던 부분을 해결하게 되면, 한 단계 더 나아간 새로운 아이디어가 생겼다. 어느 한 수업을 듣다가도 다른 수업에서 들었던 내용과 연관된 아이디어가 떠올랐다. 마치 눈 앞의 시야가 점차 확장되는 느낌이었고, 이 느낌은 다시 학습의 원동력이 되었다.

 

 내 손으로 직접 구현할 수 있는 부분이 많아지자, 개인 프로젝트의 아이디어도 떠올랐다. '딥러닝을 이용하여 사람의 얼굴을 평가해 보면 어떨까?' 라는 재미난 생각이 들었다. 어느정도 머신러닝, 딥러닝도 배웠겠다, 프로그래밍도 그럭저럭 할 줄 알겠다, 웹을 구축해서 어플리케이션 배포도 할줄 알겠다. '이건 각이 나온다' 라는 생각이 들었다. 

 그런데 웬걸, 준비과정부터가 만만치가 않았다. '서버는 어떻게 만들지?, 데이터는 어디서 구하지?, 데이터의 분류는 어떻게 하지?, 리눅스는 대체 왜이래?'

 

 내가 하고 싶었던건 세련된 머신러닝, 딥러닝이었는데 실상은 거기까지 가기도 전에 지쳐버리는 상황이 온 것이다. 리눅스 서버를 돌리기 위해 라즈베리파이를 구입했는데, 근 일주일을, 호환되는 라이브러리를 찾아서 설치하고 개발환경을 세팅하는데에 썼었던 것 같다. 사실, 말이 좋아 세팅이지, 정말, 수도 없는 에러를 만나 구글링을 하면서 리눅스와 개발환경에 대해 몸으로 배워가는 시간이었다.

 

 드디어 딥러닝에 대해 생각할 수 있는 단계가 오자, 그 동안 내가 온실 속 화초였다는 것을 느끼게 된다. 강의에서 내주던 과제에서는 십수만개의 데이터 세트가 미리 분류된 레이블값과 함께 항상 깔끔하게 준비되어 있었다. 하지만, 현실은데이터셋을 구하기는 커녕, 레이블도 내가 직접 메기어야 하는 상황이었다. 

 

 나의 경우엔, 사람들의 얼굴을 평가하는 딥러닝 모델을 만들기 위해서, 사람들의 얼굴 사진과, 이에 대한 점수값을 딥러닝 모델에 학습 데이터로 넣어주어야 했다. 직접 사진을 수집하면서 많은 문제점들을 발견하게 된다. 곰곰히 생각해보면, 사람은 사실, 사람의 얼굴을 평가할 때 그 사람의 얼굴만을 평가하지는 않는다. 즉, 그 사람이 입은 옷, 그 사람의 체격, 헤어스타일, 그 사람이 유명한 사람일 경우 그 사람의 평판, 사진을 찍은 곳의 배경 등, 얼굴자체와는 관련이 없는 정보들 또한 사람의 의사결정에 영향을 미치게 된다. '그럼 내가 컴퓨터한테 어떠한 정보를 전달해야 객관적인 얼굴평가가 이루어 지도록 학습시킬 수 있을까?' 라는 생각이 자연스레 들수밖에 없다. 뿐만아니라, 모델은 학습데이터의 레이블을 메기는 사람의 주관대로 학습이 될수밖에 없다는 한계점도 깨닫게 된다. 즉, 같은 얼굴을 두고도, 눈이 높은 사람은 점수를 낮게 메길 것이고, 눈이 낮은 사람은 점수를 높게 메길수도 있다. 따라서 레이블을 제공한 사람의 주관이 그대로 모델로 흡수된다는 것이다.

 

 결국 주관이 개입된다는 점은 어쩔수 없기에, 얼굴 이외의 정보를 최대한 배제시킨 후 모델을 학습시키기로 했다. 수집한 사진에서 얼굴만을 크롭해서 크롭된 얼굴사진만을 가지고 학습을 시작하는 것이다. 

 이를 위해, Python opencv 라이브러리를 통해 얼굴을 자동인식하여 크롭하는 과정을 전처리 과정에 추가하고, 딥러닝 모델은 컴퓨팅 성능이 제한적인 라즈베리파이에서 사용하기 위해, MobilenetV2를 이용하여 약 500 장의 사진으로 학습시켰다. 적은 데이터셋을 바탕으로 최대한의 효율을 내기 위하여, 성별 구분 모델을 얼굴평가 모델 앞에 추가하였고, 각 레이블별 데이터 수를 똑같이 수집하여 Imbalanced dataset이 되지 않도록 데이터셋을 구축했다.

 결과는 꽤나 놀라웠다. 사실 데이터 샘플의 수가 500장 정도밖에 되지 않기 때문에, 유의미한 성능을 기대하지는 않았다. 그러나 테스트 이미지를 넣어보니 내가 판단하는 점수와 크게 다르지 않아서, 딥러닝의 잠재력을 다시금 깨닫게 되었다.

 위의 프로젝트는 웹으로 배포하고 있으며 http://charliethewanderer1.ddns.net/faceeva/

 

http://charliethewanderer1.ddns.net/faceeva/

 

charliethewanderer1.ddns.net

누구나 방문하여 이용해 볼 수 있도록 서버를 항시 켜 놓고 있다. 참고로 말하지만, 해당 프로젝트는 겨우 사진 500장으로 학습되어 정확한 값을 예측 못할 수 있으니, 이상하게 나오더라도 실망하지 말자.

 

프로젝트 이후에 느낀점은 다음과 같다.

 우선, 내가 얼마나 부족한지 깨달았다. 항상 Coursera 수업에서 들어왔던 내용이지만, 쉽게 지나쳤던 내용들이 내 뼈를 때리는 경우가 많았다. 특히 데이터를 다루는데에 있어서, Skewed data가 무엇인지, dev set과 test set의 차이점, feature engineering이 무엇인지 등 매우 기본적인 개념들이 가장 중요하다는 것을 깨달았다. 사실 데이터를 다루는 첫 단추가 꼬여버리면 아무리 좋은 컴퓨터와 딥러닝모델을 써도 시간과 전기세만 낭비하는 셈이 되어버리니까.

 

 둘째로는, 딥러닝은 모델아키텍처가 아닌, 데이터셋이 제일 중요하다는 것이다. 즉, 데이터셋을 구할 수 없으면, 아무리 좋은 아이디어와, 딥러닝 모델 아키텍처도 그림위의 떡이다. 데이터 자체는 자동화하여 수집할 수 있다고 하더라도, 각 데이터 샘플에 대응되는 레이블 할당은 일부를 제외하면 자동화가 불가능하다. 사람이 하나하나 노가다로 레이블을 부여할 수밖에 없는 것이다. 따라서 프로젝트를 계획할 때, '내가 데이터셋을 구하거나, 추출 하는 것이 가능한가?' 라는 질문을 우선시 하게 되었다.

 

 마지막으로, 데이터사이언스는 개발자마인드가 필수적이라는 것이다. 즉, 프로그래밍과 개발환경세팅에 친숙해야 하며, 리눅스도 잘해야 한다. 요리의 레시피를 줄줄 외우고 있으면 뭐하는가? 정작 재료를 어디서 살 줄도 모르고, 손질도 할 줄 모르면 요리를 못하는데. 또한 요리를 하는데 들어가는 시간의 대부분은 조리가 아닌, 재료를 구입하고, 손질하는데에 들어가지 않는가? 데이터사이언스도 마찬가지로 보면 되는 것 같다.

 이처럼 학습과, 배운내용의 실행을 반복하는 Empirical cycle을 반복하는 것이 데이터사이언스의 핵심이라는 것을 깨닫고, 데이터의 전처리를 체계적으로 배우기 위해, 또다시 미시건 대학교의 Data Science Specialization 을 수강하게 된다.

블로그 이미지

찰리와마약공장

,

English Version: The Reason I Started Data Science as a Business-Student — 2 | by Charlie_the_wanderer | Feb, 2021 | Medium

 

The Reason I Started Data Science as a Business-Student — 2

I started the machine learning course with thoughts of ‘Let’s just test my English skills.’, ‘I’m a business student, so I would be…

charliethewanderer.medium.com

 

머신러닝 강의를 처음 듣기 시작했을 때는, '내 영어실력을 테스트 해 보자' , '난 문과생이니, 머신러닝을 교양수준정도만 배워도 만족해' 라는 2가지 생각으로 시작했었다. 하지만 수업을 계속 듣고 공부를 하면 할수록, 머신러닝은 천재들만을 위한 어려운 개념이 아니었다는 것을 깨닫게 되었다. 문과 출신이더라도, 고등수학에서 요구되는 수준의 수학지식만 갖고 있으면, 전체적인 개념은 이해하기에 크게 어렵지 않았다. 물론 벡터 연산에 익숙해 지는데에 많은 시간이 걸렸지만. 이쯤 되자, 학교공부와 코세라공부의 주객이 전도됐다. 학교공부는 시험기간에만 벼락치기를 하게 됐고, 오히려 코세라의 머신러닝 강의를 꾸준히 공부하기 시작했다. 마치 학교공부에 머신러닝 공부할 시간을 빼앗기는 것처럼. 

 

 머신러닝 수업을 수료한 이후, 이어서 Deep Learning Specialization 과정에 등록했고 이쪽 분야를 진지하게 나의 커리어로 고려하기 시작했다. 코세라의 Specialization 과정은 일반 코스(1~2개월)과정을 여러개 묶어서 장기과정(5~6개월 이상)으로 짜놓은 커리큘럼을 뜻한다. 

 마찬가지로 딥러닝 과정에 대한 만족도는 굉장히 높았고, 매 코스마다 배워가는것들이 확실했다. 특히, 직접 코드를 짜서 일정 점수이상을 맞지 못하면 다음으로 넘어갈 수 없도록 하는 Coursera의 학습 시스템은, 매 학습동안 긴장의 끈을 놓지 않도록 동기를 부여해 주는 역할을 했다. 

 

 하지만 모든 수업이 완벽할 수는 없듯이, 이 수업 또한 몇가지 의문점들을 불러일으켰다. 그 중 하나는, 수업자체가 딥러닝의 알고리즘과 활용에 집중되어 있다 보니, 데이터를 수집하거나 전처리하는 과정은 다 생략이 되어있다는 것이었다. 즉, 모든 데이터들은 딥러닝 모델에 바로 넣을 수 있도록 미리 다듬어서 준비가 되어있었다. 이를 고려하면, 추후 내가 구직을 하거나, 직접 프로젝트를 실행하려고 할때 데이터를 직접 다루지 못한다는 점이 큰 한계로 다가올 것이 틀림없었다. 

 이처럼, 단순한 배움이 아닌, 취업과 관련한 생각이 들었을 때, '내가 괜한 짓을 했나?' 라는 생각을 할 정도로, 꽤나 큰 혼란이 이따금씩 찾아 왔었다. 특히, '관련학위도 없이, 딥러닝과 머신러닝만 온라인으로 배워서 취직이 가능할까?', '내가 너무 순진했었나?' 등의 심란한 생각이 들기 시작했다. '내 주변에는 머신러닝은 커녕, IT계열과 관련한 사람들도 없는데, 누구한테 물어봐야 할까?' 라는 생각을 하다가, 인터넷으로 관련 정보를 찾아봤다. 그러다가 Medium 이라는 사이트를 알게 됐다. 미국에 기반을 두고 구독형 블로그 서비스를 제공하는 사이트인데, 내가 그토록 찾던 정보들이 가득했다.

 딥러닝 알고리즘과 관련하여 수업만으로는 이해가 되지 않던 부분들, 취업에 대한 이야기, 과대 포장된 딥러닝의 현실 등, 전세계의 현직자와 연구자, 학생들이 다같이 어우러져 만들어내는 컨텐츠들은, 정보에 목말랐던 나에게 오아시스와도 같았다. 그 중에서 가장 도움이 되었던 부분은 데이터사이언스의 의미와 역할을 확실히 알 수 있었던 점이다. 이를 통해, 내가 앞으로 어떠한 방향으로 미래를 준비해야 할지를 깨닫게 되었고, 내가 고민하던 커리어 문제에 대한 해답을 얻었다. 이때부터, 이전까지 막연하게만 생각하던 머신러닝 엔지니어가 아닌, 데이터사이언티스트가 되어야겠다고 결심을 하게 된다. 

 

 그럼 머신러닝 엔지니어와 데이터사이언티스트의 차이는 뭘까? 둘의 차이는 요리로 비유해 보면 이해하기가 쉽다. 머신러닝 엔지니어는 요리에 있어서 요리의 레시피 자체만을 연구하는 사람이다. 즉, 재료를 어디서 사는지, 재료를 어떻게 손질하는지는 신경을 쓰지 않고, 오로지 맛에만 몰두하여 레시피만 연구하는 연구원이라고 생각하면 된다. 따라서 매우 전문성이 높은 사람이어야만 하고, 전문성을 증명할 수 있는 고학력이 필수적이다. 반면에, 데이터사이언티스트는 어느정도 주어진 레시피를 바탕으로 재료 구입부터 요리까지 도맡아서 하는 사람이라고 생각하면 된다. 데이터사이언티스트는 레시피를 직접 연구하지는 않기 때문에, 머신러닝 엔지니어만큼의 전문성을 요구하지는 않지만, 이것 저것 두루두루 할줄 아는 능력이 필요하다. 좀 더 기술적인 입장에서 설명해보자면, 머신러닝 엔지니어는 머신러닝/딥러닝 아키텍쳐 개발에 집중하는 사람으로, 모델의 성능을 1% 라도 높히기 위해 연구하는 사람들이다. 당연히 매우 높은 수학적 지식을 요구하며, 업무의 특성상 좀 더 학술적인 성격을 띈다. 반면에 데이터사이언티스트는 머신러닝 엔지니어들에 의해 이미 검증된 모델을 이용하여 실용적인 문제 해결에 집중하는 경향이 크다. 따라서 좀더 산업적인 측면이 크다고 볼 수 있다.

 

 나의 경우 비전공자로서, 머신러닝과 딥러닝을 학술적으로 접근하기는 사실상 불가능하고 생각했다. 따라서, 대학에서 배운 경영학 지식을 살려서 데이터 분석에 활용하는 편이 훨씬 경쟁력이 있을 것이라고 판단했고, 앞으로의 공부와 프로젝트방향도 이에 맞게 설정할 수 있게 되었다.

 

블로그 이미지

찰리와마약공장

,

English version https://charliethewanderer.medium.com/the-reason-i-started-data-science-as-a-business-student-1-b49294c03886

 

The Reason I Started Data Science as a Business-Student — 1

It has been almost a year that I’ve been studying data science. It feels like I finally get the hang of it, thanks to several projects…

medium.com

 

 이제 데이터사이언스를 공부한지 약 1년이 다되어 간다. 그간 공부한 지식을 바탕으로 개인 프로젝트도 진행하면서, 이제야 어느정도 데이터사이언스에 대한 감을 잡아가고 있다. 사실 데이터사이언스라고 하면, 그 범위가 너무나도 광활한게 사실이다. 많은 데이터를 다루는 일들은 전부 데이터사이언스의 범주안에 속하기 때문에, 단순 엑셀작업부터, 데이터를 수집하기 위한 프로그래밍, 수집한 데이터를 저장하기 위한 데이터베이스 구축작업, 저장한 데이터를 불러와 전처리하는 작업, 전처리가 끝난 데이터를 바탕으로 예측모델을 만드는 머신러닝, 딥러닝 모델설계 작업까지 모두 데이터사이언스라고 불리는 것이다. 이해하기 쉽게 요리로 비유를 하자면, 데이터사이언스는 요리이며, 데이터 수집, 저장, 전처리, 머신러닝들은 각각 '마트가서 장보기', '장 봐온 재료 잘 정리해서 냉장고에 넣기', '요리 전 음식 손질하기', '손질된 재료를 가지고 요리하기'에 비유될 수 있겠다.

 

 관련 전공자가 아니라면, 여기까지만 들어도 무슨소리인가 싶을 것이다. 내가 1년 전에 그랬으니까. 사실 1년 전, 나는 데이터사이언스라는 용어도 알지 못했고, 이쪽에 발을 들여놓을 것이라고는 생각지도 못했다. 기껏해야 알고 있었던 용어들은 AI, 인공지능, 머신러닝 정도였는데, 당시 군 전역후 대학 3학년이었던 나는, 문과생으로서, 이런 첨단 분야에 도전하기에는 너무 늦었다고 생각했었다. 그리고, 모든 복학생들이 그렇듯이, 미래에 대한 불안감으로 무작정 내가 그나마 잘할 수 있는 걸 찾기 시작했다. 그리고 내가 찾은 답은 당연스럽게도, 영어였다. 그 이후, 내가 정말 영어를 남들 앞에서 '잘한다' 라고 자신있게 말할 수 있을 정도가 되기 위해, 제대로 공부하기 시작했다. 그리고 궁극적으로는 bilingual(2개의 언어를 모국어로 하는 사람)처럼 영어를 구사하는 것이 나의 목표가 되었다. 그런데 이것이 놀랍게도 나의 데이터사이언스를 향한 시발점이 된다.

 

 사실 영어공부에 관련해서는 따로 포스트를 정해 정리해야할 정도로 할 이야기가 많지만, 그래도 최대한 간략하게 써 보려고 한다. 나는 영어를 '공부한다' 기 보다는 '배운다' 라는 마인드로 접근했었던 것 같다. 토익, 토플과 같은 시험문제는 거의 풀어보지 않았고, 모국어를 처음 습득하는 아기의 마인드로 언어를 학습하려 노력했다. 아기들은 시험문제를 풀고, 문제집을 보면서 언어를 익히지 않는다. 최대한 많이 듣고, 읽고, 말하고, 쓰면서 익힌다. 어른이라고 방법이 크게 다르지 않다고 생각한다. 나는 내가 읽고싶은 영어책을 정하고 아마존에서 E북을 산 뒤 차근차근 천천히 모르는 표현과 단어를 정리하며 읽었다. 학교를 다니며 읽다보니, 첫 정독에 4개월이 걸렸다. 두번째 정독에는 1개월이 걸렸고 세번째 정독에는 일주일이 안 걸렸다. 책을 눈으로 다읽고 난 뒤에는, 해당 책의 오디오북을 사서 귀로 읽었다. 학교를 오고가는 지하철에서는 CNN10을 유튜브를 통해 계속 들으며 놓친부분을 정리하고, 하루에 개수를 정해놓고 뉴스기사또한 꾸준히 정독했다.

 

 나는 모르는 영어단어들을 발견하는즉시, 네이버 단어장에 등록하는 습관이 지금도 있다. 영어를 제대로 공부하기 시작한지 약 반 년이 지나자, 등록된 단어의 수가 5천에 다다랐는데, 그 이후 1년이 지난 지금까지도, 더 이상 등록단어의 숫자가 크게 오르지 않았다. 즉, 약 5천 개의 단어와 표현을 알고 있으면, 대부분의 영어는 그 안에서 돌고 돈다는 뜻이다. 그때 당시, 마침 토익 점수가 없어서, 시험을 신청하고 문제유형만 며칠간 파악하고 시험을 봤다. 얼마 뒤, 시험 결과가 나왔는데 점수는 960점이었다. 첫 시험 치고는 높은점수였지만, 마냥 좋지만은 않았다. '내가 아직 영어를 원어민처럼 구사하지 못하는데 점수가 무슨의미가 있을까?, 어떻게 해야 내가 영어를 잘한다고 스스로 판단할 수 있을까?' 이러한 생각을 했었던 것 같다. 그 이후, 이런 저런 생각을 하다가 불현듯 생각난 것이, '영어로 무언가를 배울 수 있다면 영어를 잘한다고 할 수 있지 않을까?' 라는 생각이었다. 그리고 들어갔던 사이트가 Coursera라는 미국의 인터넷 강의 플랫폼이었다. 당시 Coursera에서는 머신러닝강좌를 무료로 제공하고 있었는데(아마 지금도 무료일 것이다.), 이 강좌를 수강함으로써 내 자신을 테스트해보고 싶었다. 즉, 머신러닝과 같은 추상적인 개념을 영어로 배울 수 있다면, 이 것이야말로 영어를 할줄 안다는 방증이 된다고 생각했다. 또, 머신러닝과 인공지능이 4차산업혁명을 이끌 원동력 중 하나라고 미디어에서 허구헌날 떠들어 대니, '대체 이게 뭐길래 그렇게 난리들일까?' 라는 나의 호기심또한 해결할 수 있는 일석이조의 기회라고 느꼈다.

 

 그렇게 시작된 머신러닝 강의는 이제껏 살아오던 나의 인생관을 완전히 뒤바꿔 놓게 된다. 사실 머신러닝이라는 내용자체 보다는, 영어라는 것을 왜 할 줄 알아야하고, 영어를 할줄 알면 무엇을 할 수 있는지에 대한 지각을 얻음으로써 오는 충격이 컸다. 우선, 강의의 질과, 학습시스템이 국내 대학과 인터넷 강의 플랫폼(K-MOOC)과는 차원이 달랐다. 내가 다니던 학교도 인서울 4년제의 나쁘지 않은 학교였고, 많은 돈을 등록금으로 내고 다녔지만, 일부의 수업을 제외하면 대부분의 수업 내용이 수박 겉핥기 같다거나 원서를 그대로 복붙해서 읽어주는듯한 느낌을 지울수가 없는게 사실이었다. 기본적으로 교수 1명이 모든 학생을 신경쓸 수 없기에, 이는 어찌보면 당연한 것으로 간주했었는데, 사실 이건 당연한 것이 아니었다.

 

 Coursera에서 수업을 들으며 머신러닝의 개념을 서서히 이해하고, 숙제를 제출하여 실시간으로 피드백을 받고, 같은 수업을 수강하는 전세계의 학생들과 의견을 공유하는 일련의 과정에서, '이렇게 어려운 개념을 쉽게 설명하는 것이 가능하구나, 온라인 학습이 이렇게 효과적일 수도 있구나', 라는 생각이 들었고, 머신러닝에 대해서도 많이 배우게 됐다. 이로인해 '영어를 모른다는 이유 하나로 이런 배움의 혜택을 누리지 못한다면 얼마나 아쉬운 일일까?' 라는 생각이 들기 시작했고, 영어를 바라보는 시각이 바뀌었다. 이전까지는 영어를 단순히 목표로 생각했다면, 이 이후로는 영어를 하나의 도구로써 생각하고, 이것을 최대한 잘 활용하여 나의 시야와 지식을 넓혀야겠다는 생각을 가지게 됐다. 

 

 여러분이 돈을 만들어 낼 수 있는 도깨비방망이를 발견했다고 쳐보자. 여러분들은 도깨비방망이를 팔아서 돈을 벌 것인가? 아니면 도깨비방망이를 이용해서 직접 돈을 만들어 낼 것인가?

블로그 이미지

찰리와마약공장

,