사전 테스트 세트
개념

테스트 세트

gabury1고친 사람 github-actions[bot]

테스트 세트는 모델이 처음 보는 데이터에서 얼마나 잘 맞히는지 재 줍니다. 그러려고 학습에 한 번도 쓰지 않을 데이터를 따로 떼어 둡니다. 모델의 성적으로 내놓는 마지막 점수가 이 데이터에서 나옵니다. 검색 시스템을 평가할 때 쓰는 정답 매긴 질의 묶음도 같은 이름으로 부릅니다.

쉽고 빠른 이해

테스트 세트는 모델 채점용으로 따로 챙겨 두는 문제지입니다. 스팸 메일 만 통이 있으면 이천 통쯤을 떼어 둡니다. 모델은 나머지로만 가르칩니다.

가르칠 때 본 메일로 채점하면 점수가 부풉니다. 모델이 답을 외워서 맞힐 수 있기 때문입니다. 새 메일에서도 잘 맞힐지는 안 본 메일로 채점해야 압니다.

  1. 데이터를 가르치는 몫, 고르는 몫, 채점하는 몫으로 나눕니다
  2. 가르치는 몫으로 설정을 바꿔 가며 모델 후보를 여럿 만듭니다. 고르는 몫으로 그중 하나를 고릅니다
  3. 고른 모델을 채점하는 몫으로 딱 한 번 잽니다

대가는 가르치는 데 쓸 데이터가 그만큼 줄어든다는 점입니다. 데이터가 적으면 한 번 떼는 대신 돌아가며 떼는 방법을 씁니다. 그리고 채점 점수를 보고 모델을 고치기 시작하면 그 점수도 믿을 수 없게 됩니다.

상세

선생님은 기말고사 문제를 시험 날까지 봉투에 넣어 둡니다. 학생이 미리 문제를 봤다면 만점을 받아도 공부를 잘했다는 뜻이 아닙니다. 문제를 외웠다는 뜻일 수 있습니다. 봉투를 시험 날 처음 뜯어야 점수가 실력을 말해 줍니다.

머신러닝에서 데이터를 보고 판정 기준을 배운 프로그램을 모델이라고 합니다. 모델이 판정 기준을 배우는 과정은 학습이라고 합니다.

학습에는 데이터마다 정답이 미리 달려 있어야 합니다. 이 정답 표시가 레이블입니다. 메일마다 사람이 「스팸」이나 「정상」을 달아 둔 것이 레이블입니다.

테스트 세트는 레이블이 달린 데이터 가운데 따로 떼어 둔 부분입니다. 이 부분은 학습에 쓰지 않습니다. 설정을 바꿔 만든 후보 모델 여럿 가운데 하나를 고를 때도 쓰지 않습니다.

레이블 달린 메일이 만 통이면 그중 이천 통을 처음부터 따로 둡니다. 모델을 다 만든 뒤에 이 이천 통을 넣습니다. 모델의 판정을 레이블과 맞대어 점수를 매깁니다.

안 본 데이터로 재는 까닭

모델을 만드는 목적은 앞으로 들어올 새 데이터를 맞히는 것입니다. 이미 레이블이 달린 메일을 다시 가려 봐야 쓸모가 없습니다. 처음 보는 데이터에서도 잘 맞히는 성질을 일반화라고 합니다.

학습에 쓴 데이터로 점수를 매기면 일반화를 잴 수 없습니다. 모델이 학습 데이터를 외워 버리면 그 데이터에서는 거의 다 맞힙니다. 새 메일에서는 점수가 크게 떨어집니다. 학습 데이터에만 맞춰져 새 데이터에서 틀리는 이 상태가 과적합입니다.

테스트 세트는 모델에게 새 데이터를 대신합니다. 모델이 한 번도 본 적 없으니 외워서 맞힐 수 없습니다. 그래서 테스트 세트에서 나온 점수로 새 데이터에서의 점수를 짐작합니다.

