본문 바로가기
카테고리 없음

머신러닝 학습 절차 (학습·검증, 테스트, 과적합)

by 4남매mom 2026. 7. 23.

머신러닝 모델을 처음 공부할 때 저도 한 가지 실수를 반복했습니다. 학습 데이터로 성능을 확인하고 "잘 되네" 싶어서 그대로 배포했더니, 실제 데이터를 넣는 순간 성능이 뚝 떨어지는 경험을 했습니다. 알고 보니 학습·검증·테스트 데이터를 제대로 분리하지 않았던 게 문제였습니다. 이 글에서는 그 경험을 바탕으로 왜 이 절차가 중요한지, 어떻게 적용해야 하는지 풀어보겠습니다.

 

학습과 검증, 왜 둘 다 필요한가

머신러닝 모델을 훈련시킬 때 가장 먼저 하는 일은 전체 데이터를 학습(Training), 검증(Validation), 테스트(Testing) 세 덩어리로 나누는 것입니다. 비율은 보통 7:2:1이나 8:1:1이 많이 쓰이는데, 중요한 건 숫자가 아니라 세 덩어리가 절대 겹치지 않아야 한다는 원칙입니다.

학습 단계는 모델에게 문제집과 정답지를 동시에 쥐여주고 반복해서 읽히는 과정입니다. 모델은 이 과정에서 가중치(Weight)와 편향(Bias)이라는 내부 매개변수를 조금씩 조정합니다. 여기서 가중치란 입력 데이터의 각 특성이 결과에 얼마나 영향을 미치는지를 수치로 나타낸 값으로, 사람으로 치면 "이 단서가 얼마나 중요한가"를 판단하는 감각과 비슷합니다.

그런데 여기서 함정이 있습니다. 학습 데이터만 계속 반복해서 보다 보면 모델이 그 데이터의 잡음과 특이값까지 통째로 외워버리는 오버피팅(Overfitting), 즉 과적합 현상이 일어납니다. 과적합이란 모델이 학습용 데이터에는 완벽하게 맞지만, 한 번도 본 적 없는 데이터 앞에서는 속수무책이 되는 상태를 말합니다. 제가 직접 겪어봤는데, 학습 정확도는 98%인데 실제 배포 환경에서는 70%도 안 나오는 황당한 상황이 바로 이 때문이었습니다.

이 문제를 막는 것이 검증 단계의 역할입니다. 검증 데이터는 모델이 학습 도중 한 번도 본 적 없는 별도의 데이터셋으로, 모델이 중간 점검을 받는 모의고사라고 보면 됩니다. 개발자는 검증 점수를 보면서 하이퍼파라미터(Hyperparameter)를 조정합니다. 하이퍼파라미터란 학습률이나 은닉층 개수처럼 사람이 직접 손으로 설정해주는 제어 변수로, 모델이 스스로 배우는 가중치와는 다릅니다. 검증 오차가 줄어들다가 다시 올라가기 시작하는 지점을 찾아 학습을 멈추는 것이 핵심입니다.

이 과정을 거치면 모델은 특정 데이터에만 맞는 암기 기계가 아니라, 처음 보는 상황에도 대응하는 일반화 능력을 갖추게 됩니다.

  • 학습(Training): 가중치·편향을 반복 조정해 데이터 패턴을 익히는 단계
  • 검증(Validation): 하이퍼파라미터 튜닝과 과적합 감지를 위한 중간 평가 단계
  • 오버피팅 신호: 학습 정확도는 높은데 검증 정확도가 계속 떨어질 때
  • 조기 종료(Early Stopping): 검증 오차가 다시 증가하는 시점에 학습을 중단하는 기법
요약: 학습은 패턴을 익히는 과정이고, 검증은 과적합을 잡아내며 모델 구조를 다듬는 과정입니다. 이 두 단계를 제대로 순환해야 실전에서 쓸 수 있는 모델이 만들어집니다.

 

테스트가 마지막 한 번이어야 하는 이유

학습과 검증을 마쳤다고 해서 바로 서비스에 올리면 안 됩니다. 아직 한 단계가 남았습니다. 바로 테스트(Testing) 단계인데, 이 단계의 핵심은 단 한 번만 꺼내 쓴다는 철칙에 있습니다.

테스트 데이터는 학습과 검증이 모두 끝난 뒤에야 봉인을 뜯는 데이터입니다. 만약 하이퍼파라미터를 조정하는 도중에 테스트 데이터를 들여다봤다면 그건 데이터 누수(Data Leakage)가 발생한 것입니다. 데이터 누수란 미래의 정답 정보가 모델 훈련 과정에 흘러들어가 평가 결과 자체를 오염시키는 현상을 말합니다. 실제로 저는 팀 프로젝트에서 한 팀원이 테스트 셋을 슬쩍 검증용으로 쓴 걸 나중에야 발견한 적이 있는데, 그 모델의 테스트 점수가 지나치게 높게 나온 이유가 거기 있었습니다. 신뢰할 수 없는 숫자로 의사결정을 해야 한다는 사실이 솔직히 당황스러웠습니다.

