huginn muninn

모형의 적합성 평가와 과적합(overfitting) 본문

머신러닝

모형의 적합성 평가와 과적합(overfitting)

_maddy 2024. 4. 3. 02:14

 

모형의 적합성을 평가하는 방법

 

 

왼쪽 그래프를 보자 점들은 데이터이다. 

  • 검은색 : 실제 f를 나타내는 모형이다.
  • 노란색 : 가장 낮은 복잡도를 가지는 모델로 편파성이 높아져 가장 높은 MSE값을 가진다. 
  • 초록색 : 가장 높은 복잡도를 가진다. 데이터를 의미하는 점에 거의 비슷한 그래프 추이를 보이고 있는데 이럴 경우 학습 집합에 과적합(너무 똑같이 학습)해서 검증데이터의 MSE는 높아진다. 
  • 하늘색 : 검은색의 모형과 가장 유사한 형태, 분산과 편파성이 모두 적절히 낮아져 검증 데이터의 MSE가 가장 낮다. 

MSE(Mean squared error)

 

  • 모형의 복잡도(flexibility)에 따른 학습 집합의 MSE(회색)와 검증 집합의 MSE(빨간색)의 변화는 위의 그림과 같다. 초반에는 같은 기울기를 보이나 점점 서로 멀어지고 있다. 
  • 학습 집합의 MSE는 복잡한 모형일수록 감소하지만 학습 데이터가 아닌 검증 데이터 또는 다른 데이터의 MSE는 일정 시점 이후로 증가한다. (여기서 MSE는 실제 데이터 값과 예측결과 사이에 차이라고 생각하면 쉽다. 즉 MSE가 작아야 좋은 것임)
  • 증가하는 원인은 왼쪽 그림과 같이 모형이 학습 집합에 과적합되기 때문이다. 

-> 이렇게 과대적합을 방지하기 위해서 실험설계를 잘 해야한다. 

 

 

데이터 분할

실험설계를 위해서는 데이터를 분할해서 사용해주어야 한다. 

https://itwiki.kr/w/%ED%8C%8C%EC%9D%BC:%EB%8D%B0%EC%9D%B4%ED%84%B0_%EB%B6%84%ED%95%A0_%EC%98%88%EC%8B%9C.png

 

 

전체 데이터를 학습 데이터(train data), 검증 데이터(vali data), 테스트 데이터(test data)로 나누어야 한다. 우리가 학습한 데이터는 모델을 학습시키기 위한 데이터일 뿐이고 우리가 실제로 예측하고 싶은 실제 데이터는 현재 우리한테 없기 때문에 실제 성능을 테스트해보기 위해서 이렇게 데이터를 나누어 주는 것이다. 

 

  • 학습 데이터 : 모델을 학습시키기 위해 사용하는 데이터이다. 모델이 변수들 간의 관계를 파악하는 데 사용하는 데이터!!
  • 검증 데이터 : 추정한 모델이 적합한지 검증하는 데이터이다.
  • 테스트 데이터 : 최종적으로 모델의 성능을 평가하는 데이터이다. 

 

중요한 것은 test 데이터를 모델 학습 시 이용하면 절대 안된다는것...!!!!!!!!!!!!!!!!! 정답을 알고있는 상태에서 모의고사를 보는 것과 같다....(철컹철컹..)

 

 

 

 k-Fold 교차검증(k-Fold Cross Validation)

 

데이터의 양이 많으면 상관없지만 적을 경우 학습데이터, 검증 데이터, 테스트 데이터로 각각 5:3:2로 나눈다는 것이 조금 아깝게 느껴진다 ㅠㅜ 그래서 생각해낸 방식이 k-fold 교차검증 방식이다.

 

https://www.incodom.kr/k-%EA%B2%B9_%EA%B5%90%EC%B0%A8_%EA%B2%80%EC%A6%9D

 

  • 모형의 적합성을 보다 객관적으로 평가하기 위한 방법 
  • 데이터를 k(주로 5또는 10)개 부분으로 나눈 뒤, 그 중 하나를 검증 집합, 나머지를 학습 집합으로 분류
  • 위 과정을 k번 반복하고 k의 성능 지표를 평균하여 모형의 적합성을 평가

모든 데이터를 train,test에 활용하기 때문에 과소적합, 과대적합을 방지하고 더욱 일반화된 모델을 생성할 수 있다는 장점이 있다.

 

