brunch

You can make anything
by writing

C.S.Lewis

by gimmesilver Jun 18. 2022

예측 모델을 이용한 서비스 개발 시 알아야할 것들 #4

모델링

4. 모델링 

4-1) 예측 모델이 갖고 있는 기본 가정 이해하기 

   많은 분석가들이 모델링 단계에서 잘못된 방법을 사용합니다. 모델링의 목적은 데이터에서 잡음을 최대한 제거하여 정보를 단순화 시키는 것입니다. 이런 측면에서 볼 때 모델링은 일종의 데이터에 대한 손실 압축입니다. 불필요한 노이즈는 최대한 제거하고 중요한 정보만 잘 요약하는 것이 모델링의 목적이기 때문입니다.  

    우리가 음악을 들을 때 많이 사용하는 MP3 를 생각해 보죠. MP3가 음원 데이터를 효율적으로 압축할 수 있는 이유는 일반적인 사람들이 음악을 듣는데 불필요한 주파수 대역의 소리 신호를 과감히 제거하기 때문입니다. 여기서 '불필요한'의 의미는 사람이 인지하지 못하는 소리라는 뜻입니다. 즉, MP3 압축 알고리즘에는 '일반적으로 음악을 듣는데 필요한 주파수 대역은 x ~ y Hz 사이이며 그 외 대역의 소리 정보는 없애도 된다.' 라는 가정이 깔려 있습니다. MP3 가 훌륭한 알고리즘인 이유는 바로 이 가정이 합리적이며 효율적이었기 때문입니다. 반대로 생각하면, 위 가정이 적합하지 않은 대상에게 MP3는 좋은 음원 압축 방법이 아닙니다. 이를 테면, 돌고래에게 MP3는 최악의 압축 포맷일 것입니다. 


    우리가 사용하는 모든 모델링 알고리즘에도 이런 가정이 깔려 있습니다. 따라서 우리가 데이터를 모델링할 때는 데이터를 효과적으로 압축하기 위해 취해야할 정보와 버려야 할 잡음이 무엇인지에 대한 가정이 필요합니다. 이 가정이 잘못되면 잘못된 학습 알고리즘을 사용하게 되고, 그러면 잘못된 모델이 만들어 지는 것이죠.  


    이를 테면, k-means 는 클러스터들의 분산과 공분산이 동일하다는 가정을 깔고 있습니다. 이 얘기는 다시 말해 만약 내가 클러스터링하려는 데이터의 각 그룹들이 분산이나 공분산이 서로 제각각이라면 k-means 로는 제대로된 클러스터링을 할 수 없다는 걸 의미합니다. 이를 테면, 아래 세 가지 경우를 살펴보죠. 아래 세 개의 그림은 각각 다른 특성을 가진 데이터에 대해 k-means 를 이용해 군집화를 수행한 결과입니다. 직관적으로 알 수 있듯이 왼쪽 첫번째 그림을 제외하고 나머지 두 개 경우는 그리 군집화가 잘 되었다고 보기 어렵습니다. 그 이유는 k-means 알고리즘의 성능이 안좋아서가 아니라 첫번째 경우만 k-means 알고리즘의 기본 가정에 적합한 데이터이기 때문입니다. 즉, 첫번째 사례의 데이터는 서로 평균만 다를 뿐 분산이나 공분산은 동일한 네 개의 집단이 모인 특징이 있었기에 k-means 를 적용하기 적합한 데이터인 것이죠. 

 

    반대로 얘기하면, 모델이 필요로 하는 조건을 충족하지 않는 데이터는 아무리 킹왕짱 모델링 기법을 사용하더라도 결과 모델이 데이터의 특성을 제대로 반영하지 못한다는 뜻입니다. 따라서 어떤 학습 알고리즘이나 통계 모델을 사용할 때는 해당 기법이 갖고 있는 기본 가정 및 조건에 대해 정확히 이해하고 있어야 합니다. 참고로 이것은 해당 기법의 상세 이론이나 수식을 모두 이해해야 한다는 걸 의미하는 것은 아닙니다. 


    그 동안 몇 차례 데이터 분석 관련 경진 대회에 심사위원으로 참여해 보니 기본 조건이나 가정이 맞지 않는 상황에서 무분별하게 기법들을 사용하는 경우를 간혹 보곤 했습니다. 


    예를 들어, 수백 개의 독립변수들이 테이블 형태로 정형화된 데이터에 대해 Convolutional Neural Network (CNN) 으로 예측 모델을 만드는 참가팀이 있었습니다. CNN은 데이터의 지역성(locality) 을 모델링에 활용하는 기법입니다. 다시 말해 CNN은 데이터들이 이웃해 있는 데이터와 연관성을 갖고 있다는 가정을 갖고 데이터를 학습하여 모델을 만드는 기법입니다. CNN이 이미지 데이터에 대해 잘 동작한 이유는 이 때문입니다. 그런데 테이블 형태의 정형 데이터는 이런 가정에 그리 적합한 데이터가 아닙니다. 가령, 고객 정보를 담고 있는 테이블이 있을 때 A라는 고객과 B라는 고객은 우연히 테이블 내에서 인접한 행에 위치하는 것이지 테이블 내에 위치가 어떤 중요한 의미를 갖는 것은 아닐 것이기 때문이죠. 게다가 학습 데이터에서 A고객과 B고객이 각각 갖고 있는 특성과 동일한 특성을 갖는 고객이 테스트 데이터에서도 동일한 순서로 인접해서 위치할 것이라 기대할 수도 없습니다. 따라서 이렇게 데이터의 상대적인 위치 관계를 정보로 인식하고 학습하는 CNN을 이용하면 설령 좋은 예측 성능이 나오더라도 우연한 결과일 가능성이 높습니다. 


    또 다른 예로, 비슷한 데이터를 t-SNE를 이용해서 1차원 변수로 차원 축소한 후 이것을 예측 대상이 되는 종속 변수와 같이 scatter plot에 시각화해서 독립 변수와 종속 변수간의 관계를 파악하는 탐사 분석을 시도한 팀도 있었습니다. 그런데 t-SNE는 유사한 집단끼리는 최대한 모이게 하고 이질적인 집단은 최대한 멀리 떨어지게끔 데이터를 조정하는 과정에서 원래 데이터간의 관계 정보를 왜곡하기 때문에 이렇게 왜곡된 결과를 이용해서 종속변수와의 관계를 해석하려는 것은 부적절합니다. 설령 어떤 패턴이 발견되더라도 이건 다시 재현되지 않는 우연의 산물일 가능성이 높습니다. 


    정리하자면, 우리가 흔히 얘기하는 'garbage in, garbage out' 이란 말에서 'garbage'는 어찌보면 완전히 쓸모없는 데이터라기 보다는 이런 기본 조건을 충족하지 못하는 데이터를 의미한다고 이해하는 것이 맞겠습니다. 따라서 제가 생각하기에 모델링 기법을 공부할 때 가장 중요한 것은 해당 기법이 갖고 있는 데이터에 대한 기본 가정(조건)이 무엇인지를 먼저 파악하고 이해하는 것입니다. 상세한 알고리즘이나 수식을 이해하는 것은 그 다음입니다. 

    그런데 대개 많은 주니어 분석가들이 분석 기법을 공부할 때 세부적인 이론이나 원리를 이해하는데에 너무 많은 에너지를 쏟느라 정작 기본적인 가정에 대해선 소홀하는 우를 범하곤 합니다. 혹은 최신 기법이 압도적인 성능을 발휘했다더라 라는 논문이 발표되면 그 기법이 모든 문제를 해결해 줄 것이라는 막연한 기대를 하기도 합니다. 하지만 보유한 데이터가 어떤 특징을 갖고 어떤 분야에서 어떤 목적으로 사용될 것인지에 따라 적절한 모델링 기법은 달라져야 합니다. 


