데이터 전처리란?

3
pabii research

개발자 면접을 보다보면, 파비의 사업모델은 뭐냐, 기술 역량은 얼마나 뛰어나냐,  비지니스 철학은 뭐냐 같은 종류의 질문을 받는 경우가 있다. (더불어서 돈 많냐, 월급 떼어먹는거 아니냐 등등의 스타트업이 으레 받을법한 부끄러운 질문도 가끔 받는다ㅋㅋ 우리 돈 많다ㅋㅋ) 보안 이슈 때문에 이미 회사 홈피나 다른 블로그 글에 다 공개되어 있는 부분 이상으로 딱히 더 설명해 줄 부분은 없는데, 그래도 좋은 인재를 잡고 싶은 마음에 이것저것 설명을 좀 더 깊게 해 주기도 한다. 보통은 회사 홈피와 블로그를 자세히 안 보고 온 티가 나는게 설명이 좀 더 깊어지면 눈빛이 흐려지고 무슨 말인지 잘 모르는 표정들이 된다.

그렇게 사업모델을 설명하다보면 참 재밌는 현상을 볼 수 있는데, 설명 초반부에 개발자들 표정이 참 밝다. 그 정도는 나도 만들 수 있다는 자신감의 발로일 것이다. 가끔은 여기 나가면 내가 당장 그거 만들어서 니네 사업모델 뺏들어야겠다는 느낌의 표정을 짓는 분들도 있다.

그런 자신감 or 거만함 넘치는 표정이 좀 보기 불편해져서 유저들간 동질성 / 이질성을 구분해내는 Homogeneity index를 찾아내는 아이디어로 박사시절에 은행별 포트폴리오의 유사성을 잡아내던 Dummification, Weighting matrix 계산 같은 걸 슬쩍 언급하면 그 개발자들의 표정이 갑자기 매우매우매우 어두워진다. 표정 변화를 보고 있으면 은근히 재미있다 ㅋㅋ

사실 그렇게 눈에 보이는 계산식 부분은 아무것도 아니고 (그 정도는 Pabii의 데이터 사이언스 기본 수업에서 다 가르쳐주는 부분이다), 그 전에 데이터 전처리해야할 부분에 대한 고민으로 매일같이 머리가 깨지는 고통을 겪고 있다. 아마 수업을 찾아오셨던 분들은 여기서 말하는 데이터 전처리라는게 NA 메워넣는 작업이 아니라, 데이터 재구성이라는 점을 말해주지 않아도 이해하실 것이다.

그런 데이터 전처리 중에 그나마 좀 쉽게 이해될만한 내용만 몇 가지 정리해보자.

 

2-Stage-Least-Square

연말 보너스 산정을 하는데, 우리 팀이 지난 1년간 온갖 열정 (이라 쓰고 야근, 주말 출근이라 읽는다)을 쏟은 끝에 매출액이 급상승 했으니 우리 팀원에게 좀 넉넉하게 보너스를 주고 싶다는 주장을 하는 팀장님이 있다고 생각하자.

그 회사 인사팀에서는 올해 그 팀에서 설비를 5대나 사들여 놓은 탓에 매출액이 폭증한거지, 정작 인력 투입으로 얻은 성과는 그렇게 크지 않다며 보너스 요구를 받아들이지 않는 상황이 생기면 어떻게 될까?

누가 맞는걸까? 이런 “논리”의 싸움은 맞다, 틀리다를 알 수 없으니 그냥 적당히 타협하는 보너스를 주자고하면 될까? 그럼 납득을 못하는 팀원들의 불만은 어떻게 잠재울 수 있을까? 그 팀에 보너스가 간다고 기분 나쁜 다른 팀들의 불만은 어떻게 잠재워야할까?

사실 이런 상황은 정말 간단한 2-stage-least-square를 이용해서 맞다, 틀리다를 말할 수 있다.

에이~ 수학으로 설명하면 누가 받아들이냐고?

