실습을 위한 데이콘 - 타이타닉 생존자

행동하는 개발자·2022년 8월 3일
0

시작

이번에 데이콘 문제(신용카드 사기 거래 탐지 AI 경진대회)를 보고 재밌을 것 같아서 3일 남았을 때, 끄적끄적해보자고 생각했다. 그리고 이 문제가 binary_crossentropy라는 것을 깨닫고 쉬운 문제에서 힌트를 좀 얻자고 생각해, 이 문제를 건드려보기로 했다.

문제의 칼럼

타이타닉 문제의 칼럼들은 다음과 같다. 난 그 칼럼들을 보고 Survival을 예측하기 전에 예측할 수 있는 지표인지 유추를 해보았다.

  • PassengerId : 탑승객의 고유 아이디 # 지워도 될 것 같다.
  • Survival : 생존여부(0: 사망, 1: 생존) # ,Y값
  • Pclass : 등실의 등급(1: 1등급, 2: 2등급, 3: 3등급) # 1등급일수록 안전할거 같다는 생각이 들었다. 중요할 것 같다.
  • Name : 이름 # 지워도 될 것 같다.
  • Sex : 성별 # 여자가 더 많이 생존할 것 같았다.
  • Age : 나이 # 나이가 많을수록 더 많이 생존할 것 같았다.
  • Sibsp : 함께 탑승한 형제자매, 아내 남편의 수 # 관계없을 것 같은데, 일단 넣기로 했다.
  • Parch: 함께 탑승한 부모, 자식의 수 # 관계없을 것 같은데, 일단 넣어볼려고 한다.
  • Ticket: 티켓번호 # 빼도 좋을 것 같았다.
  • Fare: 티켓의 요금 # 비쌀수록 안전할 것 같긴 한데, 정규화가 필요할 것 같다.
  • Cabin: 객실번호 # 애매하다 지울까 말까 고민된다.
  • Embarked: 배에 탑승한 위치(C = Cherbourg, Q = Queenstown, S = - ----- Southampton) # 객실번호는 3개로 나뉘어지는데, 위치에 따라 안전한 곳이 있을 것 같았다. 그런데 NULL값이 많다.

문제 해설

먼저 각 칼럼당 nulll 값이 있는지 없는지 확인했다. 솔직히 Cabin 값에 null값은 너무 많아서 빼주는게 좋을 것같았고, Embarked 값은 가장 corr이 높은 다른 칼럼에 따라 다른 값을 넣어주기로 했다. Age값도 동일하게 적용해보려고 한다.

우리가 확인하고자 하는 데이터를 train_data로 명명한 후에 corr을 확인했다. 예상한 바와 같이 id와 name(숫자가 아니라 당연히)은 연관성이 없었는데 parch도 더 연관성이 없었다. 하지만 sibsb가 생각보다 연관성이 있어서 쓰기로 다짐했다.

숫자로 되어있는 값이 아니라 corr가 나오지 않는 값도 있었기 때문에, train2_data에 train_data를 복사한 데이터를 만들어 일부 문자값을 숫자로 바꾸어주고 다시 corr을 확인했다.

Embarked값이 fare 와 가장 연관이 있었기 때문에, 어떤 숫자로 치환할지 고민하기 위해 문자당 평균 fare의 값을 확인했다.

만약을 위해서 isnull인 것들의 Fare를 봤다.

볼 것도 없이 C로 치환해주면 될 것 같았다.

age를 치환할려다가 age를 치환하기 전의 결과랑 치환하고 난 후의 결과를 비교하는 것도 재미있을 것 같았다.

우선 필요없는 값들을 빼주고 Fare 값은 혼자 값이 튀니 정규화가 필요했다.

솔직히 Fare 한 값만 값이 튀는 것 같긴 해서 모든 값도 동일하게 정규화가 필요한 것 같았지만, 정규화를 한 후의 결과값과 하기 전의 결과값도 비교하면 재밌을 것 같았다.

logistic의 결과를 확인했고, 결과값은 80%의 정확도를 보이는 것 같았다.

다른 모든 값들을 정규화 하고 결과를 확인해보았다.

아주 근소하게 올라갔다. 효과가 거의 없는 것 같았다.

80%의 정확도니까 찍어도 맞추는 50%보다 조금 더 높아진 것이라고 볼 수 있다. 그래서 나이도 이용해보려고 한다. 나이는 가장 corr이 높은 Pclass 기준으로 값을 정해서 쓰기로 결정했다.

똑같이 나이를 사용해보니 결과값이

2% 가량 올랐다.. 1% 올리기가 엄청 어렵다고 느끼고 있다..

혹시나 싶어서 모든 값을 정규화 시키고 다시 해보았지만 오히려 1% 내려갔다.

모든 머신러닝 방법에 대해서 실행해보았다. 역시나 다 고만고만하게 나왔다.

profile
끊임없이 뭔가를 남기는 사람

0개의 댓글