자비로운 데이터 사이언티스트들
머신 러닝 맛보기
머신러닝 하면 파이썬이 떠오른다. 그래서인지 R로 머신러닝을 한다는 말은 매우 생소했다. 애초에 머신러닝이 무엇인지도 몰랐다. 머신러닝을 러닝머신이라고 읽지 않은 게 다행이었다. 물론 기계학습을 잘하기 위해선 학습기계처럼 공부해야 하니 딱히 틀린 말은 아니다.
머신러닝의 세계로 들어온다면, 그의 친구인 딥러닝도 알게 될 것이고, 선형대수학(?)이나 선형 회귀와 같은 수학/통계도 억지로 맛봐야 한다. 수학이 싫어서 문과를 택했다면, 그 벌을 한 번에 몰아서 받게 될 것이다. Learning 하는 Machine이 되어야 한다.
가장 먼저 머신러닝으로 해보는 과제는, 분류와 예측이다. 기계에게 열심히 학습을 시키면 기계는 무엇인가를 분류하거나 다음(Next) 결과를 예측해낸다. 분류는 기계보다 인간이 훨씬 잘하는 영역이다. 하지만 예측에는 취약하다. 사람들은 대부분 자기 멋대로 예측하기 때문이다.
그러니 결국 목표는 기계가 인간만큼 분류하고, 인간보다 더 잘 예측하는 데 있다.
어떻게 머신러닝을 하는가?
코린이의 마음으로 최대한 쉽게 설명해보겠다.
기계를 가르칠 때는 지도 학습, 비지도 학습, 강화 학습 세 가지 방법이 있다. 지도 학습은 모의고사를 줘서 열심히 풀게 만드는 거고, 비지도 학습은 공부 거리를 잔뜩 준 다음에 알아서 학습하게 하는 방법이다. 강화 학습은 잘하면 상주고 못하면 때려서(?) 공부법을 습득시킨다. 아주 잔혹하다.
머신러닝 초짜는 당연히 지도 학습을 먼저 배운다. 예를 들어 수능 문제를 맞히는 머신러닝 모델을 만든다고 생각해보자. 모의고사 역할을 하는 문제와 정답 세트가 필요하다. 재료 준비가 끝나면 순서는 아래와 같다.
1. 지난 10년 간의 수능 문제와 정답지를 기계에 학습시킨다. 학습 방법도 선택한다.
2. 기계는 문제와 정답지 사이의 연관관계를 찾아낸다. 그것을 모델이라고 한다. 모델은 통계와 수학 기반으로 만들어져 있는데, 변수를 주거나 조정할 수 있다.
3. 학습이 끝나고 모델이 만들어지면 학습에 사용하지 않았던 작년도 수능 문제를 넣고, 모델이 어떤 답을 출력하는지 확인한다.
4. 출력한 정답을 실제 정답과 비교한다.
5. 오답률이 높으면 학습할 문제는 더 많이 넣어주거나, 변수를 조정하거나, 모델 자체를 바꾼다.
6. 모델이 잘 나오면 실제 수능 문제를 넣어 정답을 찾아낸다.
어떤가? 생각보다 쉽지 않은가?
유일하게 어려운 것은 기계가 어떻게 연관관계를 찾아내는 지를 모른다는 점이다. 모델 종류를 선정하면 그냥 나온다.
물론 설명해줘도 이해할 자신이 없지만..
R로 머신러닝 하기
R로 머신러닝을 할 수 있는 이유는, 이미 모델이 라이브러리로 제공되기 때문이다. 자비로운 데이터 사이언티스트들은 이것을 무료로 공개했다. 우리는 이제 문제와 정답만 준비하면 된다. 날로 먹는 기분이 좀 들지만 영문 타자도 치는 것도 어려운 코린이에게는 해피한 일이다.
학원에서는 모델에 문제와 정답을 넣고, 변수를 조정하면서 정답률을 높이는 연습을 했다. 문제와 정답은 학습용과 정답 확인용으로 나눠 사용한다. 보통 7:3 정도로 사용하는데, 700개의 문제와 정답으로 학습시키고, 300개의 문제를 넣어서 300개의 정답을 맞히는 식이다. 제공하는 데이터도 대부분 깨끗하게 다듬어진 자료다. 어린이집 요리교실과 비슷하다.
머신러닝을 간략히 배운 후, 우리는 작은 프로젝트를 진행했다. 나는 5명의 이공계 사나이들과 함께 경기도 스타벅스 매장을 분석했다. 서로 인사하는 자리에서 내 나이를 들은 다섯 사나이들은 동공 지진을 일으켰다. 반지의 제왕 간달프를 보는 눈빛이었다. 나는 자애로운 미소를 지으며 퇴직금으로 커피를 샀다.
우리는 통계청 사이트에 들어가 각 지역의 변수들(인구수, 소득, 직장수 등)을 구하고, 그 지역에 몇 개의 스타벅스가 있는지 찾았다. 통계청 자료는 문제, 스타벅스 수는 정답이었다.
높은 예측률이 나올 때까지 모델을 바꿔보고, 필요하면 통계청 자료를 추가하기도 했다. (20-30대 인구 비율, 지역별 전기사용량, 평균 소득 등). 모델이 완성되자 우리는 준비한 변수들을 다시 모델에 넣어 적정한 매장 수가 몇 개인지 예측했다. 모델이 잘 만들어졌다면 실제 스타벅스수와 우리 모델이 예상하는 스타벅스수의 오차가 있을 것이었다.
결과는..
안산과 부천, 화성이 예측치에 비해 실제 스타벅스 매장 수가 적었다. 우리는 자신 있게 곧 안산에 스타벅스 매장이 생길 것이고 입을 모았다.
시도는 좋았으나 팩트인가요?
하지만 시간이 지날수록 우리는 스스로 만든 자료를 확신할 수 없었다. R로 만든 멋들어진 그래프는 화려했지만 신뢰도는 제로였다.
학자들마다 의견이 분분하긴 하지만 데이터 분석에는 기본적으로 3가지가 필요하다고 한다.
1. 프로그래밍 기술 : 일단 파이썬을 하든 R을 하든 Tool을 다룰 수 있어야 한다. 농부가 쟁기질하듯..
2. 수학/통계/컴퓨터 공학 지식 : 왜 지금 땅을 파는데, 왜 지금 씨를 심고, 겨울에는 무슨 준비를 해야 하는지 모르면 농사 다 망친다. 쟁기질 잘하는 동네 바보일 뿐이다.
3. 도메인 지식 : 일종의 비즈니스 지식이다. 스타벅스를 분석한다면 프랜차이즈 산업에 대해 알아야 한다. 이걸 모르면 모태솔로가 결혼생활을 상담해주는 상황이 된다.
우선 우리는 도메인 지식이 부족했다. 사실 나도 스타벅스보다 1500원짜리 커피를 더 많이 마신다. 게다가 한 번도 커피 매장에 대해 생각해보지 않았는데, 과연 우리의 분석이 맞을까? 겉 핥기 아닌가? 날름날름
또, 우리는 우리가 만든 모델의 구조도 잘 이해하지 못했다. 학습 모델에 사용했던 데이터를 다시 통째로 넣는 것이 좋아 보였지만 제대로 된 분석법이라는 근거가 없었다. 통계적인 지식과 개념이 부재했다.
다섯 사나이는 시큼한 땀을 흘리며 열심히 준비했지만 모두 한계를 느꼈다. 하지만 제법 코딩 비슷한 걸 치고 그래프를 만들고 있자니 나름 자부심도 느꼈다. 그래.. 갈길이 먼데 이 정도가 어디인가? 회사 다니면서 머신러닝을 배웠으면, 반년이 걸려도 교육비만 내고 제자리걸음이었을 것이다. 나의 합리화는 크고 화사하게 꽃을 피웠다.
자료 작성을 마친 다음 날,
코로나 확진자가 급증하기 시작했고, 발표는 무기한으로 연기되었다. 결국 거리두기를 하며 파이썬 공부를 시작했고, 얼마 되지 않아 온라인 재택학습이 시작되었다.
바야흐로 졸린 눈을 비비며 컴퓨터 앞에 앉는, 지옥의 학생 라이프가 시작된 것이다.