매출액이라는 종속변수 (y)는  분명히 우리 팀원들의 열정(….)과 설비 5대의 결합물일 것이다. (물론 운, 시장 트렌드 등등의 외부적인 요소가 끼여들었을 여지는 인정한다.) 여기서 설비 5대가 정말로 효과가 있었는지를 “수학적”으로 어떻게 검증하냐고? 설비 5개 증가값을 X1으로 우리팀의 노동력 투입을 X2로, 나머지 변수들 X3으로 놓고, Y를 X1으로 Regression 한 다음 (1st-stage), 잔차항을 다시 X2, X3으로 Regression하면 된다 (2nd-stage). 만약 X1의 기여도가 컸다면 매출액 증가분 (y값의 상승분)이 X1으로만 설명되는 현상이 나타날 것이다.

그런 수학식이 무조건 맞다는 법이 어딨냐고? 매출액이라는 데이터도 결국은 N차원의 Vector고, 모든 Vector들은 여러개의 다른 Vector들의 합성으로 표현될 수 있다. 고등학교 수학이다. 그렇게 벡터를 쪼개보는 방식으로 지구 자전 & 공전 중에 위성 발사의 궤도가 어떤 영향을 받을지도 계산하고, 핵무기를 실은 대륙간 탄도탄 미사일의 궤도도 오차범위 5m 내외의 무서운 정확도로 계산할 수 있다. 그런 우주적인 힘의 영향을 높은 정확도로 계산하는 작업쯤 되어야 “수학”을 붙이지, 겨우 매출액 같은 단순 그래프를 여러개의 Vector로 쪼개는 작업에 “수학”이라는 명칭을 붙이는 것도 민망하다.

 

Instrumental variable (IV)

빅데이터 시대가 왔다고 데이터가 넘쳐난다고들 말이 많은데, 정작 데이터 사이언티스트 입장에서 필요한 데이터는 항상 없다. 예를 들어, Pabii의 사업 모델에서 유저들의 온라인 구매 데이터 유무는 우리 회사 상품 라인업을 바꾸고, 심하게는 사업의 존폐에 영향을 끼칠만큼 중요한 정보다. 근데, 쇼핑몰들, 카드사들에게 돈을 주고 그 정보를 사지 않는 이상, 유저들의 구매 데이터를 구할 방법이 없다. 거기다 그렇게 제 3자에게 데이터를 파는 것은 원칙적으로 불법이다. (이 문제를 어떻게 해결하고 있는지는 회사 기밀이므로 여기에 따로 공개하지는 않는다.)

위의 문제를 해결하는 실마리가 될만한 간단한 사례를 하나만 쉐어해보자. 과금형 게임을 하는 유저들 중, 장시간 게임을 하는 유저들 대부분은 아이템을 돈 주고 구매 (속칭 “현질”)하지 않는다. 반면, 짧게 짧게 플레이해서 스트레스를 해소하려는 목적으로 게임하는 유저들은 괜히 경험치 끌어올리려고 밤을 새느니 그냥 아이템을 사고 마는 경우가 잦다. 자, 이런 정보가 있다면 게임 하는 시간을 “어떻게, 잘” 이용하면 현질유저인지, 경험치 노가다 유저인지 구분할 수 있지 않을까? (물론 정확도가 100%는 아니겠지만…)

이런식으로 실제 필요한 데이터는 없지만, 유사한 정보를 보여줄 수 있는 데이터를 도구 변수 (Instrumental variable, IV)라고 한다. 수학적으로 표현하면, 특정 데이터 셋이 보여주는 Vector Space와 유사한 Vector Space를 재구성해 줄 수 있는 데이터 셋이라고 생각할 수 있다.

가만히 보면 우리가 갖고 있는 데이터들 상당수가 이런 방식으로 데이터 처리만 잘 하면 Vector Space 메워넣기가 가능한 경우가 많다. 이걸 단순히 Neural Net에 집어넣으면 알아서 척척척 해주는거 아닌가요라고 묻는 특정군의 사람들이 있다는 걸 알지만, 학부 선형대수학 수준의 지식만 있어도 그런 마구잡이식 Network 모델이 아니라 합리적인 데이터 재구축 및 변수 선정이 필수적이라는 걸 이해하실 것이다.

