MLY:05. 개발 세트과 테스트 세트



이전에 얘기한 고양이 사진 예제로 돌아가 보겠습니다. 사용자가 모바일 앱을 실행하고, 여러 사진을 앱에 올리고 있습니다. 여러분은 이 중에서 고양이 그림을 자동으로 찾고 싶습니다.

개발팀은 여러 웹 사이트에서 고양이 사진(긍정 데이터)과 고양이가 아닌 사진(부정 데이터)을 다운로드받아 대규모 학습 세트(Training Set)를 만들었습니다. 이 데이터 세트를 70%:30%의 비율로 나누어 학습 세트와 테스트 세트를 만듭니다. 이 데이터를 사용하여 교육 및 테스트 세트에서 잘 작동하는 고양이 탐지기를 제작합니다.

그러나 이 고양이 분류기를 모바일 앱에 탑재했지만, 분류 성능이 저조하다는 것을 알게 됩니다.

어떻게 된 걸까요?

사용자가 올리는 사진은 학습 세트를 구성하는 웹 사이트에서 내려받은 이미지와 상당히 다룹니다. 모바일 폰으로 촬영한 사진은 해상도가 낮고 흐릿하면 조명이 약한 경향이 있습니다. 웹 사이트 이미지로 학습 세트와 테스트 세트를 만들었기 때문에, 이 알고리즘은 휴대 전화 사진에 일반화되지 않았습니다.

빅데이터의 시대 이전에는 무작위로 70%:30% 비율로 분할 하여 학습 세트와 테스트 세트를 만들어 사용하는 것이 일반적인 방식이었습니다. 이런 방식이 효과적일 수 있습니다. 그러나 학습 분포(위 예제에서 웹 사이트 이미지)와 궁극적으로 분석해야 하는 데이터 분포(휴대 전화 이미지)가 다른 애플리케이션 상황에서 이 방법은 더 이상 적합하지 않습니다.

일반적으로 다음과 같이 정의합니다.

  • 학습 세트(Training set) : 알고리즘 학습에 입력하는 데이터 세트
  • 개발 세트(Dev1, development set): 파라미터 튜닝, 피처 선별 및 학습 알고리즘 관련 다른 결정에 이용하는 데이터 세트. 홀드-아웃 교차 검증 세트(Hold-out cross validation set)라고도 함.
  • 테스트 세트(Test set) : 알고리즘 성능 평가에 사용하는 데이터 세트. 학습 알고리즘이나 파라미터 관련 결정에는 사용하지 말아야 함

일단 개발 세트(dev/developement set)와 테스트 세트를 정의하면, 팀은 다른 학습 알고리즘 파라미터와 같은 다양한 것을 시도해보고, 가장 잘 작동하는 것(상태)을 확인합니다. 개발자와 테스트 세트를 이용하여 알고리즘이 얼마나 잘 작동하는지 신속하게 확인할 수 있습니다.

다시 말해서, 개발 세트 및 테스트 세트의 목적은 기계 학습 시스템을 만드는 가장 중요한 변경(설정 상태로)으로 개발팀을 안내하는 것입니다.

따라서 다음을 수행해야 합니다.

미래에 입력될 것으로 예측되는 데이터 그리고 알고리즘이 잘 동작하길 바라는 데이터로 개발/테스트 세트를 선정해야 합니다.

즉, 실제 알고리즘에 유입될 데이터(모바일 폰 사진)가 학습 세트(웹 사이트 이미지)와 본질적으로 다를 것으로 예상한다면, 여러분의 테스트 세트를 단순히 가용한 데이터의 30%로 만들면 안 됩니다.

모바일 앱이 아직 없는 상태라면, 아직 사용자도 없을 것입니다. 따라서 미래에 여러분이 계획하는 앞으로 수행할 작업을 정확하게 반영하는 데이터를 얻을 수 없을 것입니다. 그러나 여러분들은 여전히 대략적으로 이것을 하려고 시도할 것이다. 예를 들어, 친구에게 고양이의 휴대 전화 사진을 찍어 보내 줄 것을 요청하십시오. 앱을 런칭한 시점에서는, 실제 사용자 데이터로 개발/테스트 세트를 업데이트 할 수 있습니다.

실제 입력될 것으로 예상하는 것과 비슷한 데이터를 얻는 방법이 없다면 웹 사이트 이미지를 사용하여 시작할 수 있습니다. 그러나 이 데이터는 일반화되지 않는 시스템으로 이어질 위험성이 크다는 것을 인식해야 합니다.

좋은 개발 세트와 테스트 세트 개발에 얼마나 많이 투입할 것인지를 결정해야 합니다. 그러나 학습 분포가 테스트 분포와 같다고 가정하지 말아야 합니다. 학습을 위해서 확보한 데이터가 무엇이든지 간에, 궁극적으로 잘 수행하기를 바라는 목적에 부합하는 테스트 데이터를 선택해야 합니다.

이 문서는 Andrew NG 교수님께서 집필 중인 Machine Learning Yearning의 5장 번역입니다. 원제는 “5. Your development and test sets” 입니다. 원문 Ebook은 http://www.mlyearning.org 에서 구독할 수 있습니다.


  1. <역자주> dev를 validation으로 간주해도 됩니다. validation set, 검증 세트를 의미합니다. training set으로 부터 dev set을 분할하여 만드는 것이 일반적입니다. [return]
김태완 avatar
작성자: 김태완
1999년 부터 Java, Framework, Middleware, SOA, DB Replication, Cache, CEP, NoSQL, Big Data, Cloud를 키워드로 살아왔습니다. 현재는 빅데이터와 Machine Learning을 중점에 두고 있습니다.
E-mail: taewanme@gmail.com