하지만 만약 데이터가 좀 많이 적을 때 K-fold 로 성능을 평가하다보면 테스트할 때마다 성능이 너무 다르게 나오게 된다. 이럴때는 LOOCV(Leave-One-Out Cross Validation)을 사용한다. 

 

 

LOOCV(Leave-One-Out Cross Validation) 

  • 데이터 수가 적을 때 사용하는 교차검증 방법
  • 총 n(데이터의 수 만큼)개의 모델을 만드는데 각 모델의 하나의 샘플만 제외하고 나머지 데이터 만으로만 학습시키고, 제외한 하나의 샘플로만 성능 지표를 계산한다. 이렇게 도출된 n개의 성능지표로 평균을 내서 최종 성능 지표를 도출하는 방식이다. 

 

 

과적합(overfitting)

 

복잡한 모형일수록, 데이터가 적을수록 과적합이 일어나기 쉬움.

 

https://yngie-c.github.io/machine%20learning/2020/04/30/training_test_reg/

 

학습 데이터에 너무 잘 맞게 학습이 되어있으면 검증 데이터로 모델의 성능을 확인했을 때 예측을 잘 못한다. 즉 과적합 된 모델은 일반화된 모델이 아니라는 것!! 과적합은 데이터사이언스 분야 뿐 아니라 AI 분야에서도 전반적으로 매우 큰 이슈이다. 과적합이 아예 없을 수는 없고, 그나마 과적합을 완화할 수 있는 방법들은 계속해서 나오고 있다.

 

분산(variance)과 편향(bias)의 트레이드 오프

실제 값과 예측 값의 차이에 대한 성능 지표는 모델의 분산과 모델이 예측할 수 있는 정도와 오차항(irreducible)으로 이루어져있다. 

 

 

모델 f^(x)로 모집단의 전체 데이터를 예측할 때 발생하는 총 error를 계산하면 reducible error(분산과 편파성)와 irreducible error로 표현되며, reducible error는 다시 분산과 편향으로 구성된다. 

 

  • 분산 : 전체 데이터 집합 중 다른 학습 데이터를 이용했을 때 , f^이 변하는 정도(복잡한 모델 즉 과대적합일수록 분산이 높다)
  • 편향 : 학습 알고리즘에서 잘못된 가정을 했을 때 발생하는 오차(간단한 모형일수록 편향이 높음)

 

-> 따라서 복잡한 모델을 사용해 편향을 줄이면 분산이 커진다. (반대로 간단한 모형일 경우 편향이 높아지고 분산은 낮아진다)

 

결국 , 우리는 분산과 편향이 작은 모델을 만들어야 한다. 최대한 줄이려고 노력해야한다...

 

아니 분산과 편향이 뭔데!!!!!!!!!!!!!!!!!!!!!!!

 

여기 아주 유명한 예시 그림이 있다. 

 

예측값들이 정답과는 가깝지만 분산되어있을 때 분산이 높다고 말하고

예측값들이 정답과 멀리 떨어져있을 때 편향이 높다고 말한다. 

 

1. 분산이 높고 편향이 낮은 모델 : 굉장히 복잡한 모델이다. 주로 앙상블 모델이 여기에 해당된다. 가끔 중앙을 잘 맞추긴 하지만 다른 데이터에는 잘 안맞는다.

2. 분산이 낮고 편향이 높은 모델 : 간단한 모델인 경우. 아예 중앙을 못맞추는 모습을 볼 수 있다...

3. 분산도 낮고 편향도 낮은 모델 : 이런 모델은 거의 없음...

 

우리는 1,2번 중 하나를 선택해야한다..... 그나마 1번을 골라서 편향을 줄일 수 있는 방법을 모색해야 한다. 

 

 

 

 

우리가 인지하고 있어야 하는 것은 

우리가 아무리 교차검증을 해도, 데이터를 나누어서 모델학습과 검증에 사용해도, 표본은 모집단의 특성을 완벽하게 대변하지 못한다는 것.

-> 오버피팅이 일어날 수 밖에 없음.

오버피팅을 방지하려면 수많은 노력이 필요하다는 것을 알고 있자..!!! 

 

'머신러닝' 카테고리의 다른 글

오차행렬(confusion matrix)  (0) 2024.09.12
다중공선성(Multicollinearity)  (0) 2024.04.07
머신러닝을 위한 수학적 개념 이해  (1) 2024.04.04
Machine Learning의 개념과 종류  (0) 2024.03.30