본문 바로가기
데이터사이언스/인공지능을 처음공부하는 사람들을 위한 글

머신러닝과 인공지능의 풀리지 않은 문제 과적합(Overfitting)

by 미스터탁 2022. 9. 28.

데이터 사이언스 그리고 인공지능 분야에서 과적합(Overfitting)은 가장 큰 이슈라고 할 수 있다. 아직까지도 완벽하게 이를 완벽하게 해결 하기 위한 방법은 존재 하지 않는다. 다만, 최대한 과적합를 완화시키기 위한 여러 기법들이 있을 뿐이고, 이 또한 데이터의 특성에 따라 효과가 있을지는 미지수이다. 

 

우선 과적합에 대해 다시 한번 정의를 하고 가자. 과적합이라 함은 학습 데이터를 학습한 모델이 학습 데이터에 대한 오차는 거의 가지지 않지만, 테스트 데이터 내에서는 높은 오차를 보이는 현상을 의미한다 (또한, 실제 데이터를 적절히 잘 설명하지 못하고 학습 데이터에 과하게 적합시키는 현상을 말한다). 학습 오차와 테스트 오차의 성능 차이가 어느 정도 이상이어야 과적합이 일어났다라고 기준을 정하기는 어렵다. 다만, 과적합 정도의 차이가 있을 뿐이다.

 

아래 그림을 보자. 아래 그림과 같은 데이터를 설명하고자 하는 모델을 만들 때에, 첫번째 모델과 세번째 모델은 잘 설명하지 못한다라는 것을 알 수 있다. 데이터의는 x가 증가 함에 따라 y값이 낮아졌다가 다시 커지는 비 선형적인 형태를 띄고 있다. 이러한 경우에는 우리는 비선형 모델을 고려해야 하지만, 첫번째 모델의 경우에는 선형 회귀 모델을 고려한것을 알 수 있다. 이에 따라 학습 오차가 커지게 된다. 이러한 경우에는 우리는 Underfitting되었다라고 이야기한다. 두번째 모델의 경우에는 비선형 모델을 통해 적절하게 데이터를 잘 설명하는 것을 알 수 있다. 마지막 모델의 경우에는 매우 복잡한 모델이 적합되어, 모든 학습 데이터를 거의 다 맞추는 모습을 보이고 있다. 이러한 경우에는 학습 데이터에 너무 과하게 적합되고 테스트 데이터에 대한 예측력이 매우 떨어지게 된다. 

 

회귀 문제 뿐만 아니라, 분류 문제 (아래 그림을 보자)에서도 과하게 모델이 학습이 되면, 의사 결정 경계 (decision boundary)가 과하게 복잡해지는 것을 알 수 있다. 혹자는 그렇게 생각 할 수 있다. 학습 데이터든 뭐든 잘 맞추면 되는 거 아니냐고. 물론 학습 데이터에 대한 오차는 줄이면 줄일 수록 좋다. 그렇지만, 잊지 말아야 할 사실은 우리가 가지고 있는 데이터는 매우 일부분일 뿐이고, 결국에 우리의 목표는 우리가 가지고 있지 않은 데이터 또는 보지 않은 데이터(테스트 데이터)를 잘 맞추어야 한다 라는 것이다. 어떠한 모델이든 간에 학습 데이터에 대한 성능이 매우 좋다라고 해서 테스트 데이터에 대한 성능이 좋다라고 보장 할수 는 없다. 

 

 

우리가 위 그림처럼 2차원 또는 3차원으로 데이터와 모델의 선을 그릴 수 있다면, 우린 쉽게 과적합 여부를 확인 할 수 있을 것이다. 하지만, 변수가 많아지면 당연히 이는 불가능하며, 그러므로 우리는 과적합의 여부를 학습 오차와 테스트 오차를 보고 확인한다. 위 그림의 가장 아래 그림을 보면, 모델의 복잡성이 일정 수준 이상 증가하면 증가할 수록 학습 오차가 내려가지만, 테스트 오차는 증가한다라는 것을 알 수 있다. 우리가 가지고 있는 최적의 모델을 찾기 위해서는 당연히 underfitting도 되어서는 안되고 overfitting은 더더욱 되어서는 안된다. 가장 적절한 모델을 선택하기 위해서는 당연히 적절한 실험설계와 다양한 모델을 비교하여 선택 하여야 한다. 과적합의 반대되는 표현을 일반화(Generalization)라고 이야기한다. 즉, 우리는 모델의 일반화를 위한 다양한 기법등을 활용하고 적절한 실험설계를 할 필요가 있다.

 

 

 

