데이터 세트: 원본 데이터 세트 분할

우수한 소프트웨어 엔지니어링 프로젝트는 모두 앱 테스트에 상당한 노력을 기울입니다. 마찬가지로 ML 모델을 테스트하여 예측의 정확성을 확인하는 것이 좋습니다.

학습, 검증, 테스트 세트

모델을 학습하는 데 사용된 예시와 다른 예시를 사용하여 모델을 테스트해야 합니다. 조금 후에 알아볼 수 있듯이, 동일한 예시 세트를 테스트하는 것보다 다양한 예시를 테스트하는 것이 모델의 적합성을 더 강력하게 증명합니다. 다양한 예시는 어디에서 가져오나요? 기존 머신러닝에서는 원본 데이터 세트를 분할하여 이러한 다양한 예시를 얻었습니다. 따라서 원래 데이터 세트를 두 개의 하위 집합으로 분할해야 한다고 가정할 수 있습니다.

그림 8. 두 부분으로 분할된 가로 막대: 약 80% 는 학습 세트, 약 20% 는 테스트 세트
그림 8. 최적의 분할이 아닙니다.

 

연습문제: 직관력 테스트

학습 세트에서 학습하고 여러 라운드에 걸쳐 테스트 세트에서 평가한다고 가정해 보겠습니다. 각 라운드에서 테스트 세트 결과를 사용하여 초매개변수와 기능 집합을 업데이트하는 방법을 안내합니다. 이 접근 방식에 문제가 있나요? 정답을 하나만 고르세요.
이 절차를 여러 번 반복하면 모델이 테스트 세트의 특성에 은연중에 적응하게 됩니다.
예. 동일한 테스트 세트를 자주 사용할수록 모델이 테스트 세트에 더 잘 맞을 가능성이 높습니다. 교사가 '시험에 맞춰 가르치는' 것처럼 모델이 의도치 않게 테스트 세트에 맞추게 되어 모델이 실제 데이터에 맞추기 어려워질 수 있습니다.
이 접근 방식은 괜찮습니다. 결국 학습 세트로 학습하고 별도의 테스트 세트로 평가하기 때문입니다.
실제로는 미묘한 문제점이 있습니다. 점진적으로 잘못될 수 있는 사항을 생각해 보세요.
이 접근 방식은 계산상 비효율적입니다. 테스트가 끝날 때마다 초매개변수나 기능 집합을 변경하지 마세요.
테스트를 자주 수행하는 것은 비용이 많이 들지만 중요합니다. 하지만 빈번한 테스트는 추가 교육보다 훨씬 저렴합니다. 초매개변수와 기능 집합을 최적화하면 모델 품질을 크게 개선할 수 있으므로 항상 시간과 계산 리소스를 할당하여 이를 처리합니다.

데이터 세트를 두 세트로 나누는 것도 좋지만 데이터 세트를 개의 하위 집합으로 나누는 것이 더 좋습니다. 학습 세트와 테스트 세트 외에도 세 번째 하위 집합은 다음과 같습니다.

  • 검증 세트는 모델이 학습되는 동안 모델에 대한 초기 테스트를 실행합니다.
그림 9. 세 부분으로 분할된 가로 막대: 70% 는 학습 세트, 15% 는 검증 세트, 15%는 테스트 세트
그림 9. 훨씬 나은 분할입니다.

검증 세트를 사용하여 학습 세트의 결과를 평가합니다. 검증 세트를 반복적으로 사용한 결과 모델이 좋은 예측을 하고 있다고 판단되면 테스트 세트를 사용하여 모델을 다시 한번 확인합니다.

다음 그림은 이 워크플로를 보여줍니다. 그림에서 '모델 조정'은 학습률 변경, 기능 추가 또는 삭제, 완전히 새로운 모델을 처음부터 설계하는 등 모델에 관한 모든 것을 조정하는 것을 의미합니다. 이 워크플로가 끝나면 테스트 세트에서 가장 좋은 성능을 보인 모델을 선택합니다.

그림 10. 다음 단계로 구성된 워크플로 다이어그램입니다.
            1. 학습 세트에서 모델을 학습시킵니다.
            2. 검증 세트에서 모델을 평가합니다.
            3. 검증 세트의 결과에 따라 모델을 조정합니다.
            4. 1, 2, 3을 반복하여 궁극적으로 검증 세트에서 가장 좋은 모델을 선택합니다.
            5. 테스트 세트에서 결과를 확인합니다.
그림 10. 개발 및 테스트에 적합한 워크플로

그림 10에 표시된 워크플로가 최적이지만 이 워크플로를 사용하더라도 테스트 세트와 검증 세트는 반복적으로 사용하면 '마모'됩니다. 즉, 동일한 데이터를 사용하여 초매개변수 설정이나 기타 모델 개선사항에 관해 결정할수록 모델이 새 데이터에 관해 정확한 예측을 할 확률이 낮아집니다. 따라서 테스트 세트와 검증 세트를 '새로고침'하기 위해 더 많은 데이터를 수집하는 것이 좋습니다. 새롭게 시작하는 것은 좋은 재설정입니다.

연습문제: 직관력 테스트

