PROGRESS
2 / 17
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% | 데이터 매우 많을 때 |
💡 핵심: 본 적 없는 데이터로 평가해야 모델의 진짜 실력을 알 수 있습니다.