관련링크
https://www.facebook.com/groups/TensorFlowKR/permalink/745634182444309/
https://www.facebook.com/groups/TensorFlowKR/permalink/759594357714958/
대개 많은 자료에서 overfitting 과 underfitting 을 모델의 복잡도 측면으로만 설명합니다. 그러나 데이터 분석에서 모델링 기법 못지 않게 중요한 것은 모델링의 재료가 되는 데이터입니다. 그래서 이번 글은 모델링 측면에서만 보기 보다는 데이터 자체에 좀 더 집중해보자는 취지에서 써봤습니다.
오버피팅과 언더피팅은 데이터 모델링을 공부할 때 알아야 하는 중요한 개념 중 하나입니다. 하지만 여러 커뮤니티 등을 보면 이걸 다소 피상적이거나 편향적으로만 이해하는 경우를 종종 봅니다. 제 생각에 이것은 기존의 많은 자료들이 오버피팅과 언더피팅을 제한적인 관점에서만 설명하기 때문이 아닌가 싶습니다. 오버피팅과 언더피팅을 설명하는 자료들은 대개 아래와 같은 그림을 제시하며 설명합니다.
노파심에 강조하자면 이것이 틀린 그림이나 설명은 아닙니다. 다만 이런 그림은 오버피팅과 언더피팅을 단지 모델의 복잡함 측면으로만 생각하게 만드는 문제가 있다고 생각합니다. 그래서 오버피팅과 언더피팅을 절충 (trade-off) 관계라고만 생각하는 것이죠. 이를 테면 이런 식의 설명에 익숙해지면 모델링을 아래 그림처럼 생각하기 쉽습니다. 그래서 사람들은 예측 성능을 개선하기 위해 모델을 더 복잡하게 만들지 혹은 과적합을 피하기 위해 복잡도를 낮출지에 대해서만 고민합니다. 다시 말해, 뭔가 모델의 복잡한 정도를 잘 조정하면 최적의 모델을 만들 수 있을 것이라 기대하는 것이죠.
그러나 실제 데이터를 분석할 때는 모델의 복잡도를 고려하기에 앞서 모델이 표현하려는 대상인 데이터가 갖고 있는 정보의 '질'을 먼저 생각해야 합니다. 이런 측면에서 볼 때 제가 생각하는 좀 더 바람직한 오버피팅과 언더피팅의 정의는 다음과 같습니다.
언더피팅: '모델링 대상'을 설명하기에 필요한 신호(signal)를 충분히 모델에 반영하지 못한 상태
오버피팅: '모델링 대상'을 설명하는데 불필요한 잡음(noise)을 과도하게 모델에 반영한 상태
이를 도식으로 표현하면 아래와 같습니다.
위 정의가 기존의 설명과 갖는 가장 큰 차이점은 언더피팅과 오버피팅이 절충 관계를 갖는다고 가정하지 않는 점입니다. 대개 어떤 모델이 언더피팅 상태인지 혹은 오버피팅 상태인지를 현재 보유한 데이터를 기준으로 판단합니다. 그러나 제가 보기에 이것은 학습 데이터가 모델링 대상을 설명하기에 충분한 정보를 갖고 있다는 가정을 한 상태에서의 설명입니다. 그러나 현실에서는 이 가정을 충족하고 있다고 보장할 수 없는 상황이 많습니다. 본질적으로 보자면, 언더피팅이나 오버피팅은 모델의 복잡도에도 영향을 받지만 내가 모델링을 위해 사용하는 학습 데이터의 질에도 큰 영향을 받습니다.
모델이란 단어는 현실에서 굉장히 자주 그리고 광범위하게 사용하는 말입니다. 패션 모델, 모델 하우스, 프라모델 등등 다양한 곳에서 모델이라는 단어를 사용하고 있죠. '모델 (model)'은 우리 말로 번역하면 '모형' 인데 이 말의 사전적 의미는 '어떤 대상을 본떠 만듦' 입니다.
이를 테면, 모델 하우스는 실제 살게될 집을 본떠 만든 것이고, 프라모델은 실제(혹은 가상의) 로봇이나 기계를 본떠 만든 것이죠. 패션 모델 역시 어떤 대상(수많은 옷을 입을 사람들)을 대표하는 사람이라는 측면에서 비슷한 의미를 갖습니다. 즉, 이들은 모두 공통적으로 1) 실체가 아니라는 점과 2) 실체와 비슷한 대체물 이라는 특징을 갖고 있습니다. 그리고 이런 모델을 만드는 작업을 우리는 모델링이라고 부릅니다.
그럼 이제 우리같은 데이터 분석가가 만드는 데이터 모델에 대해서도 비슷한 정의를 내릴 수 있습니다. 데이터 모델은 실제 데이터를 대신하여 본떠 만든 대체물인 것이죠. 그리고 이렇게 어떤 데이터를 이용해서 그 데이터를 대체하는 모형을 만드는 작업이 바로 데이터 모델링입니다. 때론 기계 학습 모델이라는 말을 쓰기도 하는데 이것은 기계 학습 알고리즘을 이용해서 만든 모델이라는 뜻으로 해석할 수 있습니다.
그러면 왜 우리는 모델을 만들까요? 그 이유는 모델을 만들면 실제 대상보다 더 편하게 (혹은 적은 비용으로) 활용할 수 있기 때문입니다. 모델 하우스의 목적은 사람들에게 실제 집을 지어서 보여주지 않아도 최대한 실제 집을 경험할 수 있게 해줍니다. 패션 모델 역시 모든 사람들이 일일이 직접 옷을 입어 보지 않더라도 그 옷을 입었을 때의 모습을 간접적으로 보여주는 역할을 하며, 프라모델은 내가 실제 건담을 만들지 못하더라도 그 비슷한 만족감을 주는 것이죠.
데이터 모델 역시 마찬가지입니다. 데이터 모델은 내가 수많은 데이터를 매번 확인하지 않아도 비슷한 작업을 할 수 있게 해줍니다. 가령, 고양이를 인식하는 모델을 잘 만들면 나는 매번 어떤 이미지 데이터가 고양이를 나타낸 이미지인지를 기존에 내가 알고 있는 모든 고양이 및 다른 대상의 이미지 데이터와 비교해 보지 않더라도 모델만을 이용해서 판단할 수 있겠죠.
결국 이렇게 모델링의 목적을 생각한다면 우리는 어떤게 좋은 모델인지 얘기할 수 있습니다. 좋은 모델은 실체가 갖고 있는 속성을 최대한 많이 포함하되 실체보다 최대한 단순해야 합니다. 이런 측면에서 보자면 모델링은 일종의 데이터를 압축하는 작업이라고 볼 수 있습니다. 데이터를 효과적으로 압축하려면 중복되거나 정보로써의 가치가 없는 자료는 최대한 버리고 꼭 필요한 정보만 남기는 것이 필요합니다.
예를 들어 우리가 음악 들을 때 많이 사용하는 MP3 파일 형식은 원래 음원 데이터에서 반복되는 정보를 좀 더 축약된 형식으로 줄일뿐만 아니라 가청 범위를 넘어서는 음원 정보를 버림으로써 음원의 사이즈를 크게 줄여줍니다. 그런데 만약 우리가 음원 사이즈를 단순히 줄이겠다고 아무 정보나 버리게 되면 사이즈를 줄일수는 있을지 모르나 음원의 품질은 떨어질 것입니다. 심지어 극단적으로는 정보 압축을 잘못해서 불필요한 잡음이 실제 음악보다 더 많이 담길 경우 그 음원 파일은 더 이상 음악을 들을 때 사용할 수 없겠죠.
마찬가지로 효과적인 모델링을 위해선 실제 정보로써 가치가 없는 자료는 최대한 버리는 동시에 꼭 필요한 정보는 효과적으로 축약해야 합니다. 이 때 정보로써 가치가 없는 자료를 잡음 혹은 소음 (noise) 이라고 부르고 모델에 들어가야 할 가치있는 정보를 신호 (signal) 라고 부릅니다.
모든 데이터에는 우리가 모델링을 하려고 하는 어떤 대상을 표현하기 위해 필요한 속성과 불필요한 속성이 있습니다. 앞서 예로 들었던 고양이를 생각해 보면, 고양이를 모델링하려면 고양이가 가진 외형적인 특징이나 생물학적인 습성 등이 필요하겠지만 털의 색깔은 중요하지 않을 것입니다.
그런데 여기서 중요한 점은 신호와 잡음이 어떤 절대적인 기준은 아니라는 점입니다. 어떤 속성이 신호인지 혹은 잡음인지를 결정하는 것은 우리가 모델링하려는 대상이 무엇인지에 따라 달라집니다. 예를 들어 우리가 '고양이'를 모델링한다면 털의 색깔은 잡음에 가까운 정보이지만 모델링 대상이 '귀여운 회색 고양이' 라면 털의 색깔은 중요한 신호가 되겠죠. 결국 어떤 속성이 신호인지 잡음인지를 판단하려면 모델링 대상이 무엇인지를 명확히 정의하는 것이 필요합니다.
모델링 대상이 명확히 정의되고 나면 이제 우리가 보유한 데이터가 해당 대상을 표현하는데 필요한 신호를 충분히 보유하고 있는지 (그리고 잡음은 얼마나 많은지) 확인해야 합니다. 우리가 모델링하려는 데이터는 크게 아래와 같이 네 가지로 분류할 수 있습니다.
Type A - 모델링에 포함해야 할 신호 정보는 많고 노이즈는 거의 없는 데이터. 일반적으로 여러 과학 분야에서 실험을 하는 목적은 바로 이런 데이터를 확보하기 위해서입니다. 또한 대개의 통계학과 데이터 분석 실습용 과제 데이터가 이런 부류에 속합니다. 상당수의 통계 모델링 기법은 이런 데이터를 다루는데 유용합니다.
Type B - 신호도 많고 잡음도 많은 데이터. 이미지, 텍스트, 음성 등의 데이터가 이런 부류에 속합니다. 현재 딥러닝이 강점을 보이는 분야는 대개 이런 데이터이며, 모델의 복잡도 관점에서의 언더/오버 피팅 조정은 이런 데이터를 모델링할 때 매우 중요합니다.
Type C - 모델링에 필요한 신호 정보는 거의 없고 잡음만 많은 데이터. 요즘 보면 주식이나 비트코인 시세를 예측하기 위해 딥러닝을 이용하는 경우를 종종 볼 수 있는데 이런 데이터들이 이 부류에 속합니다. 이런 데이터는 아무리 좋은 기계 학습 기법을 사용하더라도 제대로 된 모델을 만들 수 없습니다.
Type D - 신호와 잡음 모두 부족한 데이터. 모델링을 하기에는 데이터가 부족한 상황입니다. 더 많은 데이터를 구해야 합니다.
내가 보유한 데이터가 위 네 가지 경우 중 어디에 속하는지 알려면 도메인 지식과 함께 '탐색적 데이터 분석 (Exploratory Data Analysis, EDA)' 과정이 필요합니다. 현재 보유한 데이터의 상태가 어떤지에 따라 어떤 모델링 기법을 사용하는게 좋을지, 얼마나 전처리 작업이 많이 필요할지, 혹은 더 많은 데이터를 수집해야할지 등을 알 수 있습니다.
정리하자면, 예측 모델을 만들 때는 데이터가 갖고 있는 여러 가지 특성 중에서 내가 모델링하려는 대상을 정확히 표현하는데 필요한 신호와 그렇지 않은 잡음이 무엇인지를 잘 분리해 내는 것이 가장 중요합니다. 이를 위해 내가 갖고 있는 데이터에서 신호를 최대한 잘 추출하기 위해 적절한 모델링 기법을 사용하는 것이 중요합니다. 그러나 이에 앞서 내가 갖고 있는 데이터가 모델링에 필요한 충분한 정보(신호)를 갖고 있는지 확인하는 것이 선행되어야 합니다. 만약 애초에 충분한 신호를 보유하지 못한 데이터로 모델링을 한다면 아무리 모델의 복잡도를 조정하더라도 잡음의 크기만 조정될 뿐 신호의 세기는 바뀌지 않습니다 (즉, 언더피팅 상태를 벗어날 수 없습니다).
최근 딥 러닝이 유행하면서 데이터에 대한 확인 없이 무작정 좋은 기법이라고 알려진 알고리즘을 시도하기에 급급한 경우를 종종 봅니다. 이를 테면 무작정 딥러닝을 시도해 본 후 traininng error 가 너무 높으니 layer를 더 늘려야겠다라거나, training error 보다 validation error 가 훨씬 높으니 drop out rate를 더 높여야겠다라는 식으로 작업하는 것이죠.
학교와 같은 제한된 환경에서는 좋은 데이터는 커녕 그냥 데이터 자체도 구하기가 힘듭니다. 아마 이런 이유로 인해 모델링 기법에 더 집착하는게 아닌가 싶습니다. 하지만 이 때문에 새로 데이터 분석이나 기계 학습을 공부하는 분들이 본질을 오해하는 경우도 많은 것 같습니다. 마치 어떤 데이터든지 좋은 기법을 쓰면 좋은 결과가 나올 것이란 환상을 갖는 것이죠. 오버피팅과 언더피팅 역시 모델링 기법으로 해결할 수 있을 것이란 환상이 있는 것 같습니다.
요리를 할 때 적절한 재료가 없다면 아무리 좋은 레시피도 쓸모가 없겠죠. 더군다나 사용해야 하는 재료가 상했다면, 아무리 뛰어난 요리사라 하더라도 좋은 요리를 만들 수 없을 것입니다. 데이터 분석 역시 좋은 모델링 기법을 찾기에 앞서, 보유한 데이터가 모델링 목적을 충족시킬 수 있는지 먼저 확인해야 합니다.
정리하자면, 예측 모델을 만들 때는 어떤 기계 학습 기법을 사용할지 혹은 하이퍼 파라미터는 어떻게 튜닝할지 등을 고민하기에 앞서 보유한 데이터가 모델링 목적을 달성하는데 충분한 수준인지를 파악하는 것이 먼저 필요합니다.