본문 바로가기

04. 캐글

00007. [KAG-001] Titanic 생존자 예측 #3 - 데이터 전처리와 모델 학습

반응형

지난 포스팅에서 우리는 타이타닉 데이터셋에 대한 간단한 탐색적 데이터 분석을 수행했습니다. 이번 에피소드에서는 실제로 머신러닝 모델을 학습시키기 위한 데이터 전처리 과정모델 학습을 진행해보겠습니다.


✅ 1. 결측치 처리 (Missing Values)

타이타닉 데이터셋에는 다음과 같은 결측치가 존재합니다:

  • Age: 나이 정보가 일부 없음
  • Embarked: 승선 항구 정보가 일부 없음
  • Fare: 테스트 데이터셋에 일부 없음

이러한 결측치는 단순한 통계치로 대체해주겠습니다.

train['Age'].fillna(train['Age'].median(), inplace=True)
train['Embarked'].fillna(train['Embarked'].mode()[0], inplace=True)
test['Age'].fillna(train['Age'].median(), inplace=True)
test['Fare'].fillna(train['Fare'].median(), inplace=True)

💡 median()은 중간값, mode()는 최빈값으로 결측치를 채워 넣는 전형적인 방식입니다.


✅ 2. 범주형 변수 숫자 변환 (Categorical Encoding)

머신러닝 모델은 문자열 데이터를 직접 다루지 못합니다. 따라서 Sex, Embarked와 같은 문자열 데이터를 숫자로 변환해줘야 합니다.

train['Sex'] = train['Sex'].map({'male': 0, 'female': 1})
test['Sex'] = test['Sex'].map({'male': 0, 'female': 1})

train['Embarked'] = train['Embarked'].map({'S': 0, 'C': 1, 'Q': 2})
test['Embarked'] = test['Embarked'].map({'S': 0, 'C': 1, 'Q': 2})

✅ 3. 모델 학습을 위한 준비

학습에 사용할 특징(Feature) 컬럼을 선택하고, 정답(Label)을 분리합니다.

features = ['Pclass', 'Sex', 'Age', 'SibSp', 'Parch', 'Fare', 'Embarked']
X = train[features]
y = train['Survived']

학습용 데이터와 검증용 데이터를 나눕니다:

from sklearn.model_selection import train_test_split

X_train, X_valid, y_train, y_valid = train_test_split(X, y, test_size=0.2, random_state=42)

✅ 4. Random Forest 모델 학습 및 평가

from sklearn.ensemble import RandomForestClassifier
from sklearn.metrics import accuracy_score

model = RandomForestClassifier(n_estimators=100, random_state=42)
model.fit(X_train, y_train)

preds = model.predict(X_valid)
print("검증 정확도:", accuracy_score(y_valid, preds))

📌 저의 경우 약 0.82 정도의 검증 정확도를 얻을 수 있었습니다.


🔜 다음 에피소드 예고

다음 포스트에서는 테스트 데이터셋에 이 모델을 적용하여 생존 여부를 예측하고, Kaggle 제출용 파일을 생성해보겠습니다.

감사합니다 🙌

➡️ 이어서 보기: [#4 - 제출 파일 생성 및 Kaggle 업로드 (예정)]

반응형