데이터 사이언스 공부법

0
1997

몇 달전의 일이다. 경제학 석사까지 공부하고 모 통신사에서 Data Analysis 팀에 재직하시는 분이 데이터 사이언스 강의를 들으러 오셨다. 수업이 진행되면서 수식 하나 놔 두고 여러가지 직관을 설명하고, 그게 데이터 사이언스에 어떤 방식으로 적용되는지, 어떤 주의 사항이 있는지를 계속 설명했더니만, “유학가면 보통 이렇게 수식 속에 숨겨진 직관적인 내용을 파보는 교수님들이 많냐?”고 질문하시더라.

학부 시절, 혹은 고교 시절로 돌아가보면 아무래도 지식 흡수에 바쁘다보니 수식 받아적기 바쁘고, 선생님의 생각을 따라가기 정신 없는 수업만 들었던 것 같다. 숙제들도 계산 위주로 나오고, 시험전날 벼락치기 공부하기 전까지는 특별히 논리를 따져가며 공부했던 적이 드물었던 것도 사실이다.

그렇게 교육받아놓고 언제부터 직관, 적용, 주의 사항  같은 부분에 신경쓰는 사람이 되었는지 곰곰하게 생각해보다가, 문득 경제학 석사 들어갔던 첫 해의 쓰리쓴 공부가 떠올랐다 ㅠㅠ

 

1. 문제를 풀어나가는 방식

그 동네라고 수업 내내 직관을 계속 강조하는 수업만 하는 건 아니었다. 우리나라에서 듣던 수업이랑 별 차이가 없었는데, 정작 시험 문제는 참 요상(?)하게 나오더라. 아래를 보자.

석사 때 봤던 기말고사 문제다. N 명의 학생이 T번의 시험을 친 결과값을 바탕으로 학업 성취도 평가를 하는 작업인데, 학업 성취도가 제대로 측정되었는지 확인하려고 데이터에 Jump in 하기 전에 혹시 학생들이 “베끼기”를 하지 않았나 확인하겠다는 작업이다.

보통의 한국식 교육을 받은 사람이면 위의 “구질구질”한 설명은 과감하게 패스하고, 데이터가 N개가 있고, y_i가 y_(i-1)이랑 상관관계가 있을지도 모르는 경우군. 저기 있는 theta 때문에 계산이 복잡해질텐데, i랑 t가 다 있는 패널 데이터니 t = 1 ~ T 까지 평균을 내서 t 항목을 없애버리자… 같은 생각을 하고 접근할 것이다.

시험 문제를 풀어나가는 측면에서는, 빨리 풀고 금메달로 시험장을 나왔다고 자랑하기 위해서는 매우 타당한 전략이다. (남들은 손도 못 댄걸 나만 풀었다 정도여야 자랑할만하지…. 에효~ 그 땐 금메달이라고 왜 그렇게 까불었을꼬 ㅋㅋ)

그런데, theta 값이 무슨 뜻인지 한번이라도 고민해본적이 있나?

애시당초 theta 를 왜 모델에 넣어놨는지는 이해가 되는가?

그 전에 i와 i-1로 식을 만들어 놨는데, 왜 하필 몰래 훔쳐보기 하는 이야기를 i, i-1로 표현된 식으로 묶어냈을까?

당연하겠지만, 처음 저 문제를 시험장에서 봤을 때는 이런 생각을 할 수 있는 사람이 아니었다. (바보였다 ㅠㅠ)

 

2. 문제를 설계하는 방식

학생 배치

박사들어가서 TA도 하고, 시험문제도 내고, 채점도 하면서 남들의 지식 수준을 테스트해야하는 자리에 가니 갑자기 저 문제가 다르게 보이더라. 몰래 훔쳐보기 하는 학생들이 있어서 시험 점수에 실제 실력이 제대로나타나지 않는 경우는 얼마든지 있을 수 있다. 그걸 어떻게 통계 모델로 추려낼 수 있을까?

저 문제에서는 자기 앞 자리 학생의 문제만 볼 수 있다고 단순 가정을 잡고, i와 i-1로 식을 세웠다. 혹시 자기 옆 자리 학생의 문제만 볼 수 있다면? 시험장에 10명씩 앉을 수 있다고 하면 i-10인 학생과 i+10인 학생들의 점수가 i번 학생의 점수에 영향을 줄 수 있다는 식으로 변형하면 된다.

문제 3번째 줄에 Random 이라는 단어가 보이는가? 학생을 random 하게 배치하지 않고, 시험 점수 높은 순 or 낮은 순 등으로 특정 조건에 따라 배열했으면 y값 추정 오차도 당연히 영향을 받을 것이다. 통계학은 언제나 오차가 모델을 잡아먹는 경우를 피하기 위해서 최대한 랜덤 오차 형태로 모델을 만들어낸다.

학생 배치와 Random 이라는 두 아이디어가 문제 속 모델링의 곳곳에 이미 숨겨져 있는 것이다.

 

Theta 값

