최종 업데이트 07:21
소개 검색
SEOUL AI PRESS

AI와 기술을, 사실부터

강좌 강좌

모델을 공정하게 평가하는 법: 학습·검증·테스트 데이터 나누기

Google for Developers

모델은 학습에 사용한 데이터에서는 잘 작동하더라도 새로운 데이터에서 실패할 수 있다. 데이터를 세 묶음으로 나누면 이 위험을 미리 확인할 수 있다.

한 문장으로 이해하기

모델을 평가할 때는 학습에 쓴 데이터와 다른 데이터를 써야 한다. 같은 데이터로 학습하고 평가하면 모델이 학습 데이터에만 맞춰진 것인지, 새로운 데이터에도 적용되는 패턴을 배운 것인지 구분할 수 없다. 이 강좌를 마치면 세 가지를 알 수 있다. 첫째, 왜 데이터를 나눠야 하는가. 둘째, 세 묶음이 각각 어떤 역할을 하고 어떤 순서로 쓰이는가. 셋째, 좋은 평가 데이터의 조건은 무엇인가. 사전에 필요한 지식은 ‘모델이 데이터로 패턴을 학습한다’는 기본 개념뿐이다.

왜 필요한가

학생이 시험 문제를 미리 외운다면 시험 점수가 실력을 반영하지 않는다. 이는 이해를 돕기 위한 비유다. 모델도 마찬가지로, 학습에 쓴 데이터로 평가하면 새로운 데이터에서도 정확한 예측을 하는지 알 수 없다.

처음에는 데이터를 학습용과 테스트용 두 묶음으로만 나누는 방법을 떠올리기 쉽다. 그런데 테스트 결과를 보고 모델을 수정하는 작업을 반복하면 문제가 생긴다. 테스트 결과를 모델 수정에 반복해서 이용할수록 테스트 데이터의 특성에 모델이 맞춰질 가능성이 커지기 때문이다. 그러면 테스트 데이터는 ‘공정한 심판’이 아니라 ‘반복해서 본 연습 문제’가 되어, 새 데이터에 대한 평가라는 신뢰를 잃을 수 있다.

이 문제를 줄이려면 묶음이 세 개 필요하다.

어떻게 이루어지는가

모델의 학습과 평가에 쓰는 원본 데이터 모음을 세 묶음으로 나눈다.

  1. 학습 데이터(training set): 모델이 패턴을 배우는 데 사용한다.
  2. 검증 데이터(validation set): 개발 중간에 모델을 점검하고, 모델의 설정을 조정하는 기준으로 삼는다.
  3. 테스트 데이터(test set): 개발이 끝난 뒤 최종 성능을 확인하는 데 사용한다.

작업 순서는 다음과 같다.

  1. 학습 데이터로 모델을 학습시킨다.
  2. 검증 데이터로 중간 성능을 확인하고 모델을 수정한다.
  3. 검증 데이터에서의 결과가 충분히 좋아지면 테스트 데이터로 최종 확인한다.
  4. 개발 중 반복 점검에는 검증 데이터를 쓰고, 테스트 데이터는 최종 확인 용도로 아껴 둔다.

다만 검증 데이터든 테스트 데이터든 그 결과를 모델 개선 결정에 반복해서 쓸수록, ‘새 데이터에 대한 평가’라는 신뢰가 낮아질 수 있다. 신뢰성이 낮아졌다면 새 데이터를 수집해 검증·테스트 데이터를 갱신하는 방법을 고려할 수 있다.

하나의 예시로 따라가기

가상 예시: 스팸 메일을 분류하는 모델을 만든다고 가정한다. 수집한 이메일을 학습용, 검증용, 테스트용 세 묶음으로 나눈다. 몇 대 몇으로 나눠야 한다는 고정된 비율 요건은 없다.

  • 학습 데이터: 모델이 스팸과 정상 메일의 차이를 학습한다.
  • 검증 데이터: 개발 중간에 성능을 확인하고, 입력 특성(모델이 예측할 때 사용하는 입력 정보)을 추가하거나 제거하는 등 모델의 설정을 바꾸며 개선한다.
  • 테스트 데이터: 개발이 끝난 뒤 최종 성능을 확인한다.

