논문 읽기 (1) – 합리적으로 변수 추출하기

최근까지 모 대기업, 특히 필자가 항상 말하는 “행동 데이터”를 잔뜩 갖고 있(을 것이라고 확신하)는 회사의 기획자들 대상으로 데이터 사이언스 출강을 했다. 이런 강의 요청이 오면 보통은 일언지하에 거절하는데, 그래도 저정도 큰 회사, 저만큼 데이터 가진 회사에서 좀 깨쳐야 시장이 성숙하지 않겠나는 생각에 마음을 돌려먹었다.

원래는 기획자들 대상이었는데, 정작 강의장에서 수강생 리스트와 담당 직군을 보니 개발 업무를 하시는 분들도 꽤나 있어 보였다. (정작 필자가 주로 타겟으로 삼는 수학, 통계학 출신이나 통계 공부 많이한 경제학 출신은 잘 안 보이더라 ㅠㅠ) 데이터 사이언스 모델링에 관한 수업이 아니다보니 구체적인 모델링, 직관적인 수학 백그라운드, 코딩 등은 최대한 제외하고, 그 회사의 업무에 맞춰서 변화하는 트렌드나 간단한 엑셀 예제 같은걸 다뤄줬다. (인간은 언제나 자신의 100%를 다 보여줄 수 없을 때 의욕이 떨어지는 걸 느낀다…)

수업 중 하루는 머리가 반백이신, 좀 연륜 있어보이는 분께서 논문 읽다가 모르는 부분이 있다고 상담을 오셨다. 눈으로 언뜻 스캔하기에는 처음 보는 논문에 필자도 생소한 개념이라서 시간을 달라고 부탁하고, 짬이 좀 생긴 지난 주말을 이용해서 논문을 꼼꼼하게 읽어보고 답변과 간략한 리뷰를 보내드렸다. 논문을 보면서 필자가 이해하는 방식을 독자분께 공유하면 데이터 사이언스는 코딩이 아니라 통계학을 이용한 모델링이라는 사실에 좀 공감하기 쉬울 것 같아서 그 중 일부를 아래에 소개할까 한다.

 

1. 논문 간략 소개

논문 제목: Simple and scalable response prediction for Display Advertising

위 논문은 온라인 유저 데이터를 바탕으로 디스플레이 광고를 할 때 어떤 식으로 모델을 활용하고 있는지 잘 설명해주는 내용으로 구성되어 있다. 특히 Ensemble이나 Neural Net 같은 computational cost가 많이 들어가는 복잡한 모델 대신, 매우 간단한 Logistic regression을 이용하면서 Feature selection에 신경을 많이 쓰는 부분을 강조하는 점이 참 매력적이다. 실제로 필자가 논문 쓰던 시절에도 화려한 모델링보다 데이터 추적에 더 주력해야한다는 주의를 많이 들었었고, 그 이후로 통계 작업을 하면서 언제나 데이터가 많을 때는 굳이 non-linearity를 강제로 도입하려기보다는 간과하고 지나갔을법한 변수들을 찾아내는데 더 많이 신경을 쓴다.

논문의 또 하나의 장점을 들자면, 간단한 Logit 모델의 장점을 잘 살리면서 (ex. computational cost가 작은 것, 변수들 파워가 크게 변하지 않는 것 등) 머신러닝에서 흔히 언급되는 고난이도 테크닉들 (ex. Exploration / exploitation)을 별 무리없이 활용할 수 있다는 걸 잘 보여주는데, 무조건 Neural net만 머신러닝이고 나머지 모델들은 “구시대적인”이라고 주장하는 머알못 or 데알못 (머신러닝 알지 못하는 사람, 데이터 사이언스 알지 못하는 사람?)들에게 일침을 가할 수 있는 좋은 사례가 아닐까 싶다.

 

 

2. Logit 모델

일반에 흔히 알려진 Logit (Logistic regression 혹은 Maximum Entropy) 모델이다. 앞의 Term은 Regularization을 위한 변수, 뒷편의 Summation은 일반적인 Sigmoid 함수다.

모델 estimation을 위해서 진행한 다양한 데이터 전처리 작업들과 sensitivity check, 다른 모델들과 비교 등이 잘 정리되어 있는데, 그 중 평소 수업 시간에 가장 많은 질문이 나오는 (그리고 고난이도 수학 지식이 필요하지 않은) regularization 부분만 살짝 공유해보자.

우선 Regularization이 하나도 없다고 가정하고 (=0), 위의 optimization 방정식을 풀면 (1차 미분 = 0 식을 만족시키는 조건), 아래의 값을 찾을 수 있다.

