🎯 효과적인 데이터 분할 방법 | Train/Validation/Test 완벽 가이드 – Week 1. Lesson 6.
Автор: Deep Nexus One
Загружено: 2025-10-22
Просмотров: 22
Описание:
안녕하세요! LLM 설계자 육성 과정 Silver Track의 Week 1 Lesson 6입니다. 이번 영상에서는 **파인튜닝 성능을 좌우하는 데이터 분할 전략**을 배웁니다!
"잘못된 데이터 분할은 과적합의 지름길" - Train/Val/Test 분할 원칙부터 실전 팁까지 완벽 마스터하세요!
---
📚 이번 강의에서 배울 내용
• Train/Validation/Test의 역할
• 데이터셋 크기별 분할 비율
• 랜덤 분할 vs 계층적 분할
• 시계열 데이터 분할 전략
• 데이터 리케이지 방지법
• 교차 검증 (Cross-Validation)
• 실전 분할 코드 구현
---
⏰ 타임스탬프
00:00 인트로: 왜 데이터 분할이 중요한가?
01:49 Section 1. Train/Val/Test 이해
02:50 Section 2. 분할 방법: 랜덤, 계층적, 시간 기반
05:28 Section 3. 교차 검증
06:51 Section 4. 데이터 분할 플레이북
---
🔗 학습 자료 링크
🎯 전체 과정: https://hermes.deepnexusone.com/silver
📖 강의 자료: https://hermes.deepnexusone.com/resou...
📂 실습 코드:
💬 커뮤니티:
---
🎓 이 강의는 이런 분들께 추천합니다
✅ 데이터 분할을 대충 하고 계신 분
✅ 과적합 문제로 고민하는 분
✅ Test 셋 사용법이 헷갈리는 분
✅ 체계적인 분할 전략을 세우고 싶은 분
---
💡 Train/Val/Test 역할
Train (훈련 셋)
**역할**: 모델 학습에 직접 사용
**비율**: 70-80%
**주의**: 절대 검증/테스트에 재사용 금지
Validation (검증 셋)
**역할**: 하이퍼파라미터 튜닝, Early Stopping
**비율**: 10-15%
**주의**: 간접적으로 모델에 영향
Test (테스트 셋)
**역할**: 최종 성능 평가
**비율**: 10-15%
**주의**: 단 한 번만 사용, 절대 학습 금지
---
📊 데이터셋 크기별 분할 비율
소규모 (500개 미만)
*70:15:15 분할 권장*
Train: 350개 (70%)
Validation: 75개 (15%)
Test: 75개 (15%)
중규모 (500-5,000개)
*80:10:10 분할 권장*
Train: 800개 (80%)
Validation: 100개 (10%)
Test: 100개 (10%)
대규모 (5,000개 이상)
*85:10:5 또는 90:5:5*
Train: 9,000개 (90%)
Validation: 500개 (5%)
Test: 500개 (5%)
---
🔀 분할 전략
랜덤 분할 (Random Split)
```python
from sklearn.model_selection import train_test_split
Train + Val / Test 먼저 분할
train_val, test = train_test_split(
dataset, test_size=0.15, random_state=42
)
Train / Val 분할
train, val = train_test_split(
train_val, test_size=0.176, random_state=42
) # 0.176 = 15% of original
```
**장점**: 간단하고 빠름
**단점**: 클래스 불균형 시 편향 발생 가능
계층적 분할 (Stratified Split)
```python
클래스 비율 유지하며 분할
train_val, test = train_test_split(
dataset, test_size=0.15,
stratify=dataset['label'],
random_state=42
)
```
**장점**: 클래스 분포 유지
**적용**: 분류 작업, 불균형 데이터
---
🚫 데이터 리케이지 방지
리케이지란?
Train과 Test 간 정보 누출로 인한 성능 과대평가
흔한 리케이지 사례
*1. 중복 데이터*
```python
잘못된 예: 분할 전 중복 제거 안 함
train, test = split(dataset) # 중복 포함
올바른 예: 분할 전 중복 제거
dataset = dataset.drop_duplicates()
train, test = split(dataset)
```
*2. 시간 순서 무시*
```python
잘못된 예: 시계열 데이터를 랜덤 분할
train, test = random_split(timeseries_data)
올바른 예: 시간 순서 유지
cutoff = int(len(data) * 0.8)
train = data[:cutoff]
test = data[cutoff:]
```
*3. Test로 하이퍼파라미터 튜닝*
```python
잘못된 예
for lr in [0.001, 0.01, 0.1]:
model.train(train)
score = model.eval(test) # ❌ Test 사용
올바른 예
for lr in [0.001, 0.01, 0.1]:
model.train(train)
score = model.eval(val) # ✅ Validation 사용
```
---
🔄 교차 검증 (K-Fold Cross-Validation)
언제 사용?
데이터가 매우 작을 때 (< 500개)
성능의 신뢰 구간이 필요할 때
**주의**: 최종 Test 셋은 별도로 보관!
---
💻 실전 분할 코드
완전한 분할 파이프라인
```python
import pandas as pd
from sklearn.model_selection import train_test_split
1. 데이터 로드
df = pd.read_json('dataset.jsonl', lines=True)
2. 중복 제거
df = df.drop_duplicates(subset=['instruction', 'output'])
3. 셔플
df = df.sample(frac=1, random_state=42).reset_index(drop=True)
4. 분할 (70:15:15)
train_val, test = train_test_split(df, test_size=0.15, random_state=42)
train, val = train_test_split(train_val, test_size=0.176, random_state=42)
5. 저장
train.to_json('train.jsonl', orient='records', lines=True)
val.to_json('val.jsonl', orient='records', lines=True)
test.to_json('test.jsonl', orient='records', lines=True)
print(f"Train: {len(train)}, Val: {len(val)}, Test: {len(test)}")
```
---
📋 체크리스트
분할 전
[ ] 중복 데이터 제거
[ ] 데이터 품질 검증
[ ] 랜덤 시드 설정
분할 중
[ ] 적절한 비율 선택
[ ] 계층적 분할 필요 여부 확인
[ ] 시계열 순서 고려
분할 후
[ ] 각 셋 크기 확인
[ ] 클래스 분포 확인
[ ] Test 셋 별도 저장 및 봉인
---
⚠️ 흔한 실수
*1. Test 셋을 여러 번 사용*
Test는 최종 1회만!
*2. Validation 없이 Train/Test만 분할*
하이퍼파라미터 튜닝 불가
*3. 셔플 없이 순차 분할*
편향된 분포 발생
*4. 시계열 데이터를 랜덤 분할*
미래 정보 누출
*5. 분할 후 전처리*
Test에 Train 정보 누출 위험
---
💡 실전 팁
**Tip 1**: 분할 전 EDA (탐색적 데이터 분석)
분포 확인 후 전략 결정
**Tip 2**: 시드 고정으로 재현성 확보
random_state=42 습관화
**Tip 3**: Test 셋은 금고에 보관
학습 중 절대 열어보지 말기
**Tip 4**: 검증 결과 기록
어떤 분할이 최적인지 문서화
---
🛠️ 추천 도구
*분할 라이브러리*
scikit-learn (train_test_split)
datasets (Hugging Face)
*검증*
pandas (분포 확인)
matplotlib (시각화)
---
📌 이전/다음 강의
⬅️ 이전: Lesson 5 - 데이터 포맷팅
➡️ 다음: Week 2 Lesson 1 - LoRA/QLoRA 이론
---
💬 댓글로 참여하세요!
📌 여러분은 몇 대 몇으로 분할하시나요?
📌 데이터 리케이지 경험 있으신가요?
📌 질문 환영합니다!
---
🔔 구독하고 함께 성장해요!
👍 좋아요 - 도움되셨다면
🔔 알림 설정 - Week 2 놓치지 마세요
💬 댓글 - 분할 전략 공유해주세요
📤 공유 - 함께 배울 동료에게
---
*#데이터분할 #TrainTestSplit #파인튜닝 #과적합방지 #데이터리케이지 #교차검증 #머신러닝 #AI교육 #LLM*
---
📧 **문의**: [email protected]
💻 **GitHub**: [추후 공지 예정]
🌐 **웹사이트**: https://hermes.deepnexusone.com/silver
📂 **PDF다운**: https://hermes.deepnexusone.com/resou...
© 2025 DeepNexusOne. All rights reserved.
Повторяем попытку...
Доступные форматы для скачивания:
Скачать видео
-
Информация по загрузке: