반응형

0. 개요

- 타이타닉 사건: 타이타닉은 역사상 가장 유명한 해상 사고 중 하나로, 1912년 4월 15일에 발생한 비극적인 사건

- 타이타닉 데이터셋은 머신 러닝과 데이터 분석 분야에서 많이 활용되는 이유는 여러 가지가 있습니다. 이해하기 쉬운 구조와 다양한 특성들로 구성되어 있어 머신 러닝의 기본 개념을 학습하고 모델을 구축하는 데 사용하기에 적합합니다.  타이타닉 데이터셋은 생존 여부를 예측하는 이진 분류 문제로도 활용되고, 승객의 나이나 운임 등을 예측하는 회귀 문제로도 활용될 수 있습니다. 이로 인해 다양한 머신 러닝 알고리즘과 기법을 연습할 수 있습니다. 이러한 이유들로 인해 타이타닉 데이터셋은 머신 러닝과 데이터 분석의 입문자부터 전문가까지 다양한 수준의 사람들에게 인기있는 연습 및 학습용 데이터셋 중 하나로 널리 사용되고 있습니다. 

 

1. 파이썬 코드

#라이브러리 불러오기
import pandas as pd
from sklearn.model_selection import train_test_split
from sklearn.ensemble import RandomForestClassifier
from sklearn.metrics import accuracy_score

#데이터 불러오기
titanic_data = pd.read_csv('titanic.csv')

#필요한 열값만 선택
features = ['Survived', 'Pclass', 'Sex', 'Age', 'SibSp', 'Parch', 'Fare', 'Embarked']

#결측치 처리 및 범주형 데이터 변환
titanic_data = titanic_data[features].dropna()
titanic_data['Sex'] = titanic_data['Sex'].map({'male': 0, 'female': 1})
titanic_data['Embarked'] = titanic_data['Embarked'].map({'S': 0, 'C': 1, 'Q': 2})

#X값 Y값 정의 
X = titanic_data.drop('Survived', axis=1)
y = titanic_data['Survived']

# 데이터 분할
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)

# 머신러닝 모델 - 랜덤포레스트 생성 및 학습
model = RandomForestClassifier(random_state=42)
model.fit(X_train, y_train)

# 테스트 데이터에 대한 예측
y_pred = model.predict(X_test)

# 정확도 평가
accuracy = accuracy_score(y_test, y_pred)
print(f'Accuracy: {accuracy:.2f}')

 

2. 탐색적 데이터 분석(EDA)

1) 데이터가 어떻게 생겼는지 확인

import pandas as pd
import matplotlib.pyplot as plt
import seaborn as sns

# 데이터 불러오기
titanic_data = pd.read_csv('titanic.csv')

# 데이터의 일부를 살펴봅니다.
titanic_data.head()

 

대부분의 칼럼값은 이름만 봐도 쉽게 알 수 있다. 가장 중요한 survived는 생존 유무인데 1이 생존이다.  sibsp 형제 혹은 부부의 수이고 parch는 부모 혹은 자녀의 수이다.

 

2) 생존자와 사망자의 수 확인

sns.countplot(x='Survived', data=titanic_data)
plt.title('Survivors vs. Non-Survivors')
plt.show()

 

 

3) 성별에 따른 생존 여부 확인

sns.countplot(x='Survived', hue='Sex', data=titanic_data)
plt.title('Survivors and Non-Survivors by Sex')
plt.show()

 

 

4) 나이 분포 확인

sns.histplot(data=titanic_data, x='Age', bins=20, kde=True)
plt.title('Age Distribution')
plt.show()

3. 머신러닝 - 랜덤포레스트(Random Forest)

이번 모델링에서는 랜덤 포레스트를 활용하였습니다. 랜덤 포레스트는 머신 러닝 알고리즘 중 하나로, 앙상블 학습 방법 중의 하나입니다. 앙상블 학습은 여러 개의 간단한 모델을 결합하여 더 강력하고 안정적인 모델을 만드는 기법으로, 랜덤 포레스트는 이 중에서 대표적인 알고리즘입니다. 

 

랜덤 포레스트는 마치 여러 명의 전문가들이 함께 의사 결정을 내리는 것과 비슷합니다. 각 전문가는 다른 정보를 가지고 있고, 각자의 의견을 내놓습니다. 그런 다음, 모든 의견을 모아서 가장 현명한 결정을 내리는 방식입니다.

 

랜덤 포레스트는 컴퓨터에게 이런 방식을 가르쳐서 데이터를 예측하게 만든 것입니다. 데이터를 여러 조각으로 나누어서 작은 모델들이 각각 조각을 예측하도록 합니다. 그리고 이 작은 모델들의 의견을 모아서 예측 결과를 만들어 내죠. 이렇게 함으로써 하나의 모델보다 더 똑똑하고 정확한 예측을 할 수 있답니다. 그리고 랜덤 포레스트는 모델이 예측을 할 때, 일부 정보만을 사용하게 됩니다. 마치 몇몇 정보만 보고 결정을 내리는 것처럼요. 이렇게 함으로써 각각의 작은 모델이 더 다양한 측면을 보게 되고, 전체적으로 더 좋은 예측을 할 수 있게 되는 것이죠. 랜덤 포레스트는 간단하게 말하면 다양한 의견을 모아서 더 현명한 결정을 내리는 방법이라고 생각하시면 됩니다. 이렇게 하면 데이터 예측이 더 정확해지고 안정적으로 작동하게 되는 거죠!

 

4. 머신러닝과 예측분석

처음 머신러닝을 공부할 때 결과값 0.78만 나오고 이게 뭔가? 하였다. 결국은 내가 만든 모델을 가지고 평가를 해야하고 랜덤포레스트가 최적의 선택이었는지, 또 테스트 사이즈가 20%로 설정되었는데 이 보다 더 나은 방법은 없는지도 고민해봐야 한다. 

 

그리고 이번 데이터 분석 결과가 0.78이라고 나왔는데, 실제 데이터 셋에서 그러니까 y값 survived가 없는 상태에서 데이터를 인풋 하였을 때, 그러니까 성별, 연령,함께 탄 가족 수, 좌석 등급 등 x값을 넣었을 때 얼마나 정확하게 survived 생존여부를 예측할 수냐!를 활용하는 것이 관건일 것이다.

titanic.csv
0.06MB

반응형
Posted by 마르띤
,