위에 Theta_t는 왜 넣었을까? 왜 저 변수는 시간에만 영향을 받고, 학생들 특징에는 영향을 안 받을까? 보통 패널 데이터를 만들면 사람의 특징을 잡아내는 변수를 추가하는 경우는 있어도, 시간적인 변화에 따르는 변수를 정의하지는 않는다.

theta_i가 아니라 theta_t인게 정말 이상하다고 생각하고 있었는데, 문제 하단에 theta_t는 time-invariant effect라고 적혀있더라. Time-invariant면 시간에 따라 값이 바뀌면 안 되는데???

교수님이 시험 문제를 잘못내신거다. 시험 당일 학생들 몇 명이 질문하니 결국 문제가 수정되었던 기억이 난다.

자, 그럼 theta_t랑 theta_i는 각각 무슨 이야기를 하고 있는걸까?

theta_t라면, 학생들간의 차이는 고려하지 않고, 시간이 지나면서 값이 바뀌는 경우를 말한다. 예를들면 시험 평균 점수 Swing이 엄청나게 심하다고 쳐 보자. 성취도를 잘 측정하는 시험 점수를 기대했는데, 시험 때 마다 들쭉날쭉하니 쉽게 판단하기 어렵다.

theta_i라면, 시험 마다 평균 점수 Swing은 고려치 않고, 학생들마다 다른 점수 레벨을 잡아내는 변수가 된다. 좀 더 정확하게는 그 i번째 학생의 (숨겨진) 진짜 실력을 잡아내는 변수라고 보면 된다. T번의 시험 동안 학생들 전체의 평균 점수가 비슷했다면, 그 i번째 학생도 항상 비슷한 점수를 받았을텐데, i-1번째 학생 시험지를 훔쳐봐서 더 잘 쳤다면, 시험 점수가 좀 더 올랐지 않을까?

 

다른 변수들

만약에 theta_i를 안 넣었다면 어떻게 될까? 그 학생의 진짜 실력을 잡아내지 못하고 y_i랑 y_(i-1)이 얼마나 연관관계가 있는지만 보는 작업을 하면 서로 베끼기를 하지 않은 경우에는 별 의미없는 Regression이 되어버린다. 오차항 u만 엄청나게 크게 나올 것이다. (Omitted variable)

만약 서로 베끼기를 했다면? Gamma값이 0보다 큰 양수 값이 나올텐데, 저 Gamma값을 믿을 수 있는 숫자일까? 그 해답은 y_(i-1)과 오차항 (theta_i + u_i)가 서로 아무런 관련이 없는 독립적인 관계에 있냐는 질문과 같은 맥락이다. 앞에 앉은 학생이 뒤에 앉은 학생의 시험지도 볼 수 없고, 뒤에 앉은 학생의 진짜 실력에 따로 영향도 안 받는다고 하면 별로 고려할 필요가 없어보인다. 서로 독립일테니까. 근데 학생 배치는 랜덤이었다며? 올~ 랜덤이라는 가정이 여기에 쓰이네? (사실 이 계산에 더 큰 문제가 있는데, 하단에 Gamma 값 계산 부분에 추가한다.)

혹시 theta_i 말고 다른 변수들을 더 추가해야되는건 아닌가? 글쎄다. T번의 시험 동안 평균 점수가 비슷했으면 굳이 시간 요소를 고려할 필요는 없는 것 같고, theta_i 대신 다른 특성(ex. zeta_i)을 더 추가하면 같은 변수를 2번 써 버리는 꼴이 되니 모델을 되려 엉망으로 만드는 것 같다. Theta_i 라는 변수 하나에 학생 i의 모든 개인적 특성을 싹 담아놨다고 생각하면 된다. 실제로 그런 변수가 어딨냐고? 저 theta_i는 그렇게 쓰는 “가상변수”다. 참고로, 그런 가상변수가 유의미하다고 가정하는 모델을 Fixed Effect (FE), 그런 가상변수가 주는 영향이 없다고 가정하는 모델을 Random Effect (RE)라고 한다.

 

만약에 Gamma > 0 이라면?

정말로 앞에 앉은 학생 베끼기가 있었다면 저 Gamma 값이 양수로 나올 것인데, 그 다음은? 그냥 베끼기 확인하고 끝냈을까?

아마 저 문제에 나온 내용은 교육부 같은 곳에서 시험 점수 데이터로 모델을 만들기 전에 데이터 전처리를 하는 과정이었을 것이다. 그렇게 전처리가 끝나고나면 당연히 집안 배경, 소득 수준, 성장 정도 등등의 다양한 사회경제적인 요소들을 측정한 변수를 이용해서 학생들의 성취도에 어떤 영향을 주는지도 살펴보고, 과거 시험 점수와 현재 시험 점수간의 상관관계를 보고 성취도가 얼마나 올라오고 있는지, 교육 정책 변화의 효과가 얼마나 뛰어난지도 측정할 수 있다. (우리나라에서는 감독관 선생님들 승진평가 점수에 영향을 줄지도 ㅋㅋㅋ)

요컨데, 저 시험 문제는 큰 데이터 사이언스 프로젝트에서 데이터 전처리하는 여러가지 step 중 하나였다.

 