4-2) 탐사 분석 

    많은 분석가들이 대개 탐사 분석을 해보라고 하면 그저 데이터의 한계 분포, pair-wise scatter plot 정도를 그려보고 해당 내용을 정리하는 데에 그칩니다. 혹은 현황 분석과 탐사 분석을 혼동하는 경우도 많습니다. 하지만 예측 모델링을 할 때 탐사 분석의 기본 목표는 어떤 모델링 기법을 사용하는게 적당한지를 파악하는 것이어야 합니다. 그런데 대개 이미 어떤 기법을 사용할지 정해 놓고 탐사 분석은 형식적인 과정에 그치는 경우가 많습니다. 그 외에 탐사 분석 단계에서 자주하는 실수 중에는 다음과 같은 것이 있습니다.  


  - 다중공선성을 제거하겠다며 선형 상관 계수를 이용하여 변수 선택하기

    초보자들이 하는 대표적인 실수입니다. 다중 공선성은 선형 모델의 회귀 계수를 불안정하게 만드는 문제가 있습니다. 이게 의미하는 것은 '다중공선성은 나쁜 것이다!' 가 아니라 1) 내가 만드는 모델이 선형 모델이 아니고, 2) 모델링의 목적이 (회귀 계수 추정이 아니라) 결과에 대한 예측이라면, 다중공선성 문제를 고민할 필요가 없다는 뜻입니다. 한 마디로 말하자면, 예측 모델을 만들 때는 다중공선성 문제에 대해서 신경 쓸 필요가 없습니다.   


  - 실제 예측 모델은 뉴럴 네트워크인데 랜덤 포레스트의 피처 중요도를 기반으로 변수 선택하기

    이것은 예시로 든 것인데 쉽게 말해 실제 사용하는 모델링 방법과 다른 모델을 이용해서 피처 중요도를 파악한 후 이를 이용해 중요 변수를 선택하거나 예측 결과를 해석하는 것을 의미합니다. 이것이 아주 틀린 방법은 아니지만, 그리 좋은 방법도 아닙니다. 왜냐하면 트리 모델과 뉴럴 네트워크는 모델을 생성하는 방식이 많이 다르기 때문에 한쪽 모델에서 중요하다고 추정된 변수가 다른 모델에서도 모델링에 중요하게 쓰일 것이란 보장은 할 수 없습니다.  


  - 변수 간의 상호 작용을 고려하지 않고 단일 변수 기준으로만 종속변수와의 관계나 분포를 확인하여 피처 선택하기

    많은 분석가들이 탐사 분석 및 모델링 과정에서 변수 간의 상호 작용을 간과합니다. 하지만 변수 간에 서로 독립이라는 가정은 대부분의 현실 데이터에서는 맞지 않는 매우 비현실적인 가정입니다. 제가 생각하기에 랜덤 포레스트나 XGBoost 같은 트리 기반 모델이 캐글에서 그렇게 높은 성능을 보여준 이유 중 하나는 이들이 변수 간의 상호 작용을 비교적 잘 모델링 해주기 때문입니다. 

    그런데 많은 경우 분석가들은 탐사 분석 과정에서 종속 변수와 독립 변수 간의 관계를 2차원 scatter plot 으로 확인하거나 독립변수 별, 레이블 별 데이터 분포를 확인해 보는 정도에서 더 나아가지 않습니다. 특히 선형 회귀 분석을 할 때 많은 이들이 interaction term 을 잘 만들지 않으며, 잔차 분석 시에도 여러 변수를 복합적으로 보는 시도를 잘 하지 않습니다. 물론 상호 작용을 확인하는 것은 인지적으로 쉽지 않지만 그럼에도 불구하고 꼭 필요한 작업입니다.  


  - 데이터의 한계 분포 (marginal distribution) 를 오차 분포로 오해하여 변수 변환하기 

    이것 역시 변수 간의 관계를 간과해서 하는 실수입니다. 모든 변수들은 다른 변수의 영향을 받기 때문에, 한계 분포와 오차 분포는 매우 다릅니다. 과거에 출간된 많은 책들이나 인터넷 자료를 보면 한계 분포가 왼쪽으로 쏠려 있는 경우 로그 변환을 통해 종형 분포로 만들어야 한다고 나와 있습니다만 잘못된 방법입니다.  


