Lasso 그리고 고차원 문제와 오버피팅

Lasso

속성의 숫자가 레코드보다 더 많은 경우 발생할 수 있는 문제는 오버피팅(overfitting)이다. 이는 레코드에서 sparse하게 나타난 패턴을 적절하지 않은 속성으로 과대 해석하게 됨으로써 발생하게 된다. 이 때문에 속성 선택 과정을 거치거나 혹은 더 많은 데이터를 구하는 과정을 거치게 된다.

위와 같은 경우는 앞으로 IoT(Internet of Things)가 일반화되어 특정 단위 시간에 다양한 종류의 데이터가 쏟아지게 되면서 더 큰 이슈로 부상할 것이며, 이미 바이오정보학에서는 일반화된 문제이다.

최근 이런 이슈때문에 주목을 받고 있는 방법론이 Lasso (least absolute shrinkage and selection operator)이다.

Lasso는 모형의 Bias를 다소 올리면서 Variance error를 줄이는 방식을 취하는데, 이때문에 모형이 다소 복잡해지는 측면이 있으나 Variance 에러가 획기적으로 줄기 때문에 전체 에러를 줄이게 되는 효과를 발휘해 실무에서 많이 활용되고 있다.

Lasso

위 식에서 $\lambda$는 추정해야 될 부분으로 대부분의 경우 cross-validation으로 최적값을 찾게 된다. $\lambda$가 0이면 일반적인 최소제곱법을 제공하게 되고 \(\lambda\) 충분히 크다면 모든 추정치가 0인 intercept만 존재하는 모형이 만들어진다.

lasso_fig

위 그림은 Lasso를 설명하는 가장 유명한 그림으로 왼쪽이 Lasso, 오른쪽이 Ridge 방법을 의미한다. 등고선은 RSS가 일정한 부분을 의미하고 푸른 영역은 $\lambda$가 포함된 constraint function을 의미한다. Ridge와 Lasso의 가장 큰 차이점은 $l_1$norm이냐 $l_2$norm이냐의 차이인데, $l_1$일 경우 manhattan distance와 형태의 함수를 제공하고, $l_2$일 경우 euclidean distance 형태의 함수를 제공하는 차이를 보여주는데, 이 부분이 그래프에 표현 되어 있다. Lasso의 경우 최적값은 모서리 부분에서 나타날 확률이 Ridge에 비해 높아 몇몇 유의미하지 않은 변수들에 대해 계수를 0에 가깝게 추정해 주어 변수 선택 효과를 가져오게 된다. 반면 Ridge의 경우 어느정도 상관성을 가지는 변수들에 대해서 pulling이 되는 효과를 보여줘 변수 선택보다는 상관성이 있는 변수들에 대해서 적절한 가중치 배분을 하게 된다. 따라서 Ridge의 경우 PCA와 상당한 관련성이 있다.

필자의 경우 Lasso는 stepwise elimination의 훌륭한 대안으로 활용하고 있다. 실제 stepwise elimination은 이 방법을 구동할때마다 다른 변수 선택이 이루어져 일관성을 보여주지 못한다. 하지만 Lasso의 경우 모델 메트릭스가 general position일 경우 항상 동일한 값을 보여준다는 것이 증명되어 있다. 게다가 느린 stepwise elimination에 비해 상당히 빠르다.

고차원 문제와 오버피팅

위 Lasso와 Ridge 모두 변수가 많은 경우 모델 오버피팅을 피하기 위한 방법중에 하나이며, 이곳에 존재하는 \(l_1\), \(l_2\) norm의 경우 딥러닝에서 오버피팅을 방지하기 위한 용도로까지 활용되고 있다. 하지만 방법론 자체가 오버피팅을 완전히 피할 수 있게 하지는 않는다. 필자가 지금까지 모델링을 결과를 보면서 가장 애를 먹은 부분은 오버피팅문제이고, 지금도 이 이슈는 나를 가장 곤혹스럽게 한다. 단순히 학습셋에서 테스트셋을 쪼개 검증하는 과정을 반복하면서 MSE가 0에 가깝게 나왔다고 엄청난 성능 개선을 했다고 좋아하다가 나중에 실제 미래 데이터에서 성능이 엉뚱하게 나오는 경우에 오버피팅이 발생한 걸 뒤늦게 발견하고 후회해본 경험이 있다면 필자의 마음을 이해할 수 있을 것이다. 참고로 10개의 속성으로 단 두개의 학습셋에 피팅을 해서 MSE 0이 도출되는건 매우 쉽다. 그러나 그렇게 나온걸 여러분이 목적으로 삼은 모형이라 할 수 있는가? 더 많은 데이터 혹은 내일 생성될 데이터를 입력할때 동일한 성능을 보여줄 것으로 생각할 수 있을 것인가?