이 때, 원래의 목적함수에서 예측치 값을 찾으면 y=1이 되는 확률값과 같다. (Logistic regression에서 원래 얻을 수 있는 값, 일반적으로 Empirical probability라고 부른다.) 이 모델의 가장 큰 문제는 m값이 작을 때, w 값의 분산이 커진다는데 있다. 참고로 통계 모델링을해서 얻은 상관계수의 유의미함을 찾아낼 때 가장 크게 의존하는는 값이 p-value고, p-value가 유의미하려면 그 상관계수의 분산이 작을수록 유리하다. 반대로 분산이 크면 그 상관계수는 계산하나마나라고 봐야한다.

분산이 큰 값을 쓰느니 그냥 오차가 좀 있어도 분산이 작은 (Mean-Squared Error가 더 작은) 확률을 대타로 쓰는데, 흔히 쓰이는 값이 아래의 Beta prior다. (일반적으로 Prior는 모델링의 결과로 나온 확률이 아니라, 모델에 임의로 입력하는 확률을 이야기한다.)

위의 Beta prior 식은 alpha값이 변화함에 따라 값이 바뀌고, 적절한 alpha값을 찾아줘야 합리적인 확률을 얻어낼 수 있다. (이렇게 찾아낸 좀 부정확하지만 차라리 분산이 작은, 그래서 합리적인 확률값을 Laplace estimator라고 부른다.)

위는 Regularization을 강제로 alpha의 절반으로 잡았을 때 Logistic + Regularization으로 찾아낸 확률과 저 위의 Beta prior로 계산한 확률이 얼마나 유사한지를 보여주는 그래프다. 예상대로 굉장히 유사한 값이 나오는 걸 확인할 수 있고, 이래서 일반적으로 Beta prior를 활용하는 것이다.

alpha값이 커(혹은 작아)질수록 두 값이 같아진다는 증명도 있는데, 굳이 이 블로그를 더 어렵게 쓰고 싶은 생각이 없으므로 패스한다.

Regularization을 필자의 수업 시간에 설명하면서, 결국은 이 작업이 비선형 함수가 지나치게 한 데이터 셋과 일치하는 걸 방지하도록 비선형성 일부를 포기시키는 작업이라는 걸 수학적인 직관으로 보여준다. 이 논문에서는 그런 아이디어를 활용해서, 데이터가 많이 없는 변수는 상대적으로 regularization을 덜하고, 데이터가 많은 변수는 regularization이 더 되는, 그래서 확률 0.5 근처에 더 잘 모이도록 해주는 결과를 낳는다고 설명하고 있다. 수식으로만 따지면, 저 위의 m 값이 작을수록 w 값은 커지고, (데이터가 적을 수록, regularization은 덜 되고), m값이 커질수록 w 값이 반대로 움직이는 것을 확인할 수 있다.

덧붙여, 일반적으로 Logistic regression 모델에서 가장 많이 알려진 문제가 Over-confidence (확률이 51%로 나오지 않고 99%로 나오는 현상)인데, 이 논문에서처럼 데이터 크기에 따라 Regularization을 다르게 주면 확률이 0.5 근처로 모이도록 모델의 문제점을 어느정도 보완할 수도 있다.

보통은 위의 두 가지 문제 (Over-fitting, Over-confidence)를 해결하기 쉽지 않기 때문에 Logit 대신에 다른 non-linear classifier를 활용하는 경우가 많은데, 간단한 수학적인 테크닉을 활용해 그 문제를 해결했다는 사실이 재밌다면 Data Scientist로 소질이 있다고 할 수 있을 듯^^

 

 

3. Feature selection

어떤 변수(x)를 추가로 이용하면 모델의 설명력을 더 높일 수 있다고 주장할 때, 통계학에서 가장 흔히 다루는 방법은 R-squared 값 (“모델 설명력”이라고 불림)의 변화분을 따지는 것이고, 변수를 추가하기만하면 일반적으로는 R-squared가 더 커지니까 변수 추가한 갯수만큼 Penalty를 주는 Adjusted R-squared를 흔히 활용한다.

머신러닝에서는 비슷한 개념으로 변수가 추가될 때 모델의 성능 향상을 Cost function (비용 함수)의 값이 변화하는걸로 계산한다. 위에 소개한 모델은 Log-likelihood로 모델의 entropy를 계산하는데, 그래서 NLL (Negative Log Likelihood)값이 변화하는걸로 변수 하나하나의 설명력을 계산하는 방식을 취한다.

변화량을 찾아내는 식이 좀 복잡하기는한데, 몇 가지 수학적으로 큰 오차가 안 생기는 가정을 추가해서 아래의 식(closed form)을 만들어 낸다. (이런식으로 closed form을 이용해서 논문의 활용도를 다양하게 보여주는 작업이 사실 논문을 써낼 때 정말 중요한 작업이고, 내 논문이 학문적으로 훈련 받은 사람들한테 인정받을 수 있는지, 나라는 학자의 능력을 다른 학자들이 인정해주는지를 결정하는 중요한 분기점이 된다. 이런 작업을 못 해내면 일전에 다른 글에서 언급한 것처럼 “사회학자”라는 혹평을 받는 것이다.)

