[프로젝트] 타이타닉 생존자 예측

JaeGwon-Lee·2024년 8월 27일

프로젝트

목록 보기
4/17

개요

타이타닉 생존자 예측 Ensemble 모델 개발

  • 데이터의 양이 적은 타이타닉 데이터를 효과적으로 학습시키기 위해 앙상블 기법을 활용하였다.
  • 작은 데이터에 복잡한 모델을 사용하거나 모델을 깊게 학습시키면 오버피팅이 발생한다는 사실을 확인하였다.
  • 앙상블 기법 중 보팅을 활용하여 모델의 성능을 향상시켰다.

개인 프로젝트
Titanic - Machine Learning from Disaster   [Kaggle]
발표자료 & 코드   [GitHub]


기간

2020.11 ~ 2020.12


주제

Titanic호에서 어떤 사람들이 생존 할 가능성이 더 높은지 예측


데이터 전처리

타이타닉 승객 데이터

  • 사용 변수 : 승객 번호, 승선권 클래스, 이름, 성별, 나이, 동반한 형제자매/배우자 수, 동반한 부모/자식 수, 티켓 번호, 티켓 요금, 객실 번호, 승선한 항구명
  • 타깃 변수 : 생존여부

결측치 처리

  • Age : (mean - std , mean + std) 사이의 정수를 랜덤으로 채운 후 5개 구간으로 분할
  • Cabin : 객실을 가지고 있는지에 대한 파생변수 Has_Cabin으로 변환
  • Embarked : 최빈값인 S로 결측치 대체
  • Fare : 중앙값으로 결측치 대체하고 4개 구간으로 분할

파생 변수 생성

  • Words_Count : Name의 글자 수
  • Title : 이름의 두번째 단어를 추출하여 Mr, Miss, Mrs, Master, Rare로 구분
  • FamilySize : SibSp + Parch + 1
  • IsAlone : FamilySize가 1인 경우
  • Ticket_type : Ticket 앞 3글자 추출하여 타입을 문자로 바꾼 후 숫자로 라벨링

단일 머신러닝 모델

Logistic Regression
Cross Validation Accuracy : 79.9%     Test Accuracy : 77.5%

SVM (Support Vector Machine)
Cross Validation Accuracy : 81.2%     Test Accuracy : 73.6%

Decision Tree
Cross Validation Accuracy : 78.0%     Test Accuracy : 71.2%

MLP (Multi-Layer Perceptron)
Cross Validation Accuracy : 81.7%     Test Accuracy : 77.2%


앙상블 (Ensemble)

앙상블 학습이란 여러 개의 분류기를 생성하고 그 예측들을 결합해 단일 분류기보다 정확한 최종적인 예측을 도출해내는 기법이다.

앙상블을 사용하는 이유

머신러닝에서 가장 큰 고민 중 하나는 Overfitting이다. 복잡한 머신러닝 알고리즘을 사용하거나 세부적인 학습을 진행할수록 Overfitting이 발생하여 예측 성능이 하락한다. 반면에 단순한 머신러닝 알고리즘을 사용하거나 부족하게 학습하면 Underfitting이 발생하여 예측 성능이 하락한다.

앙상블은 약한 학습기 여러 개로 학습을 진행함으로써 Overfitting을 해결할 수 있다. 여러개의 학습기들을 결합함으로써 집단지성처럼 예측 성능을 향상시키고 Underfitting을 해결할 수 있다.


앙상블 - 배깅 (Bagging)

Bagging = Bootstrap + Aggregating : 부트스트랩 샘플을 합친다
cf) Bootstrap : 표본분포를 구하기 위해 데이터를 여러번 복원추출

데이터에서 여러 개의 부트스트랩 샘플을 추출하고, 하나의 모델로 학습시킨다. 단일 모델을 사용했을 때보다 분산을 줄이고 Overfitting을 피할 수 있다.
ex) RandomForest, ExtraTrees ...

Bagging Classifier
Cross Validation Accuracy : 80.4%     Test Accuracy : 75.1%

Random Forest
Cross Validation Accuracy : 81.0%     Test Accuracy : 76.7%

Extra Trees
Cross Validation Accuracy : 79.8%     Test Accuracy : 74.4%


앙상블 - 부스팅 (Boosting)

하나의 모델을 순차적으로 학습시키면서 이전에 잘못 예측한 데이터에 가중치를 부여하고 이를 기반해 데이터를 업데이트한다. 정확도가 매우 높지만 Outlier에 취약하다.
ex) AdaBoost, GradientBoosting, XGBoost ...

AdaBoost
Cross Validation Accuracy : 82.0%     Test Accuracy : 76.0%