여기서 주의할 점이 있다. 데이터를 나눈 뒤에는 검증·테스트 데이터에서 학습 데이터와 중복되는 항목을 찾아 제거해야 한다. 같은 스팸 메일이 학습 데이터와 테스트 데이터 양쪽에 들어가 있으면, 모델은 사실상 정답을 본 적 있는 문제를 다시 푸는 셈이 된다. 이 경우 새로운 예시를 대상으로 한 공정한 평가가 되지 않는다.

또한 학습 데이터의 입력 특성에 특정 변환을 적용했다면, 검증 데이터, 테스트 데이터, 실제 사용 데이터에도 동일한 변환을 적용해야 한다. 학습 때와 다른 변환은 일관된 평가와 실제 적용을 방해할 수 있다.

언제 쓰고 언제 쓰지 않는가

세 묶음 분리에는 상충 관계가 있다. 예시의 수가 정해져 있을 때 검증·테스트용으로 예시를 많이 배정할수록 학습에 쓸 예시는 그만큼 줄어든다. 따라서 평가의 신뢰성과 학습에 쓸 데이터의 양 사이에서 균형을 잡아야 한다.

좋은 검증·테스트 데이터의 조건도 중요하다.

  • 우연에 크게 좌우되지 않는 평가가 가능할 만큼 예시가 충분히 많다. 필요한 양이 정해진 비율로 제시되지는 않는다.
  • 원본 데이터 모음 전체를 고르게 대표한다.
  • 모델이 실제 현장에서 마주칠 데이터와 특성이 비슷하다.
  • 학습 데이터와 중복되는 항목이 없다.

한계도 있다. 테스트 결과가 좋아도 실제 성능이 나쁠 수 있으며, 이때는 원본 데이터 모음과 실제 사용 환경 데이터 사이의 차이를 점검해야 한다. 앞의 스팸 분류 예시(가상 예시)에서 스팸의 유형이 시간이 지나며 달라졌다면, 과거 이메일로 만든 테스트 데이터가 현재의 스팸을 대표하지 못할 수 있다. 이럴 때는 새 데이터를 수집해 평가 데이터를 갱신하는 방법을 고려할 수 있다.

핵심 정리와 확인문제

데이터를 학습·검증·테스트 세 묶음으로 나누는 이유는 모델이 새로운 데이터에서도 잘 작동하는지 공정하게 평가하기 위해서다. 검증 데이터는 개발 중 반복 점검에 쓰고, 테스트 데이터는 최종 확인에 쓰되 반복 사용은 신뢰를 낮출 수 있다. 다만 별도의 데이터로 평가한다고 실제 성능이 저절로 보장되는 것은 아니다. 평가 데이터가 실제 사용 환경을 대표하고 학습 데이터와 중복되지 않을 때 비로소 믿을 수 있는 평가가 된다.

확인문제

문제 1. 학습 데이터로 학습한 모델을 같은 학습 데이터로 평가하면 어떤 문제가 생기는가?

정답·해설: 모델이 학습 데이터에만 맞춰진 것인지, 새로운 데이터에도 적용되는 패턴을 배운 것인지 구분할 수 없다. 평가 점수가 좋더라도 새 데이터에서의 예측 능력을 확인한 것이 아니다.

문제 2. 학습·검증·테스트 데이터는 각각 어떤 역할을 하며, 어떤 순서로 사용하는가?

정답·해설: 먼저 학습 데이터로 모델이 패턴을 배우게 한다. 다음으로 검증 데이터로 개발 중간의 성능을 점검하고 모델의 설정을 조정한다. 검증 결과가 충분히 좋아지면 마지막으로 테스트 데이터로 최종 성능을 확인한다. 다만 검증·테스트 데이터의 결과를 모델 개선 결정에 반복해서 쓰면 새 데이터에 대한 평가라는 신뢰가 낮아질 수 있으므로, 테스트 데이터는 최종 확인 용도로 아껴 둔다.

문제 3. 좋은 검증·테스트 데이터가 갖춰야 할 조건을 나열하면 무엇인가?

정답·해설: 첫째, 우연에 크게 좌우되지 않는 평가가 가능할 만큼 예시가 충분히 많아야 한다. 둘째, 원본 데이터 모음 전체를 고르게 대표해야 한다. 셋째, 모델이 실제 현장에서 마주칠 데이터와 특성이 비슷해야 한다. 넷째, 학습 데이터와 중복되는 항목이 없어야 한다. 중복이 있으면 이미 본 문제를 다시 푸는 셈이 되어 공정한 평가가 되지 않으므로 찾아서 제거해야 한다.

참고자료