본문 바로가기

04. 캐글

00009. [KAG-001] Titanic 생존자 예측 #5 - 특성 공학으로 성능 끌어올리기

반응형

타이타닉 대회의 성능을 한 단계 끌어올리기 위해 이번에는 **Feature Engineering (피처 엔지니어링)**을 진행해보겠습니다.

데이터에 숨어 있는 정보들을 잘 뽑아내면, 단순한 모델이라도 놀라운 성능을 발휘할 수 있습니다.


✅ 1. 이름에서 '호칭(Title)' 추출하기

타이타닉 승객의 Name에는 다양한 호칭이 포함되어 있습니다. 예를 들어:

"Braund, Mr. Owen Harris"Mr

이러한 호칭은 사회적 지위나 나이, 성별 등과 관련이 있을 수 있습니다.

# Title 추출
train['Title'] = train['Name'].str.extract(' ([A-Za-z]+)\.', expand=False)
test['Title'] = test['Name'].str.extract(' ([A-Za-z]+)\.', expand=False)

# 유사한 호칭끼리 그룹화
for df in [train, test]:
    df['Title'] = df['Title'].replace(['Lady', 'Countess','Capt','Col',
                                       'Don', 'Dr', 'Major', 'Rev', 'Sir', 'Jonkheer', 'Dona'], 'Rare')
    df['Title'] = df['Title'].replace('Mlle', 'Miss')
    df['Title'] = df['Title'].replace('Ms', 'Miss')
    df['Title'] = df['Title'].replace('Mme', 'Mrs')

# 숫자로 변환
title_mapping = {'Mr': 1, 'Miss': 2, 'Mrs': 3, 'Master': 4, 'Rare': 5}
train['Title'] = train['Title'].map(title_mapping)
test['Title'] = test['Title'].map(title_mapping)

✅ 2. 가족 수(FamilySize) 피처 만들기

SibSpParch는 형제/자매, 부모/자식 수를 나타냅니다. 이를 합쳐 가족 크기라는 새로운 정보를 만들 수 있습니다.

for df in [train, test]:
    df['FamilySize'] = df['SibSp'] + df['Parch'] + 1  # 자기 자신 포함

또한, 혼자인 승객(FamilySize==1)은 생존 확률이 낮다는 통계도 있으니 IsAlone 피처도 만들어보죠.

for df in [train, test]:
    df['IsAlone'] = 0
    df.loc[df['FamilySize'] == 1, 'IsAlone'] = 1

✅ 3. 나이 구간화 (Age Binning)

연속형 변수인 나이를 범주형으로 나누면 모델이 더 잘 인식할 수 있습니다.

for df in [train, test]:
    df['AgeBin'] = pd.cut(df['Age'], bins=[0, 12, 18, 35, 60, 80], labels=[0,1,2,3,4])

비슷하게 요금(Fare)도 구간화할 수 있습니다:

for df in [train, test]:
    df['FareBin'] = pd.qcut(df['Fare'], 4, labels=[0,1,2,3])

✅ 4. 새로운 Feature 조합으로 모델 재학습

이제까지 생성한 피처들을 포함하여 모델을 다시 학습해봅시다:

features = ['Pclass', 'Sex', 'Title', 'AgeBin', 'FareBin', 'FamilySize', 'IsAlone', 'Embarked']
X = train[features]
y = train['Survived']

X_test = test[features]

이후 모델 학습 및 제출 과정은 이전 에피소드와 동일하게 진행하면 됩니다.
여러분도 다양한 조합으로 실험해보세요!


📈 기대 효과

  • 단순한 모델(RandomForest)로도 0.8 초반 → 0.82~0.85까지 상승 가능
  • 새로운 변수들이 데이터에 대한 통찰을 더해줌

🔜 다음 에피소드 예고

다음 편에서는 이번에 만든 피처들을 바탕으로 XGBoost 모델 적용과 비교 분석을 진행해보겠습니다.
더 나은 점수를 위한 여정은 계속됩니다! 😎

감사합니다 🙌

반응형