ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 왜 데이터를 훈련, 검증, 테스트 3개로 나눌까? (feat. 정보 누설과 일반화)
    AI 2026. 2. 2. 14:25

    머신러닝 프로젝트를 진행하다 보면 가장 기본적이면서도 중요한 원칙에 직면하게 됩니다. 바로 데이터를 훈련(Train), 검증(Validation), 테스트(Test) 세 가지로 나누는 것입니다.

    "어차피 검증 세트와 테스트 세트 모두 직접적인 학습(가중치 업데이트)에는 참여하지 않는데, 굳이 둘을 나눌 필요가 있을까?" "그냥 테스트 세트 하나만 두고, 그 결과로 하이퍼파라미터를 튜닝하면 안 될까?"

    오늘은 이 질문에 대한 답을 최적화(Optimization)와 일반화(Generalization), 그리고 정보 누설(Data Leakage)의 관점에서 자세히 정리해보려 합니다.

     

    머신러닝의 두 가지 목표: 최적화 vs 일반화

    본론으로 들어가기 전에 머신러닝의 근본적인 목표를 짚고 넘어가야 합니다.

    • 최적화(Optimization): 훈련 데이터 성능을 최대로 끌어올리는 과정입니다. 모델이 주어진 문제(훈련 데이터)의 패턴을 잘 학습하도록 만드는 것이죠.
    • 일반화(Generalization): 훈련 과정에서 본 적 없는 새로운 데이터에 대해서도 잘 동작하는 능력입니다.

    우리가 원하는 모델은 '훈련 데이터를 다 외운 모델'이 아니라, 새로운 데이터도 잘 맞추는 모델(일반화 성능이 좋은 모델)'입니다. 이 일반화 성능을 신뢰성 있게 평가하기 위해 데이터 분할이 필요합니다.

     

    왜 굳이 3개로 나눌까? (검증 세트 vs 테스트 세트)

    보통 데이터셋은 다음과 같은 비율과 역할로 나뉩니다.

    • 훈련 세트 (60~80%): 모델의 파라미터(가중치)를 학습시키는 데 사용 (교과서)
    • 검증 세트 (10~20%): 모델의 성능을 측정하고 하이퍼파라미터를 튜닝하는 데 사용 (모의고사)
    • 테스트 세트 (10~20%): 최종 모델의 일반화 성능을 평가하는 데만 사용 (수능/본고사)

    여기서 핵심 질문이 등장합니다. "검증 세트로 튜닝을 마쳤다면, 그게 곧 최종 성능 아닐까? 왜 테스트 세트를 따로 남겨둬야 할까?"

    이유는 검증 세트도 학습에 간접적으로 관여하기 때문입니다.

     

    검증 세트의 딜레마

    우리는 검증 세트의 점수를 보고 하이퍼파라미터(모델의 설정값)를 수정합니다.

    1. 검증 점수가 낮네? -> 학습률(Learning Rate)을 바꿔보자.
    2. 다시 검증 점수 확인 -> 이번엔 트리 깊이(Max Depth)를 조절해보자.
    3. 반복...

    이 과정을 반복하면 모델은 검증 세트의 데이터 패턴에 최적화된 설정을 갖게 됩니다. 즉, 검증 세트는 직접적인 학습(가중치 갱신)에는 쓰이지 않았지만, 모델 선택과 튜닝 과정에 관여하면서 모델이 그 데이터를 '참조'하게 된 셈입니다. 이를 "검증 세트에 오버피팅(Overfitting) 되었다"고 표현하기도 합니다.

    따라서 검증 세트의 점수는 낙관적으로 편향될 수밖에 없으며, 이를 최종 일반화 성능으로 신뢰하기 어렵습니다. 그래서 튜닝 과정에 단 한 번도 관여하지 않은 '테스트 세트'가 마지막에 필요합니다

     

    테스트 세트로 튜닝하면 안 되는 이유: 정보 누설 (Data Leakage)

    만약 테스트 세트의 결과를 보고 하이퍼파라미터를 수정한다면 어떻게 될까요? 이 상황을 전문 용어로 정보 누설(Data Leakage), 그중에서도 평가 데이터 누설이라고 볼 수 있습니다.

    정보 누설이란?

    정보 누설은 모델이 학습 시점에 알지 못해야 할 정보(미래의 데이터, 정답, 테스트 데이터의 분포 등)가 모델 생성 과정에 흘러들어가, 실제 성능보다 훨씬 좋은 결과가 나오는 것처럼 착각하게 만드는 현상을 말합니다.

    테스트 세트로 튜닝 시 벌어지는 일 (비유)

    이해를 돕기 위해 시험에 비유해 보겠습니다.

    • 훈련: 교과서로 공부함
    • 검증(모의고사): 모의고사를 보고, 틀린 문제를 분석해서 공부 방법을 바꿈(튜닝).
    • 테스트(수능): 내 진짜 실력을 검증하는 최종 관문.

    만약 "테스트 세트(수능 문제)를 미리 풀어보고, 그 점수가 잘 나오도록 공부 방법을 바꾼다"면 어떻게 될까요? 수능 점수는 기가 막히게 잘 나올 것입니다. 하지만 이 학생의 실력이 진짜 늘어난 걸까요? 아니면 그냥 수능 문제 유형을 외운 걸까요?

    이 학생이 대학에 가서 전혀 새로운 전공 서적(Real World Data)을 마주하면, 엉망인 성적을 받을 확률이 높습니다.

    마찬가지로 테스트 세트를 보고 모델을 수정하면, 모델은 테스트 세트의 정보(패턴, 노이즈 등)를 간접적으로 학습(Leaking)하게 됩니다. 이렇게 만들어진 모델은 테스트 세트 점수는 높지만, 실전에 투입했을 때 엉뚱한 결과를 내놓을 가능성이 큽니다.

     

    결론: "테스트 세트는 금고에 넣어두세요"

    정리하자면, 검증 세트와 테스트 세트를 나누는 이유는 '모델을 만드는 과정(튜닝)'과 '모델을 평가하는 과정'을 철저히 분리하여 정보 누설을 막기 위함입니다.

    1. 검증 세트: 훈련된 여러 모델 중 'Best 모델'을 뽑고 튜닝하는 용도 (간접적 학습 참여 O)
    2. 테스트 세트: 모든 튜닝이 끝난 후, 이 모델이 현실 세계에서 얼마나 잘할지 냉정하게 평가하는 용도 (학습/튜닝 참여 절대 X)

    올바른 머신러닝 프로세스를 위해서는 테스트 세트는 프로젝트의 맨 마지막 순간까지 '봉인'해두어야 합니다. 그래야만 우리가 만든 모델의 성능을 스스로도 속이지 않고, 객관적으로 증명할 수 있습니다.

     

Designed by Tistory.