본문 바로가기
Machine Learning/데이터 전처리

[데이터 전처리] 훈련 및 테스트 데이터 분할

by 블루드래곤 2022. 11. 2.
728x90

훈련 및 테스트 데이터 분할은 무엇을 의미하는가? 일반적으로 전체 데이터를 여러 개 집합으로 분할하고 그중에서 일부는 모델을 훈련할 때 사용하고 나머지는 모델 성능을 평가할 때 사용된다. 본 포스팅은 모델을 구축하고 검증하기 위한 데이터 분할 방법에 중점을 두고 있다.  

그럼 데이터 분석에서 데이터  분할은 무엇인가?

일반적으로 데이터 분할은 전체 데이터를 다음과 같은 3개의 집합으로 분할하는 과정을 의미한다.

  • 훈련 데이터: 개발한 모델을 훈련할 때 사용
  • 검증 데이터: 개발한 모델의 최적의 하이퍼 파라미터를 찾을 때 사용
  • 테스트 데이터: 최종 모델의 성능을 평가할 때 사용

출처: https://i.stack.imgur.com/pXAfX.png

훈련 및 테스트 데이터의 역할은 무엇인가?

개발을 완료한 모델에 새로운 데이터를 입력했을 때 일반화된 성능을 나타내는지를 확인하는 가장 효율적인 방법은 데이터를 훈련 데이터(Training Dataset)와 실험 데이터로(Test Dataset) 분할하는 것이다. 여기서 훈련 데이터는 개발한 모델을 훈련할 때 사용하고, 실험 데이터는 성능을 평가할 때 사용된다. 성능 평가방법은 목적에 따라 MAE, F1-score 등 다양한 지표를 사용할 수 있다.

 

일반적으로 전체 데이터의 80%는 모델을 훈련할 때 사용하고 나머지 20%는 성능을 평가할 때 사용된다. 그러나 데이터 세트의 크기가 지나치게 크다면 실험 데이터의 비율을 낮게 설정할 수 있다. 예를 들어, 데이터 크기가 약 천만 개라고 가정할 때 그중에서 1%를 추출하면 약 100,000개를 나타내는데 이는 모델 성능을 검증하는데 충분한 크기이다.

검증  데이터의 역할은 무엇인가?

실험 데이터를 사용하여 학습된 모델의 성능 평가를 통해 최적의 하이퍼 파라미터를 찾았다고 가정하자. 최종 구축된 모델을 실제 서비스에 적용했을 때 성능이 예상보다 낮게 나타나는 경우가 존재한다. 이는 실험 데이터를 사용하여 모델의 성능을 평가했기 때문에 하이퍼 파라미터가 실험 데이터에 최적화된 모델을 구축했기 때문이다. 즉, 새로운 데이터가 입력되면 효과적인 성능을 나타내기 어렵다. 

 

이와 같은 문제를 해결하는 방법은 훈련 데이터에서 별도로 검증 데이터를 분할하여 다양한 유형의 모델을 평가하고 그중에서 성능이 우수한 모델을 선택할 수 있다. 다시 말해, 훈련 데이터를 사용하여 다양한 파라미터를 설정한 모델을 구축하고 검증 데이터를 통해 구축된 여러 모델의 성능을 측정하여 가장 우수한 모델을 선택한다. 이러한 작업이 끝나면 검증 데이터를 포함한 전체 훈련 데이터를 사용하여 선택한 모델을 훈련하여 최종 모델을 구축한다. 마지막으로 실험 데이터를 사용하여 최종 훈련된 모델의 성능을 평가한다. 

데이터를 분할해야 하는 이유는 무엇인가?

데이터 분할은 일반적으로 모델의 과대적합과 과소적합 문제를 방지하기 위해 널리 사용된다.

  • 과대적합(Overfitting): 훈련 데이터에 지나치게 최적화되어 일반화된 성능을 나타내지 못하는 문제가 발생
  • 과소적합(Underfitting): 개발한 모델이 지나치게 단순하여 데이터에 내재된 패턴을 효과적으로 학습 못하는 문제가 발생

출처: https://1.cms.s81c.com/sites/default/files/2021-03-03/model-over-fitting.png

과대적합(Overfitting)

일반적으로 모델을 훈련할 때 사용 가능한 모든 입력 특성(Feature)을 사용하여 대상(Target)을 예측하려고 시도한다. 과대적합은 모델이 훈련 데이터를 지나치게 잘 학습한 경우를 의미한다. 즉, 특성 간의 관계를 지나치게 밀접하게 학습했기 때문에 실제로 존재하는 것보다 더 많은 패턴을 감지할 수 있다. 이런 경우에는 훈련 데이터에서 존재하는 편향을 잘 포착하여  모델을 효과적으로 학습했다고 생각할 수 있으나 실제로는 데이터에 존재하는  다양한 패턴이 나타나지 않는다. 따라서 모델은 훈련 데이터에서 효과적인 성능을 나타내지만 훈련 데이터에서 감지된 패턴이 존재하지 않는 새로운 데이터에서는 일반화된 성능을 나타내지 못한다. 이는 모델이 지나치게 복잡해 데이터에 존재하는 실제 패턴의 양에 비해 너무 많은 규칙 또는 기능을 가지기 때문이다. 일반적으로 과대적합을 해결 방법은 다음과 같다.

  • 파라미터 수가 적은 모델을 선택
  • 훈련 데이터에 포함된 특성 수를 줄이거나, 모델에 가중치 규제(regularization)를 적용
  • 훈련 데이터 수를 늘리거나 편향을 제거(이상치 등 제거)

과소적합(Underfitting)

반대로 과소적합은 모델이 지나치게 단순하여 훈련 데이터에 내재된 패턴을 효과적으로 학습하지 못할 때 발생한다. 이와 같은 모델은 훈련 데이터나 새로운 데이터 모두에서 효과적인 성능을 나타내기 어렵다. 실제 분석에서 과대적합보다 더 드물게 발생하여 대부분은 모델이 단순해서 발생한다. 일반적으로 새로운 데이터에 효과적으로 일반화시키기 위해 훈련 데이터에서 가능한 많은 패턴을 감지하는 모델을 개발하는 것이 목적이다. 다시 말해, 과대적합이나 과소적합이 아닌 균형 있는 모델을 구축하는 것이 중요하다. 일반적으로 과소적합을 해결 방법은 다음과 같다.

  • 파라미터 수가 더 많은 최적화된 모델을 선택
  • 훈련 데이터에서 가능한 모델에 적합한 효과적인 특성을 추출
  • 가중치 규제를 감소 등 모델에 대한 제약을 최소화

 

Reference

[1] 핸즈온 머신러닝 (2 판): 사이킷런, 케라스, 텐서플로 2 를 활용한 머신러닝, 딥러닝 완벽 실무. 한빛미디어, 2020.

[2] Train/Test Split and Cross Validation – A Python Tutorial, https://algotrading101.com/learn/train-test-split/

'Machine Learning > 데이터 전처리' 카테고리의 다른 글

[데이터 전처리] 교차 검증  (0) 2022.11.04

댓글