본문으로 건너뛰기

012 setup() 전처리 옵션 - 데이터 분할

키워드: 데이터 분할, train test split

개요

머신러닝에서 데이터 분할은 모델의 일반화 성능을 평가하기 위해 필수적입니다. PyCaret은 자동으로 학습/테스트 세트를 분할하며, 다양한 옵션으로 분할 방식을 제어할 수 있습니다.

실습 환경

  • Python 버전: 3.11 권장
  • 필요 패키지: pycaret[full]>=3.0, pandas
pip install pycaret[full]>=3.0 pandas

기본 데이터 분할

from pycaret.classification import *
from pycaret.datasets import get_data

data = get_data('titanic')

# 012 기본 설정: 70% 학습, 30% 테스트
clf = setup(data, target='Survived', session_id=42)

print(f"전체: {len(data)}")
print(f"학습: {len(clf.X_train)}")
print(f"테스트: {len(clf.X_test)}")

분할 비율 조정

train_size 파라미터

# 80% 학습, 20% 테스트
clf = setup(
data=data,
target='Survived',
train_size=0.8,
session_id=42
)

# 90% 학습, 10% 테스트
clf = setup(
data=data,
target='Survived',
train_size=0.9,
session_id=42
)

권장 분할 비율

데이터 크기권장 train_size
< 1,0000.7 ~ 0.8
1,000 ~ 10,0000.8
10,000 ~ 100,0000.8 ~ 0.9
> 100,0000.9

계층적 분할 (Stratified Split)

불균형 데이터에서 클래스 비율 유지:

# 012 PyCaret은 기본적으로 계층적 분할 사용
clf = setup(
data=data,
target='Survived',
session_id=42
)

# 012 원본 비율
print("원본:", data['Survived'].value_counts(normalize=True))
# 012 학습 비율
print("학습:", clf.y_train.value_counts(normalize=True))
# 012 테스트 비율
print("테스트:", clf.y_test.value_counts(normalize=True))

교차 검증 설정

fold 파라미터

clf = setup(
data=data,
target='Survived',
fold=5, # 5-fold 교차 검증 (기본값: 10)
session_id=42
)

fold_strategy 파라미터

# 012 계층적 K-Fold (기본값, 분류용)
clf = setup(data, target='Survived', fold_strategy='stratifiedkfold', session_id=42)

# 012 일반 K-Fold
clf = setup(data, target='Survived', fold_strategy='kfold', session_id=42)

# 012 그룹 K-Fold (같은 그룹이 학습/테스트에 섞이지 않음)
clf = setup(data, target='Survived', fold_strategy='groupkfold', fold_groups='group_col', session_id=42)

외부 테스트 데이터 사용

# 012 별도 테스트 데이터가 있는 경우
train_data = data.iloc[:700]
test_data = data.iloc[700:]

clf = setup(
data=train_data,
target='Survived',
test_data=test_data, # 외부 테스트 데이터
session_id=42
)

정리

  • train_size로 분할 비율 조정 (기본 0.7)
  • 분류 문제에서는 자동으로 계층적 분할 적용
  • fold로 교차 검증 폴드 수 조정
  • test_data로 별도 테스트 데이터 지정 가능

다음 글 예고

다음 글에서는 setup() 고급 옵션 총정리를 다룹니다.


PyCaret 머신러닝 마스터 시리즈 #012