설명
안녕하세요, BDAI 운영진입니다. 😊
Titanic 생존 예측 챌린지 진행을 위한 베이스라인 코드를 공유드립니다.
해당 코드는 다음과 같은 기본적인 머신러닝 흐름을 담고 있습니다.
튜토리얼 성격의 코드이므로,
전처리 방식, 사용 컬럼, 모델 등을 자유롭게 변경해보시면서 성능을 개선해보시길 바랍니다!
감사합니다 🙌
본 튜토리얼에서는 Titanic 데이터를 활용하여 머신러닝의 기본 흐름을 학습합니다.
목표
- 데이터 전처리 이해
- 모델 학습 과정 이해
- F1 Score 기반 성능 평가
⚠️ 이번 튜토리얼에서는 결과 재현을 위해 seed를 고정합니다.
import random import numpy as np import pandas as pd import seaborn as sns from sklearn.model_selection import train_test_split from sklearn.compose import ColumnTransformer from sklearn.pipeline import Pipeline from sklearn.impute import SimpleImputer from sklearn.preprocessing import OneHotEncoder, StandardScaler from sklearn.metrics import f1_score, classification_report from sklearn.ensemble import RandomForestClassifier # seed 고정 (변경하지 마세요.) SEED = 42 random.seed(SEED) np.random.seed(SEED)
df = sns.load_dataset("titanic") df.head()
survived : 예측해야 할 정답(label)⚠️
survived를 입력 변수에 포함하면 안 됩니다.
X = df.drop(columns=["survived"]) y = df["survived"]
학습에 사용할 컬럼을 선택합니다.
💡 이 부분은 자유롭게 수정 가능합니다.
다양한 컬럼을 사용해 성능을 개선해보세요!
numeric_features = ["age", "sibsp", "parch", "fare", "pclass"] categorical_features = ["sex", "embarked", "alone"] selected_features = numeric_features + categorical_features X = X[selected_features]
⚠️ 실제 공모전에서는 Test 데이터의 정답(label)을 확인할 수 없지만,
이번 튜토리얼에서는 학습을 위해 Test label을 함께 사용하여 성능을 확인합니다.
X_train, X_test, y_train, y_test = train_test_split( X, y, test_size=0.3, stratify=y, random_state=SEED )
모델이 데이터를 학습할 수 있도록 다음과 같은 처리를 수행합니다.
💡 전처리 방식은 자유롭게 변경 가능합니다.
numeric_transformer = Pipeline([ ("imputer", SimpleImputer(strategy="median")), ("scaler", StandardScaler()) ]) categorical_transformer = Pipeline([ ("imputer", SimpleImputer(strategy="most_frequent")), ("onehot", OneHotEncoder(handle_unknown="ignore")) ]) preprocessor = ColumnTransformer([ ("num", numeric_transformer, numeric_features), ("cat", categorical_transformer, categorical_features) ])
RandomForest 모델을 사용합니다.
💡 모델은 자유롭게 변경 가능합니다.
model = RandomForestClassifier( n_estimators=200, max_depth=5, random_state=SEED ) clf = Pipeline([ ("preprocessor", preprocessor), ("model", model) ])
clf.fit(X_train, y_train)
이번 튜토리얼에서는 F1 Score를 사용합니다.
💡 Accuracy와 비교해보는 것도 추천합니다.
y_pred = clf.predict(X_test) print("F1 Score:", f1_score(y_test, y_pred)) print(classification_report(y_test, y_pred))
모델이 예측한 결과를 바탕으로 제출 파일을 생성합니다.
제출 파일은 다음과 같은 형식을 따라야 합니다.
| PassengerId | Survived |
|-------------|----------|
| 1 | 0 |
| 2 | 1 |
| ... | ... |
⚠️ seaborn Titanic 데이터에는 PassengerId가 포함되어 있지 않기 때문에,
제출 형식에 맞추기 위해 index를 활용하여 임의로 생성합니다.
submission = X_test.copy() submission = submission.reset_index(drop=True) submission["PassengerId"] = submission.index + 1 submission["Survived"] = y_pred submission = submission[["PassengerId", "Survived"]] submission.head()
생성한 제출 파일을 CSV 형식으로 저장합니다.
저장된 submission.csv 파일을 제출하면 됩니다.
💡 실제 공모전에서는 test 데이터에 대해 예측한 결과를 제출하게 됩니다.
submission.to_csv("submission.csv", index=False)