매우 간단화한 식인데, 필자가 아래에 약간만 식의 모양을 바꿔보겠다.

위의 변형식은 분자에 있는 조건부 확률식을 풀어쓴 것이다. 혹시 고등학교 확률과 통계에서 독립사건과 종속사건을 구분하던 공식이 기억나시는가?

위의 공식을 대입해보면 눈에 들어오겠지만, Log의 밑수가 독립사건이면 1이되고, 종속사건이면 1이 아닌 다른 값이 나온다. Log 1은 항상 0이다. 말을 바꾸면 어떤 변수를 추가로 활용했을 때, 그 변수가 목표값인 y와 독립사건이면 그 변수는 추가적으로 설명해주는 부분이 하나도 없다는 뜻이다. 반대로 “조건부 확률이 1이면 = 완전한 종속사건이면 = x값만 알면 y값을 바로 알 수 있다면” 그 변수의 설명력은 최대치가 된다.

자, y와 조건부 확률이 1이 될 수 있는 변수란 어떤 변수일까?

아래 두 가지 경우를 생각해보자.

x = (1,2,3,4,5) , y= (1,1,1,0,0)

x = (1,2,1,2,3), y = (1,1,1,0,0)

첫번째 경우는 x값이 3이하면 y는 무조건 1이고, x값이 3보다 크면 y는 무조건 0이 된다. x값만 알면 y값을 바로 알 수 있다. 두번째 경우는 x가 2일때 y값이 0과 1이될 확률이 각각 반반이다.

따라서 y와 조건부 확률이 1이될 수 있는 변수는 첫번째 x값이다. 이런 x 값이 그렇게 많이 존재할까? 그리고 그런 x값이 좋은 변수일까?

 

 

4. Mutual Information

위에서 언급한 논문에서 변수를 고르는 조건을 설명한 표이다. 여기서 SMI는 Single Mutual Information이고, RMI는 Reference Distribution에서 뽑은 Mutual Information이라고 설명해놨더라. 필자에게 이 논문을 들고 오신분이 이 부분이 이해가 안 된다고 질문을 주셨고, 필자도 Mutual Information이라는 개념을 처음 봤기 때문에 논문을 좀 읽어보고 답변을 드리겠다고 했다.

논문을 읽어보면 알겠지만, SMI가 가장 크게 나올려면 바로 윗 섹션에서 언급한 조건부 확률이 1이되어야 한다. 좀 풀어서 설명하면, 어떤 하나의 변수만 알고 있으면 다른 변수의 움직임을 완벽하게 알 수 있다는 말이, 상호(Mutual)간 정보(Information)가 100% 호환된다는 뜻이다.

저 위의 도표에서 최상단 박스에 SMI가 높은 값들을 정리해놨는데, 온라인 유저 데이터로 작업하는 사람들 입장에서는 사실상 User ID에 해당하는 값이거나, 특정 사건 (Event)를 인덱스로 바꿔놓은 값들이다. 유저 1,000명의 ID를 다 알고 있고 (1,2,3,….,1000), 그 유저가 구매했는지 안 했는지 다 알고 있다면 (1,0,1,0,…..) 유저 ID만 알고 있으면 y값을 다 알 수 있게 되지 않겠는가?

처음 Mutual Information이라는 걸 도입할때는 당연히 “MI 지수가 높은 값 = 설명력 높은 변수”라는 생각으로 변수를 골라낼 계획이었을 것이다. 그럼 유저 ID 번호가 이 사람이 구매할지 여부를 말해주는 잣대라고 할 수 있을까? 필자가 다른 유저보다 그 페이지를 살짝 늦게봐서 유저 ID 번호가 달라졌다고 구매하려던 상품을 안 산다? 말이 안 되는 이야기다. 이 변수가 언뜻보면 설명력이 엄청나게 높아보이지만, 사실은 인과 관계가 아무것도 없는 변수이기 때문이다.

이렇게 인과 관계는 없고 상관 관계만 큰 값을 모델에 집어넣고 모델 설명력이 높다고 자랑하는 건 “저는 통계학을 하나도 모르는 바보입니다”라고 인증하는 것과 다를바가 없다.

위 논문의 저자들도 그런 문제를 알고, 보완하는 MI 지수를 만들려는 시도로 Reference distribution을 기반으로한 Mutual Information (RMI) 지수를 이용하고 있는게 보인다. 복잡한 수식을 다 제쳐놓고 간단하게 개념만 설명하면, 다른 데이터 셋 (일종의 Validation set)에서 찾아낸 데이터의 분포를 이용해서 MI 지수를 기준값을 잡고 위의 SMI 값을 보정해준 것이라고 보면 되겠다.

 

 

