Notice
Recent Posts
Recent Comments
Link
«   2025/01   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
Archives
Today
Total
관리 메뉴

천선생의 삶

[Kaggle] 타이타닉 생존자 예측 - 시작하기 전에 해야할 일은? 본문

Kaggle/Titanic

[Kaggle] 타이타닉 생존자 예측 - 시작하기 전에 해야할 일은?

천선생 2019. 7. 17. 01:21

안녕하세요. 천선생입니다.

 

 이번 포스트에서는 분석을 시작하기 이전에 확인해야 할 것들에 대해서 짧게 설명하도록 하겠습니다.

분석 목적이 무엇인지, 무엇을 분석할 것인지, 어떻게 분석할 것인지에 대한 명확한 정의가 필요할 것 같습니다.

 

1. 분석 목적

 분석의 목적이 무엇인가에 대해서 고민할 필요가 있습니다.

분석을 하다보면 '뭘 하고 있었던 거지?' 하는 순간이 있는데 그럴때마다 확인할 수 있는 지표를 세우는 겁니다!

Kaggle은 친절하게도, 데이터를 통하여 주최측이 원하는 목적을 명시해줍니다.

'타이타닉 데이터의 승객 정보를 활용하여 생존여부를 예측해본다' 라는 목적을 설정했습니다.

 

2. 무엇을?

 이제 우리는 어떤 승객 정보를 활용할 것인지에 대한 고민을 시작할 필요가 있습니다.

이러한 고민을 해소하기 위하여, 데이터를 탐색할 필요가 있습니다.

이를 EDA(탐색적 자료분석)라고 부르며, 1부 포스트에서 다루도록 하겠습니다.

 

3. 어떻게?

 무엇을 분석할 것인지에 대한 고민과 동시에, 어떻게 분석을 진행할 것인지에 대한 고민이 필요합니다.

마주한 타이타닉 데이터는 생존여부의 예측이 목적이기 때문에 분류문제에 해당합니다.

또한 주어진 승객데이터를 통한 결과값은 사망과 생존으로 예측될 것이기에 그 중에서도 이진분류에 해당합니다.

이처럼 문제에 대한 적합한 모형을 찾는 것을 모형적합(Modeling)이라고 부르며, 2부 포스트에서 다루도록 하겠습니다.

 

- CODE 1

 코드가 빠지면 아쉽겠죠?

이번 포스트에서는 데이터의 생김새를 확인하는 코드를 작성해보도록 하겠습니다.

# 파일 읽어오기
train <- read.csv('train.csv')
test <- read.csv('test.csv')

# Train data 확인하기
str(train)
# 'data.frame':	891 obs. of  12 variables:
# $ PassengerId: int  1 2 3 4 5 6 7 8 9 10 ...
# $ Survived   : int  0 1 1 1 0 0 0 0 1 1 ...
# $ Pclass     : int  3 1 3 1 3 3 1 3 3 2 ...
# $ Name       : Factor w/ 891 levels "Abbing, Mr. Anthony",..: 109 191 358 277 16 559 520 629 417 581 ...
# $ Sex        : Factor w/ 2 levels "female","male": 2 1 1 1 2 2 2 2 1 1 ...
# $ Age        : num  22 38 26 35 35 NA 54 2 27 14 ...
# $ SibSp      : int  1 1 0 1 0 0 0 3 0 1 ...
# $ Parch      : int  0 0 0 0 0 0 0 1 2 0 ...
# $ Ticket     : Factor w/ 681 levels "110152","110413",..: 524 597 670 50 473 276 86 396 345 133 ...
# $ Fare       : num  7.25 71.28 7.92 53.1 8.05 ...
# $ Cabin      : Factor w/ 148 levels "","A10","A14",..: 1 83 1 57 1 1 131 1 1 1 ...
# $ Embarked   : Factor w/ 4 levels "","C","Q","S": 4 2 4 4 4 3 4 4 4 2 ...