실제로 IV를 쓰는 것을 수학적인 “결례”라고 생각하고 폄하하는 통계학자들도 있고, IV없이 연구가 거의 불가능한 사회과학 문제를 붙잡고 계신 연구자 분들도 있다. (가까운 친구 중엔 IV로 졸업 논문쓰고 박사 받은 친구들도 꽤 된다.) Vector Space를 완벽하게 보정해주지도 않고, A변수랑 B변수랑 연관 있을 것 같아서 이렇게 IV를 골랐습니다와 같은 주먹구구식 설명에 회의감을 느끼는 분들께는 대단히 죄송하지만, AdTech 비지니스를 하다보면, 특히 법적 제약의 범위 안에서 쓸 수 있는 데이터만 갖고 고민하다보면, IV를 어떻게 찾아야할까, 어떻게 구성해야할까에 대한 고민이 깊어지는 경우가 많다. 위의 과금형 게임 유저 찾기는 하나의 작은 예시일 뿐이다.

 

Dummification by Tree

Tree 계열 모델 (Decision Tree, Random Forest, Gradient Boosting 등)을 언제 쓰는게 더 합리적일까? 단순히 결과값이 잘 나올 때 쓰는거 아니냐고?

Tree 모델의 계산 방식, 정확하게는 Tree가 추가되는 과정을 하나하나 살펴보면, Monotonic increase/decrease가 있는 데이터 셋에서는 크게 효과를 보지 못할 계산법이라는 걸 바로 파악할 수 있다. (설명 타이핑하기 귀찮으므로 2019년 1월 수강생 후기 참조ㅋ. 신진수 님 설명 감사합니다.)

비슷한 예제를 이전 글에서도 공유했었는데, 약품 투약의 효과가 혈당 수치 x1 ~ x2 구간, x5 ~ x6 구간에서만 긍정적으로 나타나고, 나머지 구간에서는 전혀 효과를 못 본다는 연구 결과가 있다고 하자. 아마 x2 ~ x5 사이의 혈당 수치를 가진 환자 분께는 그 약품 대신 다른 약품을 써야할 것이다. 이런 식으로 특정 기제의 효과가 지속적으로 상승/하락하지 않는 경우가 위에 말한 Monotonic increase/decrease에 해당하는 사례인데, 이럴 때 데이터 처리를 전혀 하지 않는다고 가정하면 당연히 Regression 계열의 모델들보다 Tree계열의 모델이 훨씬 더 Fitting에 적합할 것이다.

Tree가 하나하나 추가될 때마다 x1 ~ x2 구간, x5 ~ x6구간에서 1, 나머지 구간에서 0인 것을 세세하게 구분할 것이기 때문이다. 반면 Regression 모델로 Fitting 작업을 했으면 x2 ~ x5 구간에서 효과가 없었던 탓에 평균적으로는 그 약품의 효과가 별로 안 좋았다는 결론이 나올 가능성이 높아진다.

그래서 앞으로는 Tree모델을 쓴다고 결론내리면 될까?

Tree 모델로 데이터의 구조가 이렇다는 걸 파악하고나면 필자는 혈당수치 값을 Dummification한다. (머신러닝하는 친구들은 이걸 One-Hot-Encoding이라고 부른다.)

왜? Regression으로 계산하는게 각 변수별 효과를 컨트롤하기도 좋고, 내 모델이 어떻게 돌아가는지 하나하나 짚고 가기 훨씬 더 효율적인 구조를 갖고 있는데, 혈당수치1구간, 5구간만 0/1로 놓는 방식으로 데이터 구조를 바꾸고나면 굳이 Tree한테 맡겨놓고 알아서 계산해주겠지라며 넋놓고 기다리는 짓(?)을 안 해도 되기 때문이다. (같은 맥락에서 Neural Net을 무조건 쓸게 아니라, 데이터 구조를 파악하고나면 굳이 그런 Computationally heavy한 계산법을 피할 수 있는 경우도 많다)

