Ch.09

교차 검증 (Cross Validation): 모의고사와 수능

인공지능 모델이 자기가 공부한 연습 문제만 달달 외워서 푸는 '우물 안 개구리'가 되는 것을 막기 위한 필수 과정입니다. 수능을 앞둔 수험생이 모의고사를 통해 자신의 진짜 실력을 객관적으로 점검하고 약점을 보완하듯, 머신러닝 모델도 훈련 데이터로만 채점받지 않고 검증(Validation)테스트(Test)라는 낯선 문제들로 평가받아야 합니다. 이 챕터에서는 데이터를 쪼개어 모델의 진짜 실력을 검증하는 교차 검증(Cross Validation)의 다양한 기법(Hold-out, K-Fold 등)과 이를 통해 모델의 신뢰성을 높이는 방법을 알아봅니다.

챕터별 머신러닝 도식화

챕터를 선택하면 아래 도식이 해당 챕터 내용으로 바뀌어요. 머신러닝 흐름을 한눈에 보세요.

데이터를 훈련/검증/테스트로 나누고, K-Fold에서는 번갈아 검증해 평균으로 성능을 추정합니다.

① 5-Fold검증Fold 1훈련Fold 2훈련Fold 3훈련Fold 4훈련Fold 5검증 점수S1S2S3S4S5평균 μ

교차 검증: 모의고사(검증)로 실력 추정, 수능(테스트)로 최종 확인.

교차 검증: 모의고사와 수능

교차 검증이란? '풀어본 문제로 채점하지 않기' — 만약 수학 시험을 볼 때, 문제집에서 풀었던 문제와 토씨 하나 틀리지 않고 똑같이 출제된다면 어떨까요? 학생이 원리를 이해한 건지, 아니면 문제의 답만 달달 외운 과적합(Overfitting) 상태인지 알 길이 없습니다. 인공지능도 마찬가지입니다. 모델을 학습시킨 데이터로 또다시 테스트를 하면 항상 100점이 나오기 마련입니다. 그래서 우리가 가진 전체 데이터를 훈련(Train), 검증(Validation), 테스트(Test) 세 묶음으로 쪼개어, 처음 보는 낯선 데이터에서도 모델이 제 실력을 발휘하는지 깐깐하고 공정하게 평가하는 과정이 바로 교차 검증입니다.
데이터를 쪼개는 3단계 역할 분담 — 데이터를 나누는 가장 이상적인 황금비율과 각 역할은 다음과 같습니다.
  • 데이터 종류훈련(Train) 데이터
  • 비유개념서 / 기본 문제집
  • 역할과 특징인공지능이 패턴을 찾고 공식을 학습(가중치 조절)하는 데 쓰는 주교재입니다.
  • 일반적인 비율약 70~80%
  • 데이터 종류검증(Validation) 데이터
  • 비유9월 모의고사
  • 역할과 특징학습 중간에 실력을 점검하고, 학습 방향(하이퍼파라미터)을 수정하는 데 씁니다.
  • 일반적인 비율약 10~15%
  • 데이터 종류테스트(Test) 데이터
  • 비유대망의 수능 시험
  • 역할과 특징모든 학습이 끝난 후, 실전에 투입하기 전 단 한 번만 꺼내어 최종 점수를 매깁니다.
  • 일반적인 비율약 10~15%
