머신러닝 모델을 만들 때 흔히 듣게 되는 표현이 있습니다. "데이터를 훈련(Training), 검증(Validation), 테스트(Test)로 나눈다"는 것입니다. 처음 접하면 굳이 데이터를 쪼개는 이유가 잘 와닿지 않을 수 있습니다. 이 글에서는 데이터를 왜 세 덩어리로 나누는지, 각 덩어리가 어떤 역할을 하는지, 그리고 실무에서 가장 조심해야 할 함정인 데이터 누수(Data Leakage)까지 차근차근 정리했습니다.
결론 먼저: "커닝 방지"가 핵심이다
데이터를 나누는 이유를 한 문장으로 요약하면 다음과 같습니다.
모델을 학습시킨 데이터로 그 모델의 성능을 평가하면, 그것은 답을 이미 아는 문제로 시험을 보는 것과 같아서 신뢰할 수 없다.
모델이 실전(한 번도 접해 보지 못한 새로운 데이터)에서 얼마나 잘 동작하는지를 확인하려면, 반드시 학습에 사용하지 않은 데이터로 따로 시험을 보아야 합니다. 이 원칙에서 훈련·검증·테스트라는 세 가지 데이터 구분이 시작됩니다.
세 데이터셋이 각각 맡는 역할
1. 훈련(Training) 데이터 — 공부용 문제집
모델이 실제로 패턴을 학습하는 데 사용하는 데이터입니다. 전체 데이터 중 가장 큰 비중을 차지하며, 보통 60~80% 수준입니다. 모델은 이 데이터를 반복해서 살펴보며 입력과 출력 사이의 규칙을 익혀 나갑니다.
2. 검증(Validation) 데이터 — 모의고사
모델을 학습시키는 과정 중간중간에 "지금 이 설정으로 학습했을 때 얼마나 잘하는가"를 점검하는 데 사용하는 데이터입니다. 이 점검 결과를 바탕으로 하이퍼파라미터(신경망의 층 수, 학습 속도, temperature 등 모델을 설계할 때 사람이 정해 주어야 하는 설정값들)를 조정하며 더 나은 모델을 찾아갑니다.
여기서 한 가지 유의할 점이 있습니다. 검증 데이터는 모델을 직접 학습시키는 데 쓰이지는 않지만, 결국 "어떤 설정이 더 나은가"를 판단하는 데 반복적으로 사용된 데이터입니다. 모의고사를 여러 번 보면서 그때마다 공부법을 수정한 셈이므로, 완전히 순수한 실전 시험이라고 보기는 어렵습니다.
3. 테스트(Test) 데이터 — 단 한 번의 진짜 시험
모델의 설계와 튜닝이 모두 끝난 뒤, 마지막에 단 한 번만 성능을 확인하는 데 사용하는 데이터입니다. 여기서 나온 점수가 "이 모델이 실제 서비스에 배포되었을 때 낼 수 있는 성능"에 대한 가장 신뢰할 수 있는 추정치가 됩니다.
그런데 세 덩어리를 얼마씩 나눠야 할까
여기까지 읽으시면 자연스럽게 다음 질문이 떠오르실 겁니다. "그럼 전체 데이터 중 얼마를 훈련에, 얼마를 검증에, 얼마를 테스트에 줘야 하는가?"
이 질문에는 서로 반대 방향으로 당기는 두 가지 힘이 있습니다.
- 훈련 데이터는 많을수록 좋습니다. 모델은 훈련 데이터를 보고 패턴을 배우기 때문에, 이 데이터가 적으면 모델이 충분히 배우지 못해 성능 자체가 낮아집니다.
- 하지만 검증·테스트 데이터도 어느 정도는 있어야 합니다. 검증·테스트 데이터가 너무 적으면(예를 들어 열 몇 건뿐이라면), 어쩌다 운 좋게 잘 맞은 것인지 진짜 실력인지 구분할 수 없습니다. 즉 "점수를 믿을 수 있을 만큼"의 양이 필요합니다.
결국 훈련 쪽에 최대한 많이 몰아주고 싶지만, 검증·테스트가 통계적으로 의미 있는 점수를 낼 수 있을 만큼은 남겨 두어야 하는 균형점을 찾아야 합니다. 이 균형점이 데이터의 전체 양에 따라 달라지기 때문에, 상황에 따라 6:2:2부터 8:1:1까지 서로 다른 비율이 쓰이는 것입니다.
비율은 왜 6:2:2에서 8:1:1까지 다양한가
모델을 만들기 시작하기 전, 가장 먼저 하는 일은 전체 데이터를 훈련·검증·테스트 세 덩어리로 미리 잘라 놓는 것입니다. 이때 어떤 비율로 나눌지는 데이터의 전체 양에 따라 달라집니다.
- 데이터가 상대적으로 적을 때: 검증과 테스트 데이터에도 통계적으로 신뢰할 수 있을 만큼의 양이 필요하므로, 6:2:2처럼 비교적 넉넉하게 나눕니다.
- 데이터가 매우 많을 때(수백만 건 이상): 검증과 테스트를 위해 전체의 몇 퍼센트만 떼어 내도 충분한 양이 확보되므로, 8:1:1 혹은 그 이상으로 훈련 데이터의 비중을 늘립니다.
정해진 절대적인 비율이 있는 것은 아니며, "검증과 테스트가 통계적으로 믿을 만한 양만 확보되면, 나머지는 최대한 훈련에 배분한다"는 원칙에 가깝습니다.
왜 테스트는 반드시 "딱 한 번"이어야 하는가
이렇게 세 덩어리로 미리 나누어 둔 뒤에는, 그중 테스트 데이터를 언제 여는가가 중요해집니다.
만약 테스트 데이터로 채점한 뒤 점수가 마음에 들지 않아 모델을 다시 손보고, 같은 테스트 데이터로 또 채점하는 과정을 반복한다면 어떻게 될까요? 이 순간부터 테스트 데이터는 사실상 검증 데이터처럼 사용된 것이 됩니다. 모델이 테스트 데이터에 은연중 맞춰지며 점수는 계속 좋아지지만, 정작 진짜 실전에서 만나는 완전히 새로운 데이터에서는 그만큼의 성능이 나오지 않을 가능성이 커집니다.
그래서 테스트 데이터는 모든 설계와 튜닝이 끝났다고 확정한 이후, 최종 성적표를 확인하듯 단 한 번만 열어보아야 합니다.
데이터 누수(Data Leakage) — 가장 조심해야 할 함정
데이터 누수란 테스트(또는 검증) 데이터의 정보가 의도치 않게 훈련 과정에 섞여 들어가는 현상을 말합니다.
이런 일이 발생하면 모델은 실제로는 실전 능력이 없는데도 평가 점수만 좋게 나오는, 일종의 거짓 고득점 상황에 빠지게 됩니다. 실무에서 흔히 발생하는 사례는 다음과 같습니다.
- 중복 데이터: 같은 대상(예: 동일 인물의 사진, 동일 고객의 기록)이 훈련 세트와 테스트 세트에 동시에 포함되는 경우입니다.
- 시간 순서 무시: 주가 예측처럼 시간의 흐름이 중요한 데이터인데, 미래 시점의 데이터로 학습하고 과거 시점의 데이터로 테스트하는 경우입니다. 이는 실전에서는 있을 수 없는 "미래를 미리 아는" 상황을 만들어 냅니다.
- 전처리 단계에서의 혼입: 전체 데이터를 기준으로 평균이나 표준편차를 구해 정규화한 뒤에 훈련과 테스트를 나누면, 이미 테스트 데이터의 통계 정보가 훈련 과정에 스며든 것입니다. 반드시 훈련 데이터만으로 통계치를 계산하고, 그 기준을 검증·테스트 데이터에 동일하게 적용해야 합니다.
- 정답을 암시하는 특징(feature): 예를 들어 "퇴사 여부"를 예측하는 모델의 입력값에 "퇴사일자 입력 여부"가 포함되어 있다면, 이는 사실상 정답을 미리 알려주는 것과 다르지 않습니다.
지도학습, 비지도학습, 강화학습과는 어떤 관계인가
[지도학습·비지도학습·강화학습]과 [훈련·검증·테스트 분할]은 서로 다른 두 가지 질문에 대한 답이며, 하나가 다른 하나에 포함되는 관계가 아니라 서로 직교하는 별개의 개념입니다.
- 지도학습/비지도학습/강화학습 = "어떤 방식으로 배우는가"(정답을 주는지, 주지 않는지, 보상을 주는지에 대한 답)
- 훈련/검증/테스트 분할 = "그 배우는 과정을 어떻게 공정하게 검증할 것인가"(커닝 없이 실력을 확인하는 절차)
즉 지도학습이든 비지도학습이든 강화학습이든, 각각의 방식 안에서 나름의 형태로 훈련·검증·테스트 개념이 적용됩니다.
- 지도학습의 경우: 앞서 설명한 방식이 그대로 적용됩니다. 훈련 데이터로 문제와 정답의 관계를 학습하고, 검증 데이터로 중간 점검하며 튜닝하고, 테스트 데이터로 마지막에 한 번 채점합니다.
- 비지도학습의 경우: 애초에 정답(라벨)이 없기 때문에 "맞았다/틀렸다"로 점수를 매기기 어렵습니다. 대신 군집이 얼마나 뚜렷하게 나뉘었는지를 측정하는 별도의 통계적 지표를 사용하거나, 사람이 결과를 직접 검토하는 경우가 많습니다. 다만 "학습에 사용한 데이터"와 "새로운 데이터에 잘 일반화되는지 확인할 데이터"를 구분한다는 원칙 자체는 동일하게 적용됩니다.
- 강화학습의 경우: 고정된 데이터셋을 미리 잘라 놓고 쓰기보다, 에이전트가 환경과 계속 상호작용하며 데이터를 실시간으로 만들어 냅니다(예: 알파고가 바둑을 스스로 두며 데이터를 생성하는 것). 이 경우 "테스트"는 대개 학습이 끝난 모델을 한 번도 접해 보지 못한 새로운 환경이나 상대와 겨루게 하여 성능을 확인하는 방식에 가깝습니다.
정리하면, 지도학습·비지도학습·강화학습은 "모델이 무엇을 배우는가"에 대한 답이고, 훈련·검증·테스트 분할은 "그 배운 결과를 어떻게 공정하게 확인하는가"에 대한 답입니다. 이 둘은 앞서 다룬 AI와 ML, DL의 포함 관계와는 달리, 한쪽이 다른 쪽 안에 포함되는 구조가 아니라 나란히 놓고 각각 이해해야 하는 별개의 축입니다.
훈련, 검증, 테스트 분할은 그래서 머신러닝의 어디에 속하는가
지금까지 설명한 훈련·검증·테스트 분할은 결국 머신러닝(ML)에 속하는 개념일까요? 답은 "그렇다"입니다. 다만 정확히는 ML의 한 "갈래"라기보다, ML(그리고 그 안의 딥러닝까지) 전반에 걸쳐 적용되는 개발 절차이자 검증 방법론이라고 이해하는 편이 정확합니다.
앞서 다룬 개념들을 하나의 구조로 정리하면 다음과 같습니다.
- AI ⊃ ML ⊃ DL: "무엇으로 지능적인 작업을 수행하는가"에 대한 계층 구조입니다.
- 지도학습/비지도학습/강화학습: ML(그리고 DL) 안에서 "어떤 방식으로 배우는가"를 결정하는 학습 방법론입니다.
- 훈련/검증/테스트 분할: ML(그리고 DL) 안에서 "그렇게 배운 결과를 어떻게 공정하게 검증하는가"를 규정하는 절차입니다.
즉 훈련·검증·테스트 분할은 ML의 하위 개념이자 필수 절차에 해당합니다. ML 모델을 만드는 과정이라면 지도학습이든 비지도학습이든(강화학습은 앞서 설명드린 것처럼 데이터를 다루는 방식이 다소 다르지만) 거의 예외 없이 이 개념이 함께 적용됩니다.
여기서 지도학습·비지도학습·강화학습을 "학습 방식"이라고 부르고 훈련·검증·테스트 분할을 굳이 "절차"라고 구분해서 부르는 이유는, 후자가 특정 학습 방식에 종속된 개념이 아니기 때문입니다. 무엇을 보고 어떻게 배울지를 결정하는 것이 학습 방식이라면, 훈련·검증·테스트 분할은 그 학습 방식과 무관하게 "모델을 어떻게 검증할 것인가"를 정하는 실험 설계 규칙에 가깝습니다. 그래서 지도학습에도 적용되고, 형태는 다소 다르지만 비지도학습에도 적용되며, 심지어 전통적인 통계 모델을 만들 때도 동일한 원칙이 적용됩니다.
전체 구조를 하나로 정리하면 다음과 같습니다.
AI
└─ ML (아래 두 축이 모두 이 안에 포함됨)
├─ 학습 방식 축: 지도학습 / 비지도학습 / 강화학습
├─ 검증 절차 축: 훈련 / 검증 / 테스트 분할, 데이터 누수 방지
└─ DL (ML의 부분집합이며, 위 두 축이 DL 안에서도 그대로 적용됨)
정리하면, 훈련·검증·테스트 분할은 ML이라는 큰 범주 안에 속하는 개념이 맞으며, 지도학습·비지도학습·강화학습이라는 "학습 방식" 축과는 서로 다른 별개의 축으로서, 두 축이 조합되어(예: 지도학습 + 훈련/검증/테스트, 강화학습 + 훈련/검증/테스트) 실제 모델 개발 과정에 함께 적용된다고 이해하시면 됩니다.
세 줄 요약
- 모델을 평가할 때 학습에 쓴 데이터를 그대로 쓰면 신뢰할 수 없기 때문에, 데이터를 훈련·검증·테스트로 나눕니다.
- 훈련은 배우는 단계, 검증은 배우는 도중 반복적으로 확인하며 방법을 고치는 단계, 테스트는 모든 것이 끝난 뒤 딱 한 번 실전 성적을 확인하는 단계입니다.
- 지도학습·비지도학습·강화학습은 "어떻게 배우는가"에 대한 답이고, 훈련·검증·테스트 분할은 "그 결과를 어떻게 검증하는가"에 대한 답으로, 서로 다른 별개의 개념입니다.
이 원칙을 정확히 이해해 두면, 이후 어떤 머신러닝 모델을 접하더라도 "이 모델이 어떤 데이터로 학습되었고, 그 성능이 어떻게 검증된 것인지"를 스스로 판단할 수 있는 기준을 가지게 될 것입니다.
'쪼랩 성장기 > AI' 카테고리의 다른 글
| 지도학습·비지도학습·강화학습 차이점 완벽 정리 — 머신러닝은 이렇게 세 가지로 배운다 (0) | 2026.09.10 |
|---|---|
| AI, 머신러닝, 딥러닝의 차이 — 세 개념의 포함 관계 완벽 정리 (0) | 2026.09.09 |
댓글