컴퓨터과학과 통계학 사이 혹은 그 위
인공지능 관련 이론과 기술이 만연한 스마트한 시대가 다가온 이래로, 다양한 분야의 사람들이 데이터 과학(Data Science)에 점점 더 많은 관심을 가지고, 각자의 분야에서 연결할 수 있는 데이터 과학을 시작하고 있다. 많은 사람들이 데이터 과학을 공부하는 이유는 여러 가지 분야에 유용하게 쓰이는 데이터 과학의 이점뿐만이 아니라, 자신이 원래 속했던 전공 분야와 상관없이 다양한 응용을 시도해 볼 수 있는 데이터 과학의 접근성에 있다.
내가 사진이나 영상을 만들고 편집하는 일을 한다면, 나의 데이터는 사진의 각 픽셀이나 영상 속 한 순간을 잡은 스크린숏이 될 것이다. 내가 글을 쓰는 작가라면, 나의 데이터는 띄어쓰기를 포함한 나의 글 속 모든 문자가 될 것이다. 데이터 과학은 의학, 경영, 공학의 세세한 여러 분야 속 수많은 데이터에 닿아 있다. R이나 Python 같은 프로그래밍 언어에서 한 줄의 코드만으로도 방대한 데이터의 정보를 요약할 수 있다. 내가 어떤 분야에 종사하고 있고, 약간의 프로그래밍 언어 지식만 있다면, 나의 데이터를 자유자재로 들여다보고 정리할 수 있는 것이다.
그렇다면 데이터 과학이라는 분야는 어떻게 구성되어 있을까? 물론, 간단하게 데이터를 읽고 정리하는 기본 프로그래밍 실력을 요구한다. 그다음은, 정리된 데이터를 통계적으로 분석할 수 있어야 한다. 간단하게 보자면, 데이터 과학은 데이터 분석을 위해 필요한 부분을 컴퓨터과학(Computer Science)과 통계학(Statistics)에서 추출해서 만들어진 "인공"적인 분야라고 생각할 수도 있다. 그렇다면, 제대로 배우기 위해, 컴퓨터과학과 통계학을 전반적으로 같이 공부하는 것도 이상적인 조합이라고 가정할 수 있다. 우선, 컴퓨터 과학 내 필수 분야들을 몇 가지로 추리자면, 1) 이산 수학과 알고리즘을 공부하는 수학이론 분야, 2) 데이터 구조와 관련 알고리즘 분야, 3) 운영시스템과 네트워크 등의 컴퓨터 시스템 분야 4) 함수형 프로그래밍 분야 등이 있다. 데이터 과학을 위해 컴퓨터 과학 내 필수 분야에서 필요한 것은 수학 이론과 데이터 구조의 "일부"이다. 관심사에 따라서 컴퓨터 시스템 혹은 함수형 프로그래밍 분야를 더 공부할 수도 있지만, 바로 적용 분야 중에서 인공지능 (Artificial Intelligence)이나 기계학습 (Machine Learning) 등을 연구할 수 있다. 이와 동시에 통계학 내 다양한 이론이나 응용 등을 익히면 되는데, 인공지능이나 기계학습의 많은 분야와 겹치는 것을 발견할 수 있을 것이다.
데이터 과학에 익숙해지고 이를 잘 활용하기 위해서, 위에 나열한 분야의 방법론들을 잘 알면 유리하지만, 실질적으로 나의 목표와 데이터에 맞는 방법을 잘 찾아서 알아가는 것이 더 중요하다. 데이터 과학이라는 분야는 각자에게 맞는 길이 유일하게 존재한다고 봐도 무방하다. 본인이 데이터 과학 관련 분야 수업을 듣고 있다면, 주변 경력자의 조언을 받거나 본인이 다양한 내용들을 참고한 후, 본인이 풀어야 할 문제와 데이터에 맞는 방향을 스스로 설정해 나가는 것이 좋다.
컴퓨터 과학을 공부하지 않았던 사람이 어떻게 프로그래밍을 하고 데이터 과학을 시작할 수 있는지에 대해서는 내 동생의 경험을 통해 설명할 수 있을 것 같다. 짧게 동생에 대해 설명하자면, 중학교 시절부터 영어나 국어와 같은 언어 과목이나 글짓기에 관심이 많은 학생이었다. 수학이나, 과학 같은 공식이나 방법 등을 이해하고 적용하는 과목이나 사회처럼 현상을 이해하고 관련 내용들을 암기해야 하는 과목들을 딱히 좋아하지는 않았던 것 같다. 겹치는 기간 동안 같은 대학원에 재학하는 기간이 있었는데, 빅데이터 시대에도 손 글씨와 작문을 고집하는 동생을 보고 프로그래밍 과목 수강을 강하게 권유할 마음을 먹었다. 그렇다고 해서, 공대생들이 듣는 프로그래밍 과목을 추천하는 것은 적절하지 않은 것 같아서, 여러 가지 과목들을 물색하던 도중에, 역사 자료를 R 프로그래밍으로 분석하는 과목을 발견했다. 나의 생각에 역사학을 공부하는 학생도 듣는 데이터 분석 과목이기 때문에, 저널리즘 전공의 동생도 충분히 따라갈 수 있을 것이라고 생각했다. 이 과목을 발견한 날부터 동생이 이 과목을 듣게 하기 위해 설득하기 시작했다. 프로그래밍 경험이 없던 동생은 처음에는 이 과목을 들을 의지가 없었지만, 역사에 관심이 많았기 때문에, 새로운 조합의 과목을 점차 긍정적으로 바라보기 시작했다. 결국 이 과목을 수강하기로 결정하고, 첫 수업을 마친 동생을 나에게 말했다. 강의는 흥미로운데 과제가 너무 어렵다는 것이다. 교수가 수강생들의 다양한 전공들을 배려해 프로그래밍 부분을 최소화했지만 역시나 프로그래밍 경험이 없는 사람이 듣기에는 어려웠던 것 같았다. 그로부터 매주 나오는 과제를 완성하고 제출하기 위해 동생은 매일 장시간 동안 동료 수강생들과 미팅을 가졌다. 매주 진행상황을 물어보니, 동료 수강생 중에 프로그래밍을 잘 아는 사람이 R 프로그래밍 코드를 설명하면, 과제에 나온 문제를 풀기 위해 될 때까지 코드를 여러 가지 경우의 수로 대입해 본다고 했다. 수업의 중반 정도가 지나자, 동생은 끼워 넣기만 하던 R 프로그래밍을 반복적인 기본 개념 정리와 연습을 통해 익숙해지고 있다고 했다. 글만 쓰던 동생이 실습을 통해 프로그래밍에 어느 정도 익숙해지는 것을 보니, 프로그래밍 경험이 없다고 해도, 어떤 실습 내용을 지속적으로 반복하면 능숙하지는 않아도 본인만의 프로그래밍 노하우가 생기는 것은 분명해 보였다. 본인이 짠 R 프로그래밍 코드의 계산학적인 이론을 설명하라고 한다면 개념 정리가 완벽하지 않을지는 모르지만, 연습과 반복을 통해 맡은 프로젝트에 맞춤형 코드와 실행은 충분히 가능해 보였다. 프로그래밍을 배우지 않은 사람도 자신의 분야만 확고하게 존재한다면, 맞춤형 프로그래밍을 통해 프로젝트를 완수하는 것도 어려운 일은 아닐 것이다.