어떻게 쪼갤까? Hold-out과 K-Fold — 데이터를 쪼개는 방법에는 크게 두 가지가 있습니다. 첫 번째는 피자를 칼로 단 한 번 슥 잘라서 한쪽은 먹고 한쪽은 남기듯, 데이터를 한 번만 훈련용과 테스트용으로 나누는 Hold-out(홀드아웃) 방식입니다. 아주 쉽고 빠르지만, 만약 우연히 쉬운 문제들만 테스트용으로 빠지면 모델의 성능이 뻥튀기될 수 있는 '운'이 작용합니다. 이 단점을 완벽히 극복한 것이 바로 K-Fold(K-겹) 교차 검증입니다. 전체 데이터를 K개의 조각(Fold)으로 낸 다음, 돌아가면서 한 조각씩 모의고사(검증) 용도로 쓰고 나머지는 훈련용으로 씁니다. 이렇게 하면 모든 데이터가 최소 한 번씩은 모의고사 문제로 출제되므로 '운'에 좌우되지 않는 아주 객관적인 실력 평가가 가능해집니다.
수식으로 보는 K-Fold의 최종 성적 — K-Fold 검증이 끝나면 K번의 모의고사를 치렀으니 성적표도 K개가 나옵니다. 모델의 최종 진짜 실력은 이 K번의 성적을 모두 합쳐서 평균을 낸 값으로 결정합니다.
* 평균 성적 수식: Sˉ=1Kk=1KSk\bar{S} = \frac{1}{K}\sum_{k=1}^K S_k
* 수식 기호 설명: KK는 Fold 개수(모의고사 횟수), SkS_kkk번째 Fold를 검증용으로 썼을 때 받은 점수(정확도·MSE 등)입니다. k=1KSk\sum_{k=1}^K S_kS1+S2++SKS_1 + S_2 + \cdots + S_K를 뜻하므로, 전체를 KK로 나눈 Sˉ\bar{S}K개 검증 점수의 평균이 됩니다. 이 평균 Sˉ\bar{S}를 모델의 최종 성능 추정값으로 씁니다.
* 숫자 예: 5-Fold로 5번 시험을 봤고 점수가 80, 85, 90, 80, 85점이면 Sˉ=(80+85+90+80+85)/5=84\bar{S} = (80+85+90+80+85)/5 = 84점이 진짜 평균 점수가 됩니다.
우물 안 개구리 탈출 (과적합 감지) — 모델이 자기가 연습한 훈련 데이터에서는 99점을 받는데, 처음 보는 검증 데이터에서는 50점을 받는다면? 이는 개념은 모르고 답만 외운 과적합 상태임이 틀림없습니다. 교차 검증은 모델이 실전에 나가 대형 사고를 치기 전에 이런 '암기왕'들을 미리 솎아내는 강력한 필터 역할을 합니다.
어디서든 통하는 진짜 실력 증명 (일반화 성능 추정) — 기업이 AI를 도입하는 이유는 과거의 데이터를 맞히기 위해서가 아니라, '앞으로 일어날 미래'를 예측하기 위해서입니다. K-Fold처럼 여러 번 교차해서 꼼꼼히 검증을 거친 모델은, 나중에 처음 보는 생소한 데이터가 들어와도 당황하지 않고 안정적으로 정답을 맞힐 확률(일반화 성능)이 매우 높습니다.
최적의 공부법 찾기 (하이퍼파라미터 튜닝과 모델 선택) — 모델을 만들 때 나무의 깊이를 3으로 할지 5로 할지, 이웃(K-NN)을 3명 볼지 5명 볼지(하이퍼파라미터) 고민될 때가 있습니다. 이때 다양한 설정으로 각각 모의고사(검증 데이터)를 치러보고 가장 점수가 잘 나오는 설정을 고르면 됩니다! 모의고사와 수능(테스트 데이터)이 엄격하게 분리되어 있기 때문에, 꼼수 없이 가장 똑똑한 모델을 공정하게 선발할 수 있습니다.
데이터 과학자의 필수 작업 루틴 (실무 파이프라인) — 실무에서 데이터를 건네받으면, 가장 먼저 하는 일이 금고에 '테스트 데이터'를 10% 정도 떼어서 꼭꼭 숨겨두는 것입니다. 나머지 90%를 지지고 볶으며(훈련 및 K-Fold 검증) 최고의 모델을 깎아 만든 뒤, 프로젝트 발표 전날 숨겨둔 테스트 데이터를 딱 한 번 꺼내어 "우리 모델의 최종 예측 정확도는 92%입니다!"라고 자신 있게 보고하게 됩니다.
인공지능 올림픽 개최 (여러 알고리즘의 공정한 비교) — '우리 쇼핑몰 고객 이탈 예측에는 로지스틱 회귀가 좋을까, 랜덤 포레스트가 좋을까?' 궁금할 때, 똑같은 K-Fold 룰을 적용해 두 알고리즘을 공정하게 경쟁시킵니다. 똑같은 조건으로 모의고사를 5번씩 치르게 한 뒤 평균 점수(Sˉ\bar{S})가 더 높은 알고리즘을 최종 우승자로 선정하여 실제 서비스에 투입합니다.
정리
교차 검증은 모델이 훈련할 때 쓰인 데이터로만 성능을 재면 안 된다는 전제에서 출발합니다. 수능을 앞둔 수험생이 모의고사로 실력을 점검하듯, 머신러닝에서도 훈련 데이터로만 채점하면 '연습 문제만 외운 상태'인지 알 수 없습니다. 그래서 전체 데이터를 훈련, 검증, 테스트 세 역할로 나눕니다. 훈련 데이터로 모델이 패턴을 학습하고, 검증 데이터는 학습 도중 실력을 점검하거나 하이퍼파라미터를 고를 때 사용합니다. 테스트 데이터는 모든 학습이 끝난 뒤, 실전에 쓰기 전 단 한 번만 꺼내어 최종 성능을 보고할 때만 씁니다. 데이터를 나누는 방식에는 Hold-outK-Fold가 있습니다. Hold-out은 데이터를 한 번만 훈련용과 테스트용(또는 검증용)으로 쪼개는 방법이고, K-Fold는 데이터를 K개 구간으로 나누어 한 구간씩 번갈아 검증용으로 쓰고 나머지로 훈련하는 방식입니다. K-Fold를 쓰면 모든 데이터가 한 번씩은 검증에 쓰이므로, 한 번만 나누는 것보다 성능 추정이 더 안정적입니다.