데이터를 세 몫으로 나누기

이 소절은 레이블 달린 데이터를 어떻게 나누고 각 몫을 언제 쓰는지 봅니다. 대개 세 몫으로 나눕니다.

몫 하는 일 쓰는 횟수
훈련 세트 모델이 판정 기준을 배운다 학습할 때마다
검증 세트 후보 모델 가운데 하나를 고른다 후보를 견줄 때마다
테스트 세트 고른 모델의 점수를 매긴다 마지막에 한 번

후보 모델은 학습 전에 사람이 정하는 설정값을 바꿔 가며 만듭니다. 이 설정값을 하이퍼파라미터라고 합니다. 모델의 크기나 학습을 몇 바퀴 돌릴지가 하이퍼파라미터입니다. 설정을 바꿔 학습하고 검증 세트로 견주는 일을 여러 번 되풀이합니다.

flowchart TD
    D["레이블 달린 데이터"] --> T["훈련 세트"]
    D --> V["검증 세트"]
    D --> S["테스트 세트"]
    T --> M["후보 모델 여럿"]
    M --> C["검증 세트로 하나를 고른다"]
    V --> C
    C -->|"설정을 바꿔 다시 학습"| T
    C --> F["테스트 세트로 한 번 잰다"]
    S --> F

그림의 고리는 학습 → 고르기 → 다시 학습 순서로 여러 번 돕니다. 검증 세트는 이 고리에서 고를 때마다 쓰입니다. 테스트 세트로 가는 화살표는 되풀이 고리 밖에 있습니다. 모델을 다 고른 뒤에 한 번만 지나갑니다.

테스트 세트를 검증 세트와 또 따로 두는 까닭은 고르는 일이 점수를 부풀리기 때문입니다. 후보 스무 개를 검증 세트로 견주면 우연히 검증 세트와 잘 맞은 후보가 뽑히기 쉽습니다. 그래서 뽑힌 모델의 검증 점수는 새 데이터에서의 점수보다 높게 나오기 쉽습니다. 고르는 데 쓰지 않은 테스트 세트에는 이 부풀림이 없습니다.

떼어 두는 양

테스트 세트를 얼마나 떼느냐에는 맞바꿈이 있습니다. 크게 떼면 점수가 덜 흔들립니다. 그 대신 학습에 쓸 데이터가 줄어듭니다.

데이터가 아주 많으면 떼는 비율을 낮춰도 됩니다. 백만 건이면 백에 하나만 떼어도 만 건입니다. 점수를 믿기에 충분한 건수가 나오면 나머지는 학습에 돌립니다.

데이터가 적으면 한 번 떼어 두는 것만으로는 점수가 크게 흔들립니다. 이럴 때는 데이터를 여러 조각으로 나눕니다. 조각을 하나씩 돌아가며 평가에 쓰는 방법이 교차 검증입니다.

나누는 방법

기본은 무작위로 나누기입니다. 메일 만 통을 섞은 뒤 앞에서 이천 통을 떼는 식입니다. 새 데이터가 지금 데이터와 비슷하게 들어온다면 이렇게 나눈 테스트 세트가 새 데이터를 닮습니다.

모델이 고르는 갈래를 클래스라고 합니다. 스팸 메일 거르기에서는 「스팸」과 「정상」이 클래스입니다. 한 클래스가 드물면 무작위로 나눌 때 테스트 세트에 그 클래스가 너무 적게 들어갈 수 있습니다.

그래서 드문 클래스가 있으면 비율을 맞춰 나눕니다. 메일 백 통에 스팸이 두 통꼴이라면 테스트 세트에도 그 비율대로 스팸이 들어가게 뗍니다. 이렇게 클래스마다 비율을 지키며 뽑는 방법이 층화 추출입니다.

데이터에 시간 순서가 있으면 날짜로 나눕니다. 지난달까지로 학습하고 이번 달로 테스트합니다. 무작위로 섞으면 미래의 메일로 과거를 맞히는 셈이 되어 점수가 실제보다 좋게 나옵니다.