이런 오버피팅을 피할 수 있는 가장 좋은 방법은 적절한 검증셋을 구축하는 것이다.
많은 분들이 검증셋과 테스트셋을 구분하지 못하는데, 검증셋은 모형이 구축될 당시의 어떠한 관련 정보가 포함되어 있지 않은 셋으로 구성된 셋을 의미한다. 필자의 경우 모형에 쓰일 변수를 선택하는데 Information Value(IV)값을 주로 참고하고, 실제 날짜 정보(예를 들어 년월)를 모형에 넣지는 않지만 날짜정보도 함께 IV값으로 확인한다. 만일 날짜 정보의 IV가 높다면 검증셋은 반드시 out-of-time 데이터로 구축해야 된다고 판단한다(초심자들은 날짜를 변수로 그대로 넣어 성능향상을 했다고 이야기하기도 하는데, 이럴 경우 spurious regression 문제가 발생한다. 날짜를 바로 넣기 보다는 그러한 효과를 일으킨 원인 변수를 찾는 작업을 통해 해당 원인 변수를 적용해야 된다). 결과적으로 트레이닝에 쓰인 데이터의 날짜와 겹치지 않는 미래 혹은 과거의 데이터로 모형을 다시한번 검증해야 된다는 것이다.
이 이외에 validation set을 구축하는 방법은 속칭 golden set을 구축하면서 수행된다. 모형의 성능을 객관적으로 평가할 수 있는 셋을 추가로 구축하는데, 대부분 사람이 구성하게 된다. 요망하는 모형의 decision boundary를 가이드 하는 흡사 SVM의 support vector와 같은 데이터들로 별도 셋을 구성해 놓는 것이라고 생각하면 된다.

일단 구축이 되면 test set 퍼포먼스와 validation set 퍼포먼스를 맞추기 위해서 다양한 시도를 하게 되는데, 이 부분이 모델링의 백미이며, 이 과정을 통해 실제 test와 validation set 모두의 퍼포먼스 향상을 가져오기도 하고, 모형이 더 간단해지면서 해석이 쉬워지기도 한다.


최근에 다양한 분석 모델링 도구들이 나오고 많은 책들이 소개되고 있는 가운데 개인적으로 가장 아쉬운 부분은 무분별한 모델링으로 인해 간과하고 넘어가는 부분들이 상당히 많아지고 있다는 것이다. 이러한 부분들은 모델링 목적에 대한 완벽한 이해와 데이터에 대한 충분한 탐색을 함으로써 얻어지게 되는데 데이터만 주어지면 무작정 모델링을 하게 됨으로써 큰 낭패를 보는 경우가 허다하고 대부분의 경우 적절한 검증셋 준비가 없거나 테스트셋과 다를바 없는 검증셋으로 눈가리고 아웅식으로 진행하기 때문이다. 게다가 이럴 경우 의도치 않은 거짓말(?)을 하게 되기도 한다. 이렇게 된 이유중에는 빅 데이터가 활성화 되면서 일어난 데이터 다다익선(多多益善)미신이 한 몫 했다고 생각한다. 데이터는 뭐든지 추가하면 좋아질 것이라는 믿음은 오히려 데이터가 부족해서 과거에 많이 일어났던 오버피팅 문제를 속성이 많이 늘어나면서 생기는 오버피팅 문제로 전환을 시켜버렸다고 생각한다. 그리고 이러한 문제는 위와 같은 미신때문에 더 해소하기가 어려워졌다.

다시 말하자면 학습모델링 역시 더이상 뺄것이 없을 때 완벽해 진다는 것을 꼭 인지해야 될 것이다. 또한 검증셋은 반드시 모형의 목적에 맞는 그러한 데이터셋으로 엄격하게 구축해 나침반으로 사용해야 된다. 그러한 상황에서 Lasso 방법론도 올바른 모형을 건내줄 것이다.

참고문헌

  • An introduction to statistical learning with R  : http://www-bcf.usc.edu/~gareth/ISL/

“R을 이용한 부동산 데이터 분석 케이스 스터디” 자료 공유

금일 아침부터 행아웃으로 한미 동시에 발표했던 영상과 자료를 공유한다.

이런 식의 발표는 다소 청중의 표정을 볼 수 없어서 답답하긴 했지만 나름 작년에 묵혀둔 자료를 활용해서  “생활 데이터 분석“에 도움을 줬다는데 의미를 두고 싶다.  하지만 올 한해 동안엔 논문에만 집중하기 위해 되도록 이런 발표는 피할 생각이다. ^^;;;

질문중에 “지금 아파트를 사야되나요?” 질문이 무척 재미있었는데, 사실상 분석 행위가 의사 결정을 위한 것이니 이 질문이 대중이 알고 싶어하는 핵심이라는 생각을 해본다.

 

소중한것들에 회귀하는 한해가 되길…

2016년 새해가 밝았다. 참으로 상투적인 표현이다. 새해가 밝았는데, 별로 새로운 느낌은 없기 때문이다.
그렇지만 이런저런 다짐 그리고 과거를 뒤돌아 보는 행위를 하면서 그 느낌을 느껴보려 한다.

