TIL

코변·2022년 5월 13일
0

개발일지

목록 보기
19/41
post-custom-banner

pre-processing

개요

  1. 주어진 총 데이터가 무엇인지

PassengerId, Survived, Pclass,

Name, Sex, Age, SibSp,

Parch, Ticket, Fare, Cabin, Embarked

  1. 카테고리컬 피쳐

Survived, Sex, and Embarked. Ordinal: Pclass.

  1. 누머릭 피쳐

Age, Fare. Discrete: SibSp, Parch.

  1. 섞여 있는 피쳐들

Ticket - 숫자와 알파벳이 섞임, cabin - 숫자와 알파벳이 섞임

  1. 비어 있거나 에러를 포함하고 있는 경우

Name 점, 괄호 “” 같은 특수기호를 포함하고 있거나 너무 짧은 이름이 존재함

그 밖의 피쳐들에 대해서

  1. null 값이 많은 피쳐

Cabin > Age > Embarked 순으로 널 밸류를 많이 포함하고 있음

  1. 피쳐들의 데이터 타입

7개의 int or float 데이터 5개의 문자열 데이터

숫자 feature 값에서 주목할만 한 점

  • 데이터는 실제 탑승객의 40% 정도 되는 인원이다. (891명)
  • 생존자는 0과 1로 이루어진 카테고리컬 데이터다.
  • 데이터상의 생존율 38%는 실제 생존율과 유사하다. (32%)
  • 대부분의 승객들은 부모님이나 아이들과 배에 타지 않았다. (75% 이상)
  • 30% 정도 되는 승객들이 형제,자매 혹은 배우자와 타고 있었다.
  • 티켓 값은 너무 차이가 심해 몇몇 승객들은 512$라는 큰 금액을 내고 탄 사람도 있다.
  • 나이가 많은 그러니까 65세에서 80세 사이의 승객은 1% 정도 아래이다.

카테고리컬 feature 값에서 주목할만 한 점

  • 이름은 고유한 값이다 (count = unique = 891)
  • 성별은 두가지 밖에 없는 카테고리 값인데 남성비율 65%로 차이가 꽤 크다
  • Cabin값은 중복 값이 많다. 혹은 몇몇 승객들이 객실을 공유했다고도 생각할 수 있다.
  • embarked 즉 탄 곳 데이터는 S port의 값이 가장 많다.
  • Ticket 또한 중복값이 많다. (unique = 681) ( 주석 : 210개가 중복 되네요)

생존율과 가장 연관성이 깊은 피처들

  • Age
  • Embarked

없애버린 피쳐들

  • Ticket - 중복된 값이 너무 많아서
  • Cabin - 너무 많은 null값
  • PassengerId - 생존 예측에 기여도가 낮다.
  • Name - 생존 예측에 직접적으로 기여하지 않는다고 판단

만든 피쳐들

  • Family - parch 와 sibsp 를 묶어 family로 통합
  • 이름에서 타이틀 값을 가져와서 새롭게 피처를 만듦
for datasetin combine:
    dataset['Title'] = dataset['Title'].replace(['Lady', 'Countess','Capt', 'Col',\
 	'Don', 'Dr', 'Major', 'Rev', 'Sir', 'Jonkheer', 'Dona'], 'Rare')

    dataset['Title'] = dataset['Title'].replace('Mlle', 'Miss')
    dataset['Title'] = dataset['Title'].replace('Ms', 'Miss')
    dataset['Title'] = dataset['Title'].replace('Mme', 'Mrs')

train_df[['Title', 'Survived']].groupby(['Title'], as_index=False).mean()

title_mapping = {"Mr": 1, "Miss": 2, "Mrs": 3, "Master": 4, "Rare": 5}
for dataset in combine:
    dataset['Title'] = dataset['Title'].map(title_mapping)
    dataset['Title'] = dataset['Title'].fillna(0)

train_df.head()

위의 데이터 전처리과정이 흥미로워서 가져와봤는데 이름에 있는 작은 데이터들을 찾아내서 이를 통해 결혼한 남성, 여성인지 혹은 지위가 있었던 사람(귀족, 캡틴, 닥터)인지 알 수가 있었다. 이는 직접적이든 간접적이든 생존 결과에 영향을 미치는 것으로 보인다. 실제로 이 팀에서 공개한 correlation 값을 보면 title이 두번째로 높다.

  • 나이를 범위화하여 카테고리컬 피처로 바꿈
  • 분석하기 편하게 가격도 범위화하였다.

출처: https://www.kaggle.com/code/startupsci/titanic-data-science-solutions

profile
내 것인 줄 알았으나 받은 모든 것이 선물이었다.
post-custom-banner

0개의 댓글