한 사람이 여러 건을 남긴 데이터는 사람 단위로 나눕니다. 같은 사람의 메일이 훈련 세트와 테스트 세트에 섞여 들어가면 모델이 그 사람의 말투를 외워서 맞힐 수 있습니다.

테스트 세트를 망가뜨리는 두 가지

첫째는 테스트 점수를 보고 모델을 고치는 일입니다. 점수가 낮아서 설정을 바꾸고 다시 재면, 테스트 세트가 고르는 일에 쓰인 것입니다. 테스트 세트가 검증 세트 노릇을 하게 됩니다. 그러면 점수가 부풉니다. 그래서 테스트 세트는 끝까지 아껴 두었다가 마지막에 한 번 씁니다.

둘째는 데이터 누수입니다. 데이터 누수는 테스트 세트에 있어야 할 정보가 학습 쪽으로 새어 들어가는 일입니다. 같은 메일이 중복으로 저장돼 있어 훈련 세트와 테스트 세트에 한 통씩 들어간 경우가 흔합니다. 이러면 모델이 이미 본 문제를 테스트에서 다시 만나 점수가 실력보다 높게 나옵니다.

검색 평가의 테스트 세트

검색 시스템을 평가할 때도 테스트 세트를 씁니다. 모양은 머신러닝과 조금 다릅니다. 문서 모음, 질의 묶음, 질의마다 어떤 문서가 찾던 것인지 매긴 판정, 이 세 가지로 이루어집니다.

문서가 질의에 맞는 문서인지를 적합성이라고 합니다. 적합성은 사람이 문서를 읽고 매깁니다. 판정이 있으면 검색 결과에서 맞는 문서가 몇 건 나왔는지 셀 수 있습니다.

이렇게 센 값으로 점수를 두 가지 냅니다. 검색 결과로 나온 문서 가운데 맞는 문서의 비율이 정밀도입니다. 맞는 문서 가운데 검색 결과로 나온 문서의 비율은 재현율입니다.

검색 분야에서는 이 묶음을 테스트 컬렉션이라고도 부릅니다. 같은 테스트 세트를 여러 팀이 나눠 쓰면 서로 다른 검색 시스템의 점수를 한 줄로 견줄 수 있습니다.

소프트웨어 테스트의 비슷한 이름

소프트웨어 테스트에서 테스트를 여럿 묶은 것은 흔히 테스트 스위트라고 부릅니다. 테스트 하나하나는 테스트 케이스입니다. 이 항목의 테스트 세트는 코드를 검사하는 테스트 묶음이 아닙니다. 모델을 채점하려고 떼어 둔 데이터입니다.

관련 항목

테스트 세트와 함께 데이터를 나누는 세트

훈련 세트 · 검증 세트 · 홀드아웃 검증 · 교차 검증 · k-겹 교차 검증 · 층화 추출 · 데이터 분할

테스트 세트로 재는 평가 지표

정확도 · 정밀도 · 재현율 · F1 점수 · 오차율 · 상위 k 재현율 · 혼동 행렬

테스트 세트 점수를 믿을 수 없게 만드는 문제

과적합 · 데이터 누수 · 분포 변화 · 일반화 오차 · 클래스 불균형

테스트 세트를 이루는 재료

레이블 · 적합성 · 질의 · 데이터 라벨링 · 정답 데이터

테스트 세트를 공개해 나눠 쓰는 평가 자료

벤치마크 · 테스트 컬렉션 · TREC · ImageNet · MNIST

테스트 세트를 쓰는 상위 분야

머신러닝 · 지도 학습 · 모델 평가 · 검색

이름이 헷갈리는 소프트웨어 테스트 용어

테스트 스위트 · 테스트 케이스 · 테스트 데이터 · 테스트 픽스처

다른 이름: test set · 테스트 데이터셋 · 시험 세트