# test data 확인하기
str(test)
# 'data.frame':	418 obs. of  11 variables:
# $ PassengerId: int  892 893 894 895 896 897 898 899 900 901 ...
# $ Pclass     : int  3 3 2 3 3 3 3 2 3 3 ...
# $ Name       : Factor w/ 418 levels "Abbott, Master. Eugene Joseph",..: 210 409 273 414 182 370 85 58 5 104 ...
# $ Sex        : Factor w/ 2 levels "female","male": 2 1 2 2 1 2 1 2 1 2 ...
# $ Age        : num  34.5 47 62 27 22 14 30 26 18 21 ...
# $ SibSp      : int  0 1 0 0 1 0 0 1 0 2 ...
# $ Parch      : int  0 0 0 0 1 0 0 1 0 0 ...
# $ Ticket     : Factor w/ 363 levels "110469","110489",..: 153 222 74 148 139 262 159 85 101 270 ...
# $ Fare       : num  7.83 7 9.69 8.66 12.29 ...
# $ Cabin      : Factor w/ 77 levels "","A11","A18",..: 1 1 1 1 1 1 1 1 1 1 ...
# $ Embarked   : Factor w/ 3 levels "C","Q","S": 2 3 2 3 3 3 2 3 1 3 ...

 train, test 라는 2가지 데이터를 불러왔습니다. 이 차이에 대해서는 곧 새로운 포스트에서 설명해드리도록 하겠습니다.

관측 수에서도 차이를 보이지만, train에서는 존재하는 Survived 변수 test에서는 보이지 않습니다.

즉, 우리의 목적은 train 에서 모형을 학습시키고 test 에서 생존여부(Survived)를 예측하는 것입니다!

 

- CODE 2

 EDA를 하기 이전에, 두 데이터를 통합하여 큰 데이터 프레임 data를 만들도록 하겠습니다.

이러한 통합을 통하여 EDA과정을 2번 진행하지 않아도 되는 장점을 갖습니다!

물론 traintest의 분포의 유사성을 확인한 뒤 진행하는 것이 안전하지만, 이 과정은 생략하도록 하겠습니다.

#train과 test를 구분할 수 있는 행번호입니다. 모형적합 이전에 분할하기 위하여 미리 저장하겠습니다.
split_num <- nrow(train)

#병합을 진행하기 위하여, test에는 존재하지 않는 Survived 변수를 생성합니다.
test$Survived <- NA

# 병합 전, Survived 변수를 정의합니다.
train$Survived <- factor(train$Survived, levels = c(0, 1), labels = c('No', 'Yes'))

data <- rbind(train, test)
str(data)
# 'data.frame':	1309 obs. of  12 variables:
# $ PassengerId: int  1 2 3 4 5 6 7 8 9 10 ...
# $ Survived   : Factor w/ 2 levels "No","Yes": 1 2 2 2 1 1 1 1 2 2 ...
# $ Pclass     : int  3 1 3 1 3 3 1 3 3 2 ...
# $ Name       : Factor w/ 1307 levels "Abbing, Mr. Anthony",..: 109 191 358 277 16 559 520 629 417 581 ...
# $ Sex        : Factor w/ 2 levels "female","male": 2 1 1 1 2 2 2 2 1 1 ...
# $ Age        : num  22 38 26 35 35 NA 54 2 27 14 ...
# $ SibSp      : int  1 1 0 1 0 0 0 3 0 1 ...
# $ Parch      : int  0 0 0 0 0 0 0 1 2 0 ...
# $ Ticket     : Factor w/ 929 levels "110152","110413",..: 524 597 670 50 473 276 86 396 345 133 ...
# $ Fare       : num  7.25 71.28 7.92 53.1 8.05 ...
# $ Cabin      : Factor w/ 187 levels "","A10","A14",..: 1 83 1 57 1 1 131 1 1 1 ...
# $ Embarked   : Factor w/ 4 levels "","C","Q","S": 4 2 4 4 4 3 4 4 4 2 ...

 이로써, EDA를 위한 준비가 모두 끝났습니다!

Comments