5. 인과 관계 vs. 상관 관계

필자가 런던에서 석사 1학년을 하던 시절, 런던에서 1년 중에 비가오는 날과, 스코틀랜드에서 정화조 차량이 작업을 한 횟수간 상관 관계 (correlation)을 구하면 R-squared가 거의 100%에 가깝게 나오는 걸 본 적이 있다. 이렇게 서로 인과 관계 (causality)가 전혀 없는 두 개의 변수가 매우 높은 상관 관계를 보이는 경우를 Spurious Regression 이라고 부른다.

저 위의 SMI가 큰 변수들이 대표적으로 Spurious Regression 인 경우들이다.

그러면 변수끼리 상관 관계만 있는 것과 인과 관계가 함께 있는 것을 구분하는 방법이 있을까? Granger causality라는 다차 방정식 행렬을 풀면 인과 관계가 없는 변수들을 구분해낼 수 있다. 관심 있으신 분은 링크1, 링크2, 링크3 (Excel 파일 예제) 을 참고하시기 바란다. 언제 여유가 생기면 필자 스타일로 한번 정리를 해 보겠다.

 

 

나가며

서두에 밝힌대로, 이 논문은 간단한 Logit이 얼마나 잘 활용될 수 있는지를 잘 정리해놓은 매력적인 논문이다. 혹시나 머신러닝을 제대로 공부하신 분이 있다면 Logit이 가지는 여러가지 문제들 (over-fitting, over-confidence)을 해결하기 쉽지 않다는 것을 봤을텐데, 이 모델은 모델 구조를 잘 짜서 Logit의 문제를 회피하고 있다. 또, 공부하신 분들은 연관 규칙 찾기 (Association Rule) 작업을 할 때 연관 규칙의 적합성을 검증하는 요건으로 Lift 값이 1이 아닌 것을 골라야한다는 걸 본 적이 있을 텐데, 저 위에서 독립사건이되는 경우가 딱 Lift값이 1이 되는 것과 같은 상황이다.

통계학 시간에 인과 관계 vs. 상관 관계를 한번쯤 공부해보신 분들은 꼭 Spurious Regression이라는 전문 용어가 아니더라도 변수의 인과 관계를 고려하지 않는 변수 선정은 무의미하다는 것정도는 들어보셨을 것이라고 생각한다. 덧붙여, 변수의 설명력을 머신러닝에서 보여주는 가장 좋은 예제가 Ensemble 모델에서 Variable Importance를 찾을 때 변수 하나의 한계적 효용 (하나 더 추가 했을 때 얻을 수 있는 설명력 증가분)을 찾는 방식이 “변수 n개로 돌린 모델의 설명력 – 변수 n-1개로 돌린 모델의 설명력”인데, 완전히 같은 접근법으로 위의 SMI를 찾아내고 있다. 마지막으로, 모델을 보정할 때 Validation set을 쓰는 것과 같은 방식으로 Reference distribution을 활용해서 SMI 대신 RMI 값을 쓴다.

필자가 데이터 사이언스 수업 시간에 설명하는 개념들이 변수를 “잘” 골라내는 방식에 적절하게 활용되고 있다는 걸 눈으로 확인할 수 있어서 이 논문을 수강생 분들께 꼭 공유하고 싶었다. 지난주에 수업 종강하면서 위에 언급한 내용들을 쭈욱 설명드리고 나니, 왜 머신러닝이 개발자용 지식이 아니라 수학과 통계학에 기반한 지식인지 알게 되었다는 평을 해 주시는 학생 분들이 많았다.

필자에게 위 논문으로 질문을 보내주신 분은 그 대기업의 특정 모델 개발팀에서 상당히 높은 직급이신 것 같은데, 그 대기업이 어떻게 운영되고 있는지는 잘 모르겠지만, 짧은 대화에서 얻은 느낌은 개발자 출신이 복잡한 수식 때문에 논문을 제대로 이해하지 못하고 있는 느낌을 받았다. 질문자 본인 뿐만 아니라, 그날 강의에 참석한 거의 대부분의 수강생들의 반응에도 비슷한 점을 느꼈는데, 아직도 이걸 개발자가 하는거라고 생각하는 문화가 회사 내에 퍼져 있는 것 같아서 한편으로는 좀 안타깝기도 했다.

당장은 카피하느라 바쁘니까 이미 나와 있다는 모델을 개발자들한테 구현해라고 시키다보니 이런 상태고, 가까운 미래에 한국 IT 시장이 더 성장하면 수학과 통계학을 더 깊게 공부한 사람들이 그런 팀을 이끄는 자리에 올라가는 선순환 구조가 생길꺼라고 조심스레 기대해본다.

You may also like...

댓글 남기기

이메일은 공개되지 않습니다. 필수 입력창은 * 로 표시되어 있습니다