이런 Computational approach를 깊이있게 공부하신 분들은 다 알겠지만, 계산속도 느리고, 데이터 셋 바뀔 때마다 모델 변형이 잦고, 구조적으로 컨트롤이 안 되는 모델은 언제나 연구자들에게 차선책에 불과하다. 데이터 구조만 살짝 바꾸면 굳이 Tree를 안 써도 되는데 굳이???

 

나가며 – 1류 Data Scientist란?

전공마다 상황은 조금씩 다르겠지만, 필자가 있었던 Mathematical Finance 전공에서 “데이터를 이용한~”이라는 접근 방법, 통칭 “Empirical research”는 홀대를 받는 정도에 그치는게 아니라, 아예 리그가 낮은 연구자들이나 하는 작업이라는 이미지가 강했다. 쉽게 말하면 수학 모델링을 이용해 우리 전공의 문제를 풀어내면 메이저리그고, 데이터로 그런걸 보여주는 연구자들은 마이너리그 취급을 받았다. 왜냐고? (머리 많이 쓰는) 수학 모델링 작업은 (별로) 없고, (머리 별로 안 써도 되는) 데이터 전처리하다가 세월 다 보내는 경우가 허다했기 때문이다.

물론 그런 Empirical research하는 분들도 우리 필드의 그 누구도 생각해내지 못한 기발한 방법으로 모델을 만들거나, 데이터를 완전히 다른 방식으로 변형해서 상상하지도 못한 함의를 이끌어내는 분들도 있었기 때문에, 배우는 입장에 있던 필자는 특별히 Empirical research를 무시하거나 하진 않았다. (오히려 더 좋아했던 것 같다^^) Empirical 이라고 무시당하던 분들은 보통 하늘에서 뚝 떨어진 방정식 하나를 주장하는 분들이었지, 수학적인 아이디어를 교묘하게 활용해 데이터를 색다르게 쓰시는 분들은 굳이 마이너리그 대접을 받지는 않았다. 왜? 그 분들은 (수학적으로) 머리를 많이 써야되는 데이터 전처리를 하셨기 때문이다.

학계의 분위기를 소개하는 이유는, 요즘 머신러닝을 이용한 어쩌고, 딥러닝을 이용한 어쩌고라는 서비스 만든다는 분들께도 직접적으로 해당되는 사례이기 때문이다. 별 생각없이 데이터를 무작정 입력하기만 하면, 정말 마이너리그 취급이나 당하는 이른바 “2류 연구자” or “2류 데이터 사이언티스트”밖에 안 될 것이다. 정말 “1류”가 되고 싶다면, Empirical research로도 존경받는 그 연구자 분들처럼 데이터를 활용하는 방식에 대한 고민이 담긴 결과물을 비지니스에 가지고 올 수 있어야 한다. 그래야 남들이 따라할 수 없는 결과물을 만들어내는 “몸 값하는” 데이터 사이언티스트가 되는 것이다.

그런 데이터 전처리를 잘 하려면 위의 모델들만 몇 개 골라서 공부하면 되냐고? 글쎄다. 저건 필자가 대학원에서 몇 년동안 통계학 공부한 지식을 실제 데이터 전처리를 하던 중에 적용해 본 몇 가지 사례들에 불과하다. 데이터 사이언스 공부하고 싶으시거든 구글 검색창에 “최신 인공지능 계산법” 같은 낯뜨거워지는 검색어 입력하시지말고, 통계학 교과서를 다시 펼쳐보시는건 어떨까?

 


공지: 2019년 3월 29일을 끝으로 데이터 사이언스 주제의 포스팅은 종료됩니다. 이 후에는 파비의 스타트업 운영 관계된 포스팅만 월 1회 작성됩니다.

Similar Posts