Gradient Boosting
Cross Validation Accuracy : 83.5%     Test Accuracy : 76.7%

XGBoost
Cross Validation Accuracy : 81.0%     Test Accuracy : 78.4%

XGBoost Grid Search
Cross Validation Accuracy : 84.5%     Test Accuracy : 77.0%

Grid Search를 통해 Cross Validation을 기준으로 최적의 파라미터를 탐색하였는데 Overfitting이 발생하였다. 이는 XGBoost 모델의 복잡도에 비해 타이타닉 데이터의 크기가 크지 않기 때문에 Overfitting이 발생한 것으로 보인다.


배깅과 부스팅의 차이점

배깅은 데이터에서 샘플을 추출하여 수평적으로 모델을 학습시키고,
부스팅은 연속적으로 데이터를 업데이트한여 모델을 학습시킨다는 차이점이 있다.


앙상블 - 보팅 (Voting)

보팅은 여러 종류의 모델들로 얻은 결과에 대해 투표를 통해 최종 결과 도출한다.

Hard Voting

예측한 결과값 중 다수의 모델이 결정한 예측값을 최종 결과값으로 선정한다.

Soft Voting

각 모델의 결정 확률을 평균하여 확률이 가장 높은 값을 최종 결과값으로 선정한다.

앙상블의 핵심 요소

약한 학습기 여러 개로 학습을 진행하여 Overfitting을 해결하고, 여러 개의 학습기들을 결합함으로써 Underfitting을 해결하여 예측 성능을 향상시키는 것이 앙상블의 핵심이다.

복잡한 모델을 사용하는 것보다 단순한 모델을 활용하는 것이 더 효율적이고 효과적이라고 알려져 있는데, 실제로 Voting 모델에 성능이 뛰어난 XGBoost를 포함했을 때 오히려 정확도가 낮아졌다.

또한, 보팅 모델은 특징이 다른 모델들로 구성하여 서로 상호보완적인 효과를 내는 것이 적절하다.

보팅 결과

소프트 보팅을 활용하였고, 5개의 모델로 보팅 모델을 구성하였다.

보팅 모델은 특징이 다른 모델들로 구성하여 서로 상호보완적인 효과를 내는 것이 적절하다. 따라서 구성 모델은 Logistic Regression, SVM, Gradient Boosting, Random Forest, Extra Trees로 결정하였다.

Voting Classifier
Cross Validation Accuracy : 82.0%     Test Accuracy : 80.1%


결론

모델 결과 비교

단일 모델 : Logistic Regression
Cross Validation Accuracy : 79.9%     Test Accuracy : 77.5%

배깅 & 부스팅 : XGBoost
Cross Validation Accuracy : 81.0%     Test Accuracy : 78.4%

보팅 : Voting Classifier
Cross Validation Accuracy : 82.0%     Test Accuracy : 80.1%

한계점과 개선방안

어떤 모델을 포함해야 Voting 모델의 성능이 향상되는지 경험적인 방법으로 반복적인 실험을 통해 해결하였다. 이러한 방법은 효율적이지 못하므로, Voting 모델의 성능이 최대화되도록 모델을 골라주는 모듈이 있다면 더 좋은 성능이 기대된다.


성과 및 느낀점

857등 / 19909팀 (상위 4%)

타이타닉 데이터는 총 1309개로 구성되어있어 일반적인 머신러닝 문제들보다 데이터 양이 적었다. 이로 인해 복잡한 모델을 사용하거나 너무 많이 학습하면 Overfitting이 발생하는 문제가 나타났다. 따라서 예측 정확도를 향상시키기 위해 앙상블 방법을 활용하였고, 큰 성능 향상을 이루었다.

이번 경험을 통해 데이터의 특성에 대한 분석 없이, XGBoost처럼 성능이 좋다고 알려진 모델을 그대로 사용하면 위험하다는 사실을 확인할 수 있었다. 결국 데이터마다 적합한 모델이 다르기 때문에, 데이터에 대한 이해가 선행된 후에 적절한 모델을 선택하는 것이 중요한 것 같다.



Reference

https://teddylee777.github.io/machine-learning/ensemble%EA%B8%B0%EB%B2%95%EC%97%90-%EB%8C%80%ED%95%9C-%EC%9D%B4%ED%95%B4%EC%99%80-%EC%A2%85%EB%A5%98-1
https://dsbook.tistory.com/165?category=761052
https://rosypark.tistory.com/55
https://blog.naver.com/PostView.nhn?blogId=winddori2002&logNo=221829427442
https://injo.tistory.com/22
https://dev-youngjun.tistory.com/6
https://analysis-flood.tistory.com/103
https://lsjsj92.tistory.com/547

0개의 댓글