MLY:06. 개발 세트과 테스트 세트는 동일한 분포를 제공해야 한다.



가장 큰 시장인 (i) 미국, (ii) 중국, (iii) 인도 및 (iv) 기타를 기준으로 4 개의 지역으로 분류된 고양이 앱 이미지 데이터를 보유하고 있습니다. 개발 세트와 테스트 세트를 만들기 위해서 개발 세트에 미국과 인도 고양이 앱 이미지를 넣었습니다. 테스트 세트에 중국과 기타 지역 데이터를 넣었습니다. 즉 개발 세트에 4개 세그먼트 중에서 2개 세그먼트를 무작위로 할당했고, 테스트 세트에 다른 두 세그먼트를 임의로 할당했습니다.

개발 세트와 테스트 세트를 정의하면, 개발팀은 개발 세트를 이용하여 알고리즘 성능 향상에 집중합니다. 따라서 개발 세트에는 가장 향상하고 싶어 하는 작업이 반영되어 있어야 합니다. 두 개 지역이 아니라 4곳 모든 지역에서 잘 작동하도록 만들여 져야 합니다.

두 번째 문제점은 개발 세트와 테스트 세트가 다른 분포를 갖는다는 점입니다. 개발 세트에서 잘 작동하는 무엇인가를 만들고, 테스트 세트에서는 이상하게 동작하는 현상이 발생할 수 있습니다. 필자는 엄청난 좌절감과 수많은 노력을 허비하면서 이런 상황의 결과를 경험했습니다. 이런 일이 발생하지 않도록 하십시오.

예를 들어, 개발팀이 테스트 세트가 아닌 개발 세트에서만 잘 동작하는 시스템을 개발했다고 가정합니다. 개발팀이 사용한 개발 세트와 테스트 세트가 같은 데이터 분포에서 만들여졌다면, 무엇이 문제인지 상당히 명확하게 진단 할 수 있을 겁니다. 알고리즘이 개발 세트에 너무 과적합 되어 있으며, 이 문제 해결을 위해서는 더 많은 개발 세트를 확보하는 것이라는 결론을 만들 수 있습니다.

그러나 개발 세트와 테스트 세트가 다른 데이터 분포에서 만들었다면, 진단은 명확하지 않을 것입니다. 여러 가지가 잘못되었을 수 있습니다.

  1. 개발 세트에 과적합 된 상태이다.
  2. 테스트 세트는 개발 세트보다 더 어렵습니다.1 따라서 알고리즘이 테스트 세트에서 예상대로 동작할 수는 있지만, 더 이상의 개선이 이루어질 수 없습니다.
  3. 테스트 세트가 반드시 더 어렵지는 않지만, 개발 세트와 완전히 다릅니다. 따라서 개발 세트에서 잘 동작하던 알고리즘이 테스트 세트에서는 제대로 동작하지 않을 수 있습니다. 이 경우 개발 세트에서 성능을 향상하기 위한 많은 노력은 무의미한 것이 됩니다.

기계 학습 애플리케이션 작업은 상당히 어렵습니다. 개발 세트와 테스트 세트의 분포가 일치하지 않는 상황에서는 개발 세트 분포에서 성능 향상이 테스트 세트에서도 성능을 높이는가에 대한 불확실성이 발생합니다. 개발 세트와 테스트 세트 분포가 다르면, 작동하는 것과 작동하지 않는 것을 파악하기 어렵습니다. 또한, 작동 대상의 우선순위를 지정하는 것이 더 어렵습니다.

써드파티 벤치마크로 작업을 할 경우에, 작성자는 다른 분포에서 만들어진 개발 세트와 테스트 세트를 지정할 수도 있습니다. 다른 분포로 만들어진 데이터로 학습한 알고리즘을 같은 분포에서 생성된 개발 세트와 테스트 세트로 학습한 알고리즘과 비교할 때, 더 좋은 성능에 영향을 미치는 요소는 기술이 아니라 행운입니다. 한 분포에서 만들어진 데이터로 학습하고 다른 분포의 데이터에 잘 일반화되는 학습 알고리즘을 개발하는 것은 중요한 연구 과제입니다. 그러나 현재 목표가 연구를 진행하는 것이 아니라 특정 기계 학습 애플리케이션을 향상하는 것이라면, 같은 분포에서 만든 개발 세트와 테스트 세트를 사용하는 것이 좋습니다. 이런 방식을 통해서 팀 효율성이 향상될 것입니다.

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


  1. <역자주> 학습 세트는 학습을 위한 데이터로 수집, 크롤링, 데이터 생성 등으로 만들어집니다. 개발 세트는 학습 세트로부터 만들기 때문에 데이터의 경향은 유사합니다. 테스트 데이터는 일반적으로 실제 데이터로 부터 만드는 것이 일반적입니다. 따라서 알고리즘이 결과를 보면 학습/개발 세트보다 좋은 성능이 나오기 어렵습니다.
    [return]
김태완 avatar
작성자: 김태완
1999년 부터 Java, Framework, Middleware, SOA, DB Replication, Cache, CEP, NoSQL, Big Data, Cloud를 키워드로 살아왔습니다. 현재는 빅데이터와 Machine Learning을 중점에 두고 있습니다.
E-mail: taewanme@gmail.com