데이터 세트의 모든 예시를 셔플하고 셔플된 예시를 학습, 검증, 테스트 세트로 분할했습니다. 하지만 테스트 세트의 손실 값이 너무 낮아 실수가 있는 것 같습니다. 어떤 문제가 발생했을까요?
테스트 세트의 많은 예시가 학습 세트의 예시와 중복됩니다.
예. 중복 예시가 많은 데이터 세트에서는 문제가 될 수 있습니다. 테스트하기 전에 테스트 세트에서 중복 예시를 삭제하는 것이 좋습니다.
학습 및 테스트는 비결정론적입니다. 우연히 테스트 손실이 매우 낮은 경우가 있습니다. 테스트를 다시 실행하여 결과를 확인합니다.
손실은 실행마다 약간 다르지만 머신러닝 복권에 당첨되었다고 생각할 만큼 크게 달라서는 안 됩니다.
우연히 테스트 세트에 모델의 성능이 우수한 예시가 포함되었습니다.
예시가 잘 섞여 있으므로 이러한 가능성은 매우 낮습니다.

테스트 세트의 추가 문제

이전 질문에서 설명한 것처럼 중복 예시는 모델 평가에 영향을 줄 수 있습니다. 데이터 세트를 학습, 검증, 테스트 세트로 분할한 후 검증 세트 또는 테스트 세트에서 학습 세트의 예시와 중복되는 예시를 삭제합니다. 모델을 공정하게 테스트하는 유일한 방법은 중복이 아닌 새 예시를 사용하는 것입니다.

예를 들어 제목, 이메일 본문, 발신자의 이메일 주소를 특성으로 사용하여 이메일이 스팸인지 여부를 예측하는 모델을 생각해 보세요. 데이터를 80-20 비율로 학습 세트와 테스트 세트로 나눈다고 가정해 보겠습니다. 학습 후 모델은 학습 세트와 테스트 세트 모두에서 99% 의 정밀도를 달성합니다. 테스트 세트의 정밀도가 더 낮을 것으로 예상되므로 데이터를 다시 살펴본 결과 테스트 세트의 예시 중 상당수가 학습 세트의 예시와 중복된 것을 발견했습니다. 문제는 데이터를 분할하기 전에 입력 데이터베이스에서 동일한 스팸 이메일의 중복 항목을 삭제하지 않은 것입니다. 실수로 일부 테스트 데이터를 학습했습니다.

요약하자면, 좋은 테스트 세트 또는 유효성 검사 세트는 다음 기준을 모두 충족합니다.

  • 통계적으로 유의미한 테스트 결과를 얻을 만큼 충분히 큽니다.
  • 데이터 세트를 전체적으로 표현해야 합니다. 즉, 평가 세트가 학습 세트와 같은 특징을 가지도록 선별해야 합니다.
  • 모델이 비즈니스 목적의 일환으로 접하게 되는 실제 데이터를 나타냅니다.
  • 학습 세트에 중복된 예가 없습니다.

연습문제: 이해도 확인

고정된 수의 예시가 포함된 단일 데이터 세트가 주어질 때 다음 중 어느 것이 사실인가요?
모델을 테스트하는 데 사용되는 모든 예는 모델을 학습하는 데 사용되는 예보다 하나 적습니다.
예시를 학습/테스트/검증 세트로 나누는 것은 제로섬 게임입니다. 이것이 핵심적인 절충점입니다.
테스트 세트의 예시 수는 검증 세트의 예시 수보다 커야 합니다.
이론적으로 검증 세트와 테스트 세트에는 동일한 수의 예시 또는 거의 동일한 수의 예시가 포함되어야 합니다.
테스트 세트의 예시 수는 검증 세트 또는 학습 세트의 예시 수보다 커야 합니다.
학습 세트의 예시 수는 일반적으로 검증 세트 또는 테스트 세트의 예시 수보다 많습니다. 그러나 여러 세트에 대한 비율 요구사항은 없습니다.
테스트 세트에 통계적 유의성이 있는 테스트를 실행하기에 충분한 예시가 포함되어 있다고 가정해 보겠습니다. 또한 테스트 세트를 대상으로 테스트하면 손실이 적습니다. 하지만 실제 환경에서는 모델의 성능이 좋지 않았습니다. 어떻게 해야 할까요?
원본 데이터 세트와 실제 데이터의 차이를 파악합니다.
예. 가장 우수한 데이터 세트도 실제 데이터의 스냅샷일 뿐입니다. 기본 실측값은 시간이 지남에 따라 변경되는 경향이 있습니다. 테스트 세트가 학습 세트와 잘 일치하여 모델 품질이 양호하다고 가정할 수 있지만 데이터 세트가 실제 데이터와 충분히 일치하지 않을 수 있습니다. 새 데이터 세트를 대상으로 재학습하고 재테스트해야 할 수 있습니다.
동일한 테스트 세트에서 다시 테스트합니다. 테스트 결과가 이상했을 수 있습니다.
재테스트를 하면 약간 다른 결과가 나올 수 있지만 이 전략은 그다지 유용하지 않습니다.
테스트 세트에는 예시가 몇 개 포함되어야 하나요?
통계적으로 유의미한 테스트를 실행하기에 충분한 예시
예. 예시가 몇 개인가요? 실험을 해봐야 합니다.
원본 데이터 세트의 15% 이상
15% 가 충분한 예시일 수도 있고 아닐 수도 있습니다.