데이터의 특성과 크기 그리고 모델의 선택에 따라서 최적의 모델은 달라진다. 어떠한 경우가 베스트라고 정의하기 어렵기 때문에, 우리는 상황에 맞춰서 모델링을 할 필요가 있다. 

 

  • 데이터 관측치가 커지면 커질수록 과적합이 일어날 확률이 감소한다.
  • 표본이 크면 클수록 어떠한 경우든 더 좋은 결과를 가져올 가능성이 높다. 
  • 데이터의 독립변수의 수가 증가하면 증가할수록 과적합이 일어날 확률이 증가한다.
  • 변수가 많으면 많을 수록 좋다라는 생각은 버려야 한다. 독립변수가 증가하면, 학습오차는 더욱 줄일 수 있지만, 과적합 발생 가능성은 증가한다. 
  • 데이터가 실제로 가지는 복잡성보다 더 복잡한 모델을 선택하면 과적합이 일어난다. 
     실제로 데이터는 선형성을 보이는데, 복잡한 모형을 선택하면 과적합이 일어난다. 
  • 간단한 모델 : 선형 회귀 모델(MLR, LASSO, Ridge), 의사 결정 나무(Decision Tree), k-NN 등
  • 복잡한 모델 : Ensemble learning(Random Forest, Gradient Boosting), 딥러닝(Deep learning) 등

 

어떠한 연구 논문 등에서, 이 기법 또는 이 모델은 과적합을 방지한다 등의 문구를 보고, 그 모델을 무조건 사용하는 것은 피해야 한다. 앞서 말했듯이 과적합을 완벽히 방지하는 것은 아직 불가능하다. 과적합을 방지한다 라기보다는 완화 시킬 수 는 있다는 것이 더 옳은 표현일 것이다. 이마저도 결국, 데이터의 특성에 따라 다르기 때문에, 우리가 풀고자 하는 문제에서는 다양한 기법 등을 고려할 필요가 있다. 

 

그렇다면, 아래 두 모델 중에 더 좋은 모델은 무엇일까? Y축은 오차, X축은 모델의 parameter의 수라고 하자.

A 모델과 B 모델의 학습 오차는 A모델이 더 낮고, 테스트(검증) 오차 또한 A모델이 낮다. 하지만, 학습 오차와 테스트 오차의 차이는 B모델이 매우 작다. B모델이 A모델에 비해 일반화를 더 잘 시켰기 때문에, B모델이 더 좋다 라고 생각 할 수 있으며, 어쨌든 테스트 오차는 A모델이 더 작기 때문에 A모델이 더 좋다 라고 생각 할 수 도 있다. 사실 이 경우는 매우 애매한 상황이다.

 

만약 A모델의 테스트 오차가 0.15 정도 라고 하면, 무조건 A모델을 선택할 것이다. 

그렇지 않더라도 (현재 상황에서도), 실험 설계가 적절히 되어있다라는 가정하에 결국, A모델을 선택할 것이다. 

 

사실 두 모델 모두 과적합이 일어났다고 보기는 어렵다. 모델이 복잡함에 따라 테스트 오차가 다시 올라가지 않고 어느정도 수렴하고 있다라는 것을 확인할 수 있기 때문이다. Gradient boosting 같은 모델에서도 regularization term을 잘 조절하면, 이와 같은 결과를 얻을 수 있다. 필자라면 오히려 조금 더 복잡한 모델을 학습시켜 (parameter의 수를 늘려서) 테스트 오차의 방향성을 확인하고 결정 할 것이다. 

 

 

과적합은 백번 강조해도 부족할 만큼, 매우 매우 중요한 이슈이다. 하지만, 많은 경험을 쌓기 전까지에는 과적합이 피부로 와닿기는 쉽지 않다. 그렇기 때문에, 우리는 다양한 실전 경험을 쌓을 필요가 있다. 결국에는, 우리는 데이터와 상황에 맞는 적절한 실험 설계와 적절한 모델을 선택을 해야한다. 사실 이 문장 하나가 데이터 분석을 가장 잘하는 지름길이라고 할 수 있다. 

반응형

댓글