작년 한해는 비즈니스 데이터 분석 부분에서 가장 많은 고민을 해왔던 한해였다. 팀에서의 선배로서의 역할 그리고 내가 해야 될 영역의 분석, 다른 조직들간의 커뮤니케이션과 이런 저런 이해되지 않았고 지금도 이해하기 어려운 세속적인 고민들……. 그러나 데이터 분석적인 측면에서 많은 경험을 쌓으려 노력했으며, 어느정도 해당 부분에 성과가 있었다고 본다. 물론 이곳에서 자세한 이야기는 못하겠지만 말이다.
하지만 결과적으로 고민은 많았지만 명시적으로 내것으로 남은건 그다지 많지 않았던 드문 한해였다. 겨우 한달에 한번 썼던 블로그 포스팅 정도가 내 존재를 알렸던 단 하나의 울림뿐이었을 뿐….

이러한 생각들 때문에 개인적으로 작년 말부터 책을 하나 계획해서 틈틈히 집필을 하고 있다. 이 책을 쓰려 하는 이유는 그동안 비즈니스 데이터 분석에 심취해 있으며 느꼈던 맘 한켠의 뭔가 채워지지 않는 느낌 때문이었다.이런 빈 부분은 바로 내가 했지만 내것이 아니다는 생각 때문이었던 것으로 보인다. 왜냐면 비즈니스 데이터 분석 영역은 회사의 중요한 비즈니스 목적에 맞춰져 있어 외부적으로 드러내지 못하는 명백한 한계가 있기 때문이다. 물론 이러한 내용을 책으로 쓰려는건 절대 아니다. 하지만 이런저런 실무 데이터 분석을 해오면서 책에서 보던 기술, 기법과 현실적으로 괴리가 있는 것들에 대해서 후배들이 실수하지 않도록 정리할 수는 있을 것이란 생각이 들었다. 흡사 1차 세계대전 최전방 참호의 진흙탕에서 뒹굴고 피튀기게 싸웠던 선배가 신병들에게 알려줄 수 있는 또하나의 필드 메뉴얼처럼 말이다. 신기하게도 목차를 정리하고 1장을 쓰면서 생각보다 쓸게 많다는 생각에 놀라고 있는 상황이다. 1장을 정리하고 나면 제안서를 들고 출판사를 1월 내에 컨텍할 예정이다.

이러한 책 집필이 올해 첫번째 목표이고, 두번째 목표는 작년 손놓고 있었던 논문 작업에 포커싱할 생각이다. 이를 위해 관련 연구들에 대해서 읽기를 게을리 하면 안될 것으로 보인다. 이 부분이 선행되지 않으면 사실 시작도 어려운 작업이라는 생각이 든다. 그래 시작하자!

세번째 목표는 2년 정도  멀리해두었던 외부강의나 활동을 올해는 활성화 시킬 생각이다. 이런 생각을 한 계기는 2015년 말 평소 존경하시던 분들이 심사위원으로 참여해서 막내 심사위원으로 추천받아 참여했던 Yes24 도서 추천 콘테스트였다. 심사를 하면서 이러한 활동을 거절하는게 아니라 적당한 수준으로 참여해서 나 역시 외부적인 자극을 받아 공부하고 배울 수 있는 창구를 마련해 두는게 낫다는 생각이 들었기 때문이다. 사실 그동안 회사의 데이터 분석 업무에 심취해 모자란 시간 때문에 외부요청이 와도 다른 분들에게 넘기거나 정중히 거절하는 것을 반복해왔다. 하지만 올해는 그런 핑계를 둘러대지 않을 생각이다. 시간이라는 것은 내가 만들기 나름이고 반드시 무엇을 위해서 시간을 비축했다 하더라도 그만큼 효율이 나지 않는 다른 것을 그동안 경험했기 때문이다. 그럴 바에야 나를 바쁘게 만드는게 맞다는 생각이 든다.

마지막 목표는 이 블로그에 있다. 이미 이 블로그는 불행하게도 내것이 아닌게 되었다. 불과 5년 전만 하더라도 이런저런 생각들을 정리하고 발설하는 나만의 창구였지만, 지금은 거의 출판가능한 수준의 글과 소재가 아니면 잘 올리지 않기 때문이다. 물론 그런 소재들이 현재 집필하고 있는 책의 후반부를 장식하고 있지만 앞으로는 좀더 자유로운 주제들로 글을 쓰고 또 자주 쓸 생각이다. 자주쓰는게 무엇보다 중요한것 같다.

살면서 뭔가 회귀할 고향같은 것들이 존재한다는 것은 매우 행복한 상황이란 생각이 든다. 이 블로그가 그렇고, 가족이 그렇다. 다시 예전으로 회귀하는 생활 그게 올해 목표의 총 요약이 되겠다. 여기 오시는 일 1000명 정도의 독자분들도 나름의 회귀할 수 있는 소중한 무언가에 투자하는 한해가 되길 바래본다.

new years!