실제로 Gamma 값 계산은 어떻게 할까?

패널 데이터를 공부하신 분들은 잘 아시겠지만, E(theta * u )  가 0이 아니라는 저 조건 때문에 위의 문제는 First Difference나 De-mean을 해서 theta 값을 계산 식에서 지워야 한다. 그런데, 그렇게 지우고나면 y_i, y_(i-1)와 u_i, u_(i-1)가 모두 y_i 계산에 필요한 것처럼 되어서 Gamma 값을 정확하게 계산할 수 없게 된다. (Endogeneity)

이래서 Fixed Effect 모델 계산할 때 Generalized Method of Moments (GMM)을 응용하는 Arellano-Bond 를 활용한다고 수업 시간에 배웠었는데, 그게 그대로 시험 문제에 나와있다. 더 궁금하신 분들은 A-B의 논문을 읽어보시거나, Wooldridge 교수님의 교과서를 읽어보시기 바란다. 궁금하신 분들을 위해서 덧붙이면, Random Effect인 경우에는 Bhargava-Sargan 의 모델을 활용해서 계산하고, 둘 중 어느 Regime이 맞는지 테스트하는데는 Hausman test를 활용한다. 구체적인 내용은 이 블로그의 취지와 이격이 심한 관계로 생략하니 궁금하신 분들은 통계학 대학원 교과서들을 참조하시기 바란다.

실생활에서는 Gamma값이 좀 부정확하게 측정되면 뭐 큰 문제가 되냐고 생각하시는 분들도 있을텐데, 저 Endogeneity를 고려하지 않았기 때문에 Gamma 값이 양수임에도 0으로 측정되면, 당연히 데이터 전처리가 실패하고, 그 이후에 나오는 모델링 작업들은 오염된 데이터로 만들어낸 모델이 되어 버린다. 쉽게 말해서 통계학 무시하고 데이터 작업하다가 시간 낭비를 한 셈이다. (무식은 언제나 어디에서나 “죄”다.)

 

나가며 – 데이터 모델링

석사 1학년 수준에서 볼 만한 통계 모델링을 간단하게 정리해봤다. 패널 데이터를 이해해야 따라올 수 있는 설명 부분, 그렇게 하는 데이터 전처리 작업이 얼마나 중요한지에 대한 강조점도 있었지만, 윗 글에서 필자가 전달하고 싶었던 포인트는 시험 문제를 바라보는 자세의 극명한 차이였다.

문제를 풀기 급급했던 시절에는 보이지 않았던 전체 구조를 이해하고나니, 시험 문제 접근법 뿐만 아니라 평소의 데이터 작업을 어떻게 해야겠다는 생각이 바뀌었다. 누가 데이터 뭉치를 휙 던져주고, “XX, YY, ZZ 결과값을 도출해!” 라는 식으로 “문제 풀이식” 모델링을 하는게 아니라, 내 데이터는 어떻게 측정되었을까, 혹시 측정상에 무슨 문제가 있지는 않았을까를 곰곰하게 따져보는데서 시작해, 모델링이라는 건 어떤 큰 그림 속에서 통계학 지식을 적재적소에 활용하는 것이라는걸 그대로 시험 문제로 옮겨놨다는게 눈에 들어왔기 때문이다.

머신러닝은 알아서 저런 “이상한 거” 정리해주는 “요술봉” 아닌가요? 쩝~ 머신러닝은 그냥 Non-linear 패턴 찾는 응용통계학이라니까 ㅋㅋ

석사 1학년 수준의 이야기도 무슨 말인지 모르면서 자칭 Data Scientist 인 분들 은근히 있을 것이다. (어차피 시장 수준이 올라오면 퇴출되시겠지.) 그런 분들이 보시라고 쓴 글은 아니고, 윗 맥락을 이해하지만 평소에 Data Science가 코딩 or 그래프 그리기와 도대체 뭐가 다른거냐고 묻는 사람들에게 답변하기 힘드셨던 분들이 예제로 쓰시라고 써 봤다.

참고로 런던에서 공부하던 내내 조교들한테 매일같이 들었던 단어가 Economic Intuition이었다. 수식만 보지말고, 수식은 맥락을 표현한 방식에 불과하니, 맥락을 이해하고, 왜 저런 수식으로 표현했을까를 먼저 고민해라고. 그래서 저 수식이 무슨 경제학적 함의를 가지는지 설명해내는 훈련을 반복해라고.

유학가면 그런 교수님들 수업만 있는거냐는 질문에 이렇게 대답하겠다. 교수님들 가르치는 내용은 (거의) 똑같던데, 학풍이 다르고, 시험도 다르게 나오고, 한국에서처럼 수식만 나열하면서 시험치면 망하더라고. 근데, 나중에 일하러 나와보니 진짜 Intuition 투성이더라고. (어쩌면 학부 시절에 너무 공부를 안 해서 몰랐을 수도 있다 ㅎㅎ)

Data Science 공부하실 분들에게 도움이 되었으면 한다.