훈련 데이터와 테스트 데이터를 나누는 이유

30 P
QUESTION 02 #398
머신러닝에서 전체 데이터를 훈련용과 테스트용으로 나누는 이유로 가장 적절한 것은?
다음 중 옳은 것을 고르세요

왜 데이터를 나눠서 학습하나요?

시험으로 이해하기

선생님이 학생의 진짜 실력을 알려면 어떻게 해야 할까요?

  • 나쁜 방법: 수업에서 푼 문제를 시험에 똑같이 출제 → 외워서 만점
  • 좋은 방법: 새로운 문제를 시험에 출제 → 진짜 이해했는지 확인

머신러닝도 똑같습니다!

데이터 분리의 원칙

전체 데이터 100개
     ↓ 분리
┌──────────────────┬──────────┐
│  훈련 (Train)    │ 테스트   │
│   80개 (80%)     │ 20개(20%)│
│                  │          │
│ 모델이 공부할     │ 실력 평가│
│ 문제집           │ 모의고사 │
└──────────────────┴──────────┘

만약 나누지 않으면?

# ❌ 잘못된 방법
model.fit(X, y)        # 100개로 학습
model.score(X, y)      # 같은 100개로 평가 → 99% 정확도!
# 하지만 새 데이터에는 50%도 안 나옴 (실제 실력은 형편없음)

과적합(Overfitting)이란?

  • 정의: 훈련 데이터를 "외워버려서" 새로운 데이터에는 못 맞추는 현상
  • 비유: 작년 기출문제만 외운 학생이 올해 새 시험에서 망하는 것
   훈련 점수: 99% ⭐⭐⭐⭐⭐
   테스트 점수: 50% ⭐⭐
   → 과적합 발생!

올바른 평가 흐름

from sklearn.model_selection import train_test_split

# 1. 데이터 분리 (8:2 비율)
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2)

# 2. 훈련 데이터로만 학습
model.fit(X_train, y_train)

# 3. 본 적 없는 테스트 데이터로 평가
score = model.score(X_test, y_test)
print(f"진짜 실력: {score * 100}%")

일반적인 분리 비율

비율 훈련 테스트 사용 상황
8:2 80% 20% 가장 일반적
7:3 70% 30% 데이터 적을 때
9:1 90% 10% 데이터 매우 많을 때

💡 핵심: 본 적 없는 데이터로 평가해야 모델의 진짜 실력을 알 수 있습니다.