4-3) 학습 및 평가

    학습 및 평가 단계에서 초보자들이 가장 많이 하는 실수는 학습/평가 데이터를 잘못 분할하여 사용하는 것입니다. 제가 자주 경험한 실수는 크게 두 가지 경우로 나눌 수 있습니다. 


    우선 동일 대상에서 생성된 여러 데이터를 임의 샘플링하여 학습과 테스트 데이터로 나눠서 사용하는 경우가 있습니다. 이를 테면, X-ray 사진을 보고 암을 판단하는 분류 모델을 만들 때 학습/테스트 데이터를 나누는 기준은 사람이 되어야 합니다. 그런데 그냥 사진 단위로 학습/테스트 데이터를 나눠서 동일인이 찍은 여러 장의 X-ray 사진을 학습 데이터와 테스트 데이터에 임의 샘플링하여 사용하는 실수를 하는 것이죠. 이게 문제인 이유는 암을 판단하는 문제에서 중요한 정보는 암환자의 X-ray 사진이 갖고 있는 보편적인 특징인데, 동일한 사람이 학습 데이터와 테스트 데이터 양쪽에 중복해서 있으면 그런 공통적인 특징 대신 특정 사람이 갖고 있는 보편적이지 않은 특성(노이즈)을 정보로 오해하여 학습한 경우를 제대로 평가할 수 없습니다. 그러면 소위 말하는 과적합 (over-fitting) 된 모델을 좋은 모델이라 착각하게 되는 것이죠.


    혹은 시간의 변화에 따른 패턴의 변화를 고려하지 않고 학습/평가 데이터를 사용하는 경우도 있습니다. 이를 테면, 고객의 이탈을 예측하는데 동일 시점의 데이터를 이용해서 학습과 평가에 사용하는 경우가 대표적입니다. 실전에서는 학습 데이터의 시점에서 한참이 지난 후에야 예측 모델을 서비스에서 사용할 수 있습니다. 따라서 정확한 평가를 위해선 실전에서와 마찬가지로 평가 데이터의 데이터 생성 시점이 학습 데이터 생성 시점보다 한참 뒤가 되어야 합니다 (최소한 라벨링이 가능한 시점 이후가 되어야 합니다). 


    이 밖에도 클래스가 불균형한데 accuracy 기준으로 평가하기, 오탐과 미탐의 비용이 서로 다른데 F1 score를 이용하여 평가하기, 활용 목적을 고려하지 않고 무조건 RMSE 를 최소화하도록 모델링 하기 등도 역시 실제 상황을 고려하지 않고 지나치게 일반화한 방법입니다. 앞서 예측 모델을 이용한 서비스 개발 시 알아야할 것들 #1 (brunch.co.kr) 에서도 언급했듯이 모델을 평가할 때는 가능하다면 이런 일반적인 방법 외에 실제 적용할 서비스 목적에 맞는 평가 방법을 고안할 필요가 있습니다. 

브런치는 최신 브라우저에 최적화 되어있습니다. IE chrome safari