테스트 단계에서 나오는 최종 지표는 정확도(Accuracy), 정밀도(Precision), 재현율(Recall) 같은 수치들입니다. 여기서 재현율이란 실제로 양성인 데이터 중 모델이 양성으로 올바르게 분류한 비율로, 의료 진단이나 사기 탐지처럼 놓치면 안 되는 상황에서 특히 중요하게 봐야 합니다. 이 지표들이 기준치를 넘어야 비로소 실제 환경 배포를 논할 수 있습니다.

출처: McKinsey Global Institute, The State of AI에 따르면 AI 프로젝트의 상당수가 실험실 성능과 현장 성능 사이의 괴리 때문에 실패한다고 지적합니다. 검증 없이 학습 성능만 믿고 배포한 게 주요 원인 중 하나입니다. 또한 출처: IBM, AI Model Validation에서도 테스트 데이터의 완전한 격리가 신뢰할 수 있는 AI 시스템의 핵심 전제 조건임을 강조하고 있습니다.

만약 테스트 결과가 기대에 못 미친다면 선택지는 두 가지입니다. 과적합이라면 드롭아웃(Dropout)이나 데이터 증강(Data Augmentation) 같은 규제 기법을 적용합니다. 드롭아웃이란 학습 도중 임의로 일부 뉴런을 꺼서 모델이 특정 경로에만 의존하지 못하게 만드는 기법입니다. 반대로 언더피팅(Underfitting), 즉 과소적합이 문제라면 모델의 층을 더 쌓거나 의미 있는 특성 변수를 추가로 추출하는 특성 공학(Feature Engineering)을 시도해야 합니다. 제 경험상 이건 모델 구조를 바꾸는 것보다 데이터 자체를 다시 들여다보는 것이 먼저인 경우가 많았습니다.

요약: 테스트 데이터는 딱 한 번, 마지막에만 씁니다. 이 원칙을 지켜야만 모델의 실전 성능을 제대로 측정할 수 있고, 배포 이후의 실패를 예방할 수 있습니다.

 

자주 묻는 질문

Q. 학습 정확도는 높은데 검증 정확도가 낮으면 어떻게 해야 하나요?

A. 전형적인 과적합 신호입니다. 모델이 학습 데이터를 통째로 암기한 상태이므로, 드롭아웃 비율을 높이거나 데이터 증강으로 학습 데이터의 다양성을 늘리는 방향이 효과적입니다. 모델 구조 자체를 단순화하는 것도 방법 중 하나입니다.

 

Q. 데이터 양이 적을 때 학습·검증·테스트를 어떻게 나눠야 하나요?

A. 데이터가 적을 때는 k-폴드 교차 검증(k-Fold Cross Validation)을 쓰는 것이 좋습니다. 전체 데이터를 k개 구간으로 나눠 번갈아 검증셋으로 쓰는 방식으로, 적은 데이터로도 신뢰도 높은 검증 결과를 얻을 수 있습니다. 테스트셋은 이 과정과 별개로 처음부터 따로 떼어놓는 것이 원칙입니다.

 

Q. 테스트 결과가 좋게 나왔는데도 실제 배포 후 성능이 떨어지는 이유가 뭔가요?

A. 테스트 데이터와 실제 서비스 데이터의 분포가 다를 때 자주 발생합니다. 이를 데이터 드리프트(Data Drift)라고 합니다. 예를 들어 특정 시기나 지역 데이터로만 학습했는데 전혀 다른 환경에서 쓰이는 경우입니다. 배포 후에도 모니터링을 지속하고, 새로운 데이터로 주기적으로 재학습하는 것이 근본적인 해결책입니다.

 

Q. 하이퍼파라미터 튜닝은 검증 데이터로만 해야 하나요?

A. 맞습니다. 하이퍼파라미터 튜닝은 반드시 검증 데이터 기준으로만 해야 합니다. 테스트 데이터를 보면서 하이퍼파라미터를 조정하는 순간, 그 테스트 데이터 결과는 더 이상 공정한 평가가 아닙니다. 이 오류를 범하면 모델이 실제보다 훨씬 좋아 보이는 착시 현상이 생깁니다.

 

결론

학습은 지식을 채우는 과정이고, 검증은 공부 방향을 바로잡는 과정이며, 테스트는 사회로 나가기 직전의 최종 자격시험입니다. 이 세 단계는 순서도, 데이터 격리도, 단 한 번도 예외 없이 지켜져야 합니다.

제 경험상 이 절차를 귀찮다고 건너뛰면 반드시 나중에 더 큰 대가를 치릅니다. 처음에 5분 더 들여 데이터를 제대로 나눠두는 것이 배포 후 장애 대응하느라 날새는 것보다 훨씬 낫습니다. 지금 모델을 훈련 중이라면 지금 당장 테스트셋을 금고에 넣어두십시오.

참고: McKinsey Global Institute — The State of AI / IBM — AI Model Validation


소개 및 문의 · 개인정보처리방침 · 면책조항

© 2026 블로그 이름