본문 바로가기
두두 IT/머신런닝(ML)

scikit-learn으로 트레이닝 데이터와 테스트 데이터 분할

by DoDo's 2026. 5. 17.
반응형

1. 머신러닝 데이터 분할: 왜 하는 걸까요? (이론)

학생이 수능(실전 예측)을 잘 보게 하려면 어떻게 공부시켜야 할까요? 보통 문제집(학습 데이터)을 풀게 하고, 모의고사(테스트 데이터)를 통해 얼마나 잘 학습했는지 평가를 하죠. 만약 문제집에 있는 똑같은 문제를 모의고사로 낸다면, 학생이 진짜 실력이 좋은 건지 아니면 그냥 답을 외운 건지 알 수가 없습니다.

머신러닝도 똑같습니다! 전체 데이터 100%를 모두 인공지능 학습에 써버리면, 나중에 이 모델이 처음 보는 새로운 데이터에 대해 얼마나 잘 예측하는지 '평가'할 방법이 없습니다. 그래서 보통 전체 데이터의 70%~80%는 학습(Train)용으로 쓰고, 나머지 20%~30%는 평가(Test)용으로 꽁꽁 숨겨두었다가 나중에 모델을 테스트할 때 사용합니다.

  • X (Feature, 피처): 예측을 하기 위해 주어지는 힌트 데이터 (예: 비행 이동 거리, 예정 비행 시간)
  • Y (Label, 라벨/타겟): 우리가 최종적으로 맞추고 싶은 정답 데이터 (예: 실제 지연된 시간)

2. 패키지 설치 (scikit-learn)

사이킷런은 파이썬에서 머신러닝을 할 때 가장 많이 쓰이는 필수 라이브러리입니다. 코드를 실행하기 전 터미널(아나콘다 프롬프트 등)에서 꼭 설치를 진행해야 합니다.

Bash
# 터미널 창에 입력하여 설치합니다.
pip install scikit-learn

3. 실전 코드 구현 & 상세 주석

자, 이제 전체 데이터를 가로(행 비율)와 세로(X 힌트와 Y 정답)로 쪼개는 마법을 부려봅시다!

Python
import pandas as pd
# 사이킷런에서 데이터 분할을 도와주는 아주 유명한 함수를 불러옵니다.
from sklearn.model_selection import train_test_split

# 1. 30만 건의 전체 항공 지연 데이터 불러오기
delay_df = pd.read_csv('flight_delays_large.csv')

# --- [세로로 쪼개기: 힌트(X)와 정답(Y) 분리] ---

# 2. X 데이터 (피처, 힌트 데이터 모음) 만들기
# 'DISTANCE(거리)'와 'CRS_ELAPSED_TIME(예정 비행 시간)' 컬럼만 추출합니다.
# 이 정보들을 가지고 비행기가 연착될지 안 될지 예측할 겁니다.
X = delay_df.loc[:, ['DISTANCE', 'CRS_ELAPSED_TIME']]

# 3. Y 데이터 (라벨, 정답 데이터 모음) 만들기
# 'ARR_DELAY(도착 지연 시간)' 컬럼만 추출합니다.
# 우리가 머신러닝을 통해 최종적으로 맞추고 싶은 값입니다.
y = delay_df.loc[:, ['ARR_DELAY']]


# --- [가로로 쪼개기: 학습용(Train)과 테스트용(Test) 분리] ---

# 4. train_test_split 함수를 사용해 데이터 황금 비율로 쪼개기!
# test_size=0.3 : 전체 데이터의 30%를 테스트용으로 빼두겠다는 뜻입니다. (학습용 70%)
# random_state=42 : 데이터를 랜덤하게 섞어서 자르는데, 항상 같은 결과가 나오도록 시드를 고정합니다. (42는 관례적으로 많이 쓰는 숫자입니다)
X_train, X_test, y_train, y_test = train_test_split(
    X, y, test_size=0.3, random_state=42
)

# 5. 분할이 잘 되었는지 데이터의 모양(shape) 확인하기
print("--- 데이터 분할 결과 (행, 열 개수) ---")
print(f"X_train (학습용 힌트): {X_train.shape}")
print(f"X_test  (평가용 힌트): {X_test.shape}")
print(f"y_train (학습용 정답): {y_train.shape}")
print(f"y_test  (평가용 정답): {y_test.shape}")

4. 실행 후 결과 값

데이터가 어떻게 나뉘었는지 결과를 확인해 볼까요? (원본 데이터가 30만 건이라고 가정했을 때의 결과입니다.)

Plaintext
--- 데이터 분할 결과 (행, 열 개수) ---
X_train (학습용 힌트): (210000, 2)  <-- (전체의 70%인 21만 건. 힌트 컬럼은 거리, 시간 2개)
X_test  (평가용 힌트): (90000, 2)   <-- (전체의 30%인 9만 건. 평가용으로 꽁꽁 숨겨둠!)
y_train (학습용 정답): (210000, 1)  <-- (학습에 쓰일 21만 건에 대한 지연 시간 정답. 컬럼 1개)
y_test  (평가용 정답): (90000, 1)   <-- (나중에 모델을 채점할 때 쓸 정답지 9만 건)

💡 튜터의 마무리 핵심 요약! 이 단계는 머신러닝 요리를 하기 전에 재료를 손질하고 도마를 세팅하는 과정과 같습니다! train_test_split은 앞으로 머신러닝을 할 때 숨 쉬듯이 쓰게 될 함수이니 이 4개의 묶음(X_train, X_test, y_train, y_test)이 나오는 순서와 개념을 꼭꼭 기억해 주세요! 다음 시간부터는 드디어 진짜 인공지능 '모델'을 만들어 볼 겁니다! 화이팅! 🚀

반응형