FINAL PROJESI

2110701568

SPACESHIP TITANIC KAGGLE COMPETITION

Kaggle, ünlü Titanic yarışmasına benzer şekilde Spaceship Titanic adında eğlenceli bir yarışma başlattı. Bu yarışma, veri bilimine yeni başlayanlar için makine öğrenimi hakkında bilgi edinmenin, Kaggle’ı keşfetmenin ve topluluğun diğer üyeleriyle tanışmanın bir yoludur. Bu makale Spaceship Titanic yarışmasını analiz etmekte ve RandomForestClassifier kullanarak test seti için anlamlı içgörülerin nasıl elde edileceğini ve “temel gerçeğin” yaklaşık %80 doğrulukla nasıl tahmin edileceğini açıklamaktadır.

library(readr)
train <- read_csv("train.csv")
library(readr)
test <- read_csv("test.csv")
library(rmarkdown)
paged_table(train)
paged_table(test)
  • train.csv - Eğitim verisi olarak kullanılmak üzere yaklaşık üçte ikisi (~8700) yolcunun kişisel kayıtları

-PassengerId - Her yolcu için benzersiz bir Kimlik. Her Kimlik, gggg_pp biçiminde olup, gggg, yolcuyla seyahat eden grubu ve pp, gruptaki sırasını belirtir. Bir gruptaki insanlar genellikle aile üyeleridir, ancak her zaman değil.

  • HomePlanet - Yolcunun ayrıldığı gezegen, genellikle kalıcı ikamet gezegenleri.

  • CryoSleep - Yolcunun yolculuğun süresince dondurularak animasyonu durdurmayı seçip seçmediğini belirtir. Cryosleep’teki yolcular kabinlerine kapatılmıştır.

Cabin - Yolcunun konakladığı kabin numarası. deck/num/side şeklinde alır, burada side, Port için P veya Starboard için S olabilir . -Destination - Yolcunun ineceği gezegen.

  • Age - Yolcunun yaşı.

  • VIP - Yolcunun yolculuk sırasında özel VIP hizmeti için ödeme yapmış olup olmadığını belirtir.

  • RoomService, FoodCourt, ShoppingMall, Spa, VRDeck - Spaceship Titanic’in birçok lüks olanaklarında yolcunun fatura ettiği miktar.

  • Name- Yolcunun adı ve soyadı.

  • Transported - Yolcunun başka bir boyuta taşınıp taşınmadığını belirtir. Bu, tahmin etmeye çalıştığınız sütun olan hedeftir.

  • test.csv - Test verisi olarak kullanılmak üzere geriye kalan üçte birlik (~4300) yolcunun kişisel kayıtları. Göreviniz, bu setteki yolcular için Transported değerini tahmin etmektir.

  • sample_submission.csv - Doğru formatta bir gönderim dosyası.

  • PassengerId - Test setindeki her yolcu için Kimlik.

  • Transported- Hedef. Her yolcu için, True veya False tahmin edin.

library(tidyverse)
library(explore)
train %>% describe_all()
## # A tibble: 14 × 8
##    variable     type     na na_pct unique   min   mean   max
##    <chr>        <chr> <int>  <dbl>  <int> <dbl>  <dbl> <dbl>
##  1 PassengerId  chr       0    0     8693    NA  NA       NA
##  2 HomePlanet   chr     201    2.3      4    NA  NA       NA
##  3 CryoSleep    lgl     217    2.5      3     0   0.36     1
##  4 Cabin        chr     199    2.3   6561    NA  NA       NA
##  5 Destination  chr     182    2.1      4    NA  NA       NA
##  6 Age          dbl     179    2.1     81     0  28.8     79
##  7 VIP          lgl     203    2.3      3     0   0.02     1
##  8 RoomService  dbl     181    2.1   1274     0 225.   14327
##  9 FoodCourt    dbl     183    2.1   1508     0 458.   29813
## 10 ShoppingMall dbl     208    2.4   1116     0 174.   23492
## 11 Spa          dbl     183    2.1   1328     0 311.   22408
## 12 VRDeck       dbl     188    2.2   1307     0 305.   24133
## 13 Name         chr     200    2.3   8474    NA  NA       NA
## 14 Transported  lgl       0    0        2     0   0.5      1
test %>% describe_all()
## # A tibble: 13 × 8
##    variable     type     na na_pct unique   min   mean   max
##    <chr>        <chr> <int>  <dbl>  <int> <dbl>  <dbl> <dbl>
##  1 PassengerId  chr       0    0     4277    NA  NA       NA
##  2 HomePlanet   chr      87    2        4    NA  NA       NA
##  3 CryoSleep    lgl      93    2.2      3     0   0.37     1
##  4 Cabin        chr     100    2.3   3266    NA  NA       NA
##  5 Destination  chr      92    2.2      4    NA  NA       NA
##  6 Age          dbl      91    2.1     80     0  28.7     79
##  7 VIP          lgl      93    2.2      3     0   0.02     1
##  8 RoomService  dbl      82    1.9    843     0 219.   11567
##  9 FoodCourt    dbl     106    2.5    903     0 439.   25273
## 10 ShoppingMall dbl      98    2.3    716     0 177.    8292
## 11 Spa          dbl     101    2.4    834     0 303.   19844
## 12 VRDeck       dbl      80    1.9    797     0 311.   22272
## 13 Name         chr      94    2.2   4177    NA  NA       NA
train[c('Ailenum' , 'Ailesira')] <- str_split_fixed(train$PassengerId, '_' , 2)
test[c('Ailenum' , 'Ailesira')] <- str_split_fixed(test$PassengerId, '_' , 2)
head(train[, c("PassengerId" , 'Ailenum' , 'Ailesira')])
## # A tibble: 6 × 3
##   PassengerId Ailenum Ailesira
##   <chr>       <chr>   <chr>   
## 1 0001_01     0001    01      
## 2 0002_01     0002    01      
## 3 0003_01     0003    01      
## 4 0003_02     0003    02      
## 5 0004_01     0004    01      
## 6 0005_01     0005    01
train$Aile <- ifelse(duplicated(train$Ailenum) | duplicated(train$Ailenum, fromlast = TRUE),1,0)
test$Aile <- ifelse(duplicated(test$Ailenum) | duplicated(test$Ailenum, fromlast = TRUE),1,0)
head(train[, c("PassengerId" ,"Ailenum", "Ailesira","Aile")])
## # A tibble: 6 × 4
##   PassengerId Ailenum Ailesira  Aile
##   <chr>       <chr>   <chr>    <dbl>
## 1 0001_01     0001    01           0
## 2 0002_01     0002    01           0
## 3 0003_01     0003    01           0
## 4 0003_02     0003    02           1
## 5 0004_01     0004    01           0
## 6 0005_01     0005    01           0
train[c('deck', 'num', 'side')] <- str_split_fixed(train$Cabin, '/', 3)
test[c('deck', 'num', 'side')] <- str_split_fixed(test$Cabin, '/', 3)
train <-train%>% mutate_if(is.character,as.factor)
test <-test%>% mutate_if(is.character,as.factor)
summary(train)
##   PassengerId    HomePlanet   CryoSleep           Cabin     
##  0001_01:   1   Earth :4602   Mode :logical   G/734/S:   8  
##  0002_01:   1   Europa:2131   FALSE:5439      B/11/S :   7  
##  0003_01:   1   Mars  :1759   TRUE :3037      B/201/P:   7  
##  0003_02:   1   NA's  : 201   NA's :217       B/82/S :   7  
##  0004_01:   1                                 C/137/S:   7  
##  0005_01:   1                                 (Other):8458  
##  (Other):8687                                 NA's   : 199  
##         Destination        Age           VIP           RoomService     
##  55 Cancri e  :1800   Min.   : 0.00   Mode :logical   Min.   :    0.0  
##  PSO J318.5-22: 796   1st Qu.:19.00   FALSE:8291      1st Qu.:    0.0  
##  TRAPPIST-1e  :5915   Median :27.00   TRUE :199       Median :    0.0  
##  NA's         : 182   Mean   :28.83   NA's :203       Mean   :  224.7  
##                       3rd Qu.:38.00                   3rd Qu.:   47.0  
##                       Max.   :79.00                   Max.   :14327.0  
##                       NA's   :179                     NA's   :181      
##    FoodCourt        ShoppingMall          Spa              VRDeck       
##  Min.   :    0.0   Min.   :    0.0   Min.   :    0.0   Min.   :    0.0  
##  1st Qu.:    0.0   1st Qu.:    0.0   1st Qu.:    0.0   1st Qu.:    0.0  
##  Median :    0.0   Median :    0.0   Median :    0.0   Median :    0.0  
##  Mean   :  458.1   Mean   :  173.7   Mean   :  311.1   Mean   :  304.9  
##  3rd Qu.:   76.0   3rd Qu.:   27.0   3rd Qu.:   59.0   3rd Qu.:   46.0  
##  Max.   :29813.0   Max.   :23492.0   Max.   :22408.0   Max.   :24133.0  
##  NA's   :183       NA's   :208       NA's   :183       NA's   :188      
##                  Name      Transported        Ailenum        Ailesira   
##  Alraium Disivering:   2   Mode :logical   0984   :   8   01     :6217  
##  Ankalik Nateansive:   2   FALSE:4315      4005   :   8   02     :1412  
##  Anton Woody       :   2   TRUE :4378      4256   :   8   03     : 571  
##  Apix Wala         :   2                   4498   :   8   04     : 231  
##  Asch Stradick     :   2                   5133   :   8   05     : 128  
##  (Other)           :8483                   5756   :   8   06     :  75  
##  NA's              : 200                   (Other):8645   (Other):  59  
##       Aile             deck           num       side    
##  Min.   :0.0000   F      :2794          : 199    : 199  
##  1st Qu.:0.0000   G      :2559   82     :  28   P:4206  
##  Median :0.0000   E      : 876   19     :  22   S:4288  
##  Mean   :0.2848   B      : 779   86     :  22           
##  3rd Qu.:1.0000   C      : 747   176    :  21           
##  Max.   :1.0000   (Other): 739   56     :  21           
##                   NA's   : 199   (Other):8380
summary(test)
##   PassengerId    HomePlanet   CryoSleep           Cabin     
##  0013_01:   1   Earth :2263   Mode :logical   G/160/P:   8  
##  0018_01:   1   Europa:1002   FALSE:2640      B/31/P :   7  
##  0019_01:   1   Mars  : 925   TRUE :1544      D/273/S:   7  
##  0021_01:   1   NA's  :  87   NA's :93        E/228/S:   7  
##  0023_01:   1                                 G/748/S:   7  
##  0027_01:   1                                 (Other):4141  
##  (Other):4271                                 NA's   : 100  
##         Destination        Age           VIP           RoomService     
##  55 Cancri e  : 841   Min.   : 0.00   Mode :logical   Min.   :    0.0  
##  PSO J318.5-22: 388   1st Qu.:19.00   FALSE:4110      1st Qu.:    0.0  
##  TRAPPIST-1e  :2956   Median :26.00   TRUE :74        Median :    0.0  
##  NA's         :  92   Mean   :28.66   NA's :93        Mean   :  219.3  
##                       3rd Qu.:37.00                   3rd Qu.:   53.0  
##                       Max.   :79.00                   Max.   :11567.0  
##                       NA's   :91                      NA's   :82       
##    FoodCourt        ShoppingMall         Spa              VRDeck       
##  Min.   :    0.0   Min.   :   0.0   Min.   :    0.0   Min.   :    0.0  
##  1st Qu.:    0.0   1st Qu.:   0.0   1st Qu.:    0.0   1st Qu.:    0.0  
##  Median :    0.0   Median :   0.0   Median :    0.0   Median :    0.0  
##  Mean   :  439.5   Mean   : 177.3   Mean   :  303.1   Mean   :  310.7  
##  3rd Qu.:   78.0   3rd Qu.:  33.0   3rd Qu.:   50.0   3rd Qu.:   36.0  
##  Max.   :25273.0   Max.   :8292.0   Max.   :19844.0   Max.   :22272.0  
##  NA's   :106       NA's   :98       NA's   :101       NA's   :80       
##                Name         Ailenum        Ailesira         Aile       
##  Berta Barnolderg:   2   0339   :   8   01     :3063   Min.   :0.0000  
##  Chrey Colte     :   2   1072   :   8   02     : 723   1st Qu.:0.0000  
##  Cints Erle      :   2   6332   :   8   03     : 269   Median :0.0000  
##  Cocors Cola     :   2   6499   :   8   04     : 107   Mean   :0.2838  
##  Con Pashe       :   2   6986   :   8   05     :  56   3rd Qu.:1.0000  
##  (Other)         :4173   8543   :   8   06     :  33   Max.   :1.0000  
##  NA's            :  94   (Other):4229   (Other):  26                   
##       deck           num       side    
##  F      :1445          : 100    : 100  
##  G      :1222   4      :  21   P:2084  
##  E      : 447   31     :  18   S:2093  
##  B      : 362   197    :  16           
##  C      : 355   294    :  16           
##  (Other): 346   228    :  14           
##  NA's   : 100   (Other):4092
train[train == ' '] <- NA
test [test == ' '] <- NA
train$num <- droplevels(train$num)
test$num <- droplevels(test$num)
train$side <- droplevels(train$side)
test$side <- droplevels(test$side)
library(zoo)
library(dplyr)
library(tidyr)
train <- train %>% group_by(HomePlanet,Destination) %>%
  mutate(Age = replace_na(Age,mean(Age, na.rm = TRUE)))
test <- test %>% group_by(HomePlanet,Destination) %>%
  mutate(Age = replace_na(Age,mean(Age, na.rm = TRUE)))
most_frequent_hp <- train %>%
  filter(!is.na(HomePlanet)) %>%
  group_by(Destination, HomePlanet) %>%
  summarize(count = n()) %>%
  arrange(Destination, desc(count)) %>%
  slice(1) %>%
  ungroup()
most_frequent_hp <- test %>%
  filter(!is.na(HomePlanet)) %>%
  group_by(Destination, HomePlanet) %>%
  summarize(count = n()) %>%
  arrange(Destination, desc(count)) %>%
  slice(1) %>%
  ungroup()
most_frequent_hp
## # A tibble: 4 × 3
##   Destination   HomePlanet count
##   <fct>         <fct>      <int>
## 1 55 Cancri e   Europa       424
## 2 PSO J318.5-22 Earth        353
## 3 TRAPPIST-1e   Earth       1571
## 4 <NA>          Earth         45
train$HomePlanet <- as.character(train$HomePlanet)
train$Destination<- as.character(train$Destination)
test$HomePlanet <- as.character(test$HomePlanet)
test$Destination<- as.character(test$Destination)
train <- train %>%
  mutate(HomePlanet = ifelse(is.na(HomePlanet) & Destination == "55 cancri e", "Europa",                                     ifelse(is.na(HomePlanet), "Earth", HomePlanet)))
test <- test %>%
  mutate(HomePlanet = ifelse(is.na(HomePlanet) & Destination == "55 cancri e", "Europa",                                     ifelse(is.na(HomePlanet), "Earth", HomePlanet)))
train %>% describe_all()
## # A tibble: 20 × 8
##    variable     type     na na_pct unique   min   mean   max
##    <chr>        <chr> <int>  <dbl>  <int> <dbl>  <dbl> <dbl>
##  1 PassengerId  fct       0    0     8693    NA  NA       NA
##  2 HomePlanet   chr       4    0        4    NA  NA       NA
##  3 CryoSleep    lgl     217    2.5      3     0   0.36     1
##  4 Cabin        fct     199    2.3   6561    NA  NA       NA
##  5 Destination  chr     182    2.1      4    NA  NA       NA
##  6 Age          dbl       0    0       91     0  28.8     79
##  7 VIP          lgl     203    2.3      3     0   0.02     1
##  8 RoomService  dbl     181    2.1   1274     0 225.   14327
##  9 FoodCourt    dbl     183    2.1   1508     0 458.   29813
## 10 ShoppingMall dbl     208    2.4   1116     0 174.   23492
## 11 Spa          dbl     183    2.1   1328     0 311.   22408
## 12 VRDeck       dbl     188    2.2   1307     0 305.   24133
## 13 Name         fct     200    2.3   8474    NA  NA       NA
## 14 Transported  lgl       0    0        2     0   0.5      1
## 15 Ailenum      fct       0    0     6217    NA  NA       NA
## 16 Ailesira     fct       0    0        8    NA  NA       NA
## 17 Aile         dbl       0    0        2     0   0.28     1
## 18 deck         fct     199    2.3      9    NA  NA       NA
## 19 num          fct       0    0     1818    NA  NA       NA
## 20 side         fct       0    0        3    NA  NA       NA
test %>% describe_all()
## # A tibble: 19 × 8
##    variable     type     na na_pct unique   min   mean   max
##    <chr>        <chr> <int>  <dbl>  <int> <dbl>  <dbl> <dbl>
##  1 PassengerId  fct       0    0     4277    NA  NA       NA
##  2 HomePlanet   chr       2    0        4    NA  NA       NA
##  3 CryoSleep    lgl      93    2.2      3     0   0.37     1
##  4 Cabin        fct     100    2.3   3266    NA  NA       NA
##  5 Destination  chr      92    2.2      4    NA  NA       NA
##  6 Age          dbl       0    0       91     0  28.7     79
##  7 VIP          lgl      93    2.2      3     0   0.02     1
##  8 RoomService  dbl      82    1.9    843     0 219.   11567
##  9 FoodCourt    dbl     106    2.5    903     0 439.   25273
## 10 ShoppingMall dbl      98    2.3    716     0 177.    8292
## 11 Spa          dbl     101    2.4    834     0 303.   19844
## 12 VRDeck       dbl      80    1.9    797     0 311.   22272
## 13 Name         fct      94    2.2   4177    NA  NA       NA
## 14 Ailenum      fct       0    0     3063    NA  NA       NA
## 15 Ailesira     fct       0    0        8    NA  NA       NA
## 16 Aile         dbl       0    0        2     0   0.28     1
## 17 deck         fct     100    2.3      9    NA  NA       NA
## 18 num          fct       0    0     1506    NA  NA       NA
## 19 side         fct       0    0        3    NA  NA       NA
train <- transform (train, HomePlanet  = replace (HomePlanet, is.na (HomePlanet), "Earth"))
test <- transform (test, HomePlanet  = replace (HomePlanet, is.na (HomePlanet), "Earth"))
most_frequent_destinations <- train %>%
  filter(!is.na(Destination)) %>%
  group_by(HomePlanet, Destination) %>%
  summarize(count = n()) %>%
  arrange(Destination, desc(count)) %>%
  slice(1) %>%
  ungroup()
most_frequent_destinations
## # A tibble: 3 × 3
##   HomePlanet Destination count
##   <chr>      <chr>       <int>
## 1 Earth      55 Cancri e   721
## 2 Europa     55 Cancri e   886
## 3 Mars       55 Cancri e   193
train<- transform (train, Destination = replace(Destination, is.na(Destination), "TRAPPIST-1e"))
test<- transform (test, Destination = replace(Destination, is.na(Destination), "TRAPPIST-1e"))
train$HomePlanet <- as.factor (train$HomePlanet)
train $destination <- as.factor(train$Destination)
test$HomePlanet <- as.factor (test$HomePlanet)
test$destination <- as.factor(test$Destination)
train <- train %>%
    mutate(RoomService = coalesce (RoomService, 0),
           FoodCourt = coalesce(FoodCourt, 0),
           ShoppingMall = coalesce(ShoppingMall, 0),
           Spa = coalesce(Spa, 0),
           VRDeck = coalesce (VRDeck, 0))
test <- test %>%
    mutate(RoomService = coalesce (RoomService, 0),
           FoodCourt = coalesce(FoodCourt, 0),
           ShoppingMall = coalesce(ShoppingMall, 0),
           Spa = coalesce(Spa, 0),
           VRDeck = coalesce (VRDeck, 0))
train <- train %>%
  group_by(HomePlanet, Destination) %>%
  mutate_at(vars(Age), ~replace_na(., mean (., na.rm =TRUE)))
test <- test %>%
  group_by(HomePlanet, Destination) %>%
  mutate_at(vars(Age), ~replace_na(., mean (., na.rm =TRUE)))
train$expense <- train$RoomService + train$FoodCourt + train$ShoppingMall + train$Spa + train$VRDeck
test$expense <- test$RoomService + test$FoodCourt + test$ShoppingMall + test$Spa + test$VRDeck
train <- transform(train, CryoSleep = replace(CryoSleep,is.na(CryoSleep) & expense>0 & Age>12, "FALSE"))
test <- transform(test, CryoSleep = replace(CryoSleep,is.na(CryoSleep) & expense>0 & Age>12, "FALSE"))
summary(train)
##   PassengerId    HomePlanet    CryoSleep             Cabin     
##  0001_01:   1   Earth :4803   Length:8693        G/734/S:   8  
##  0002_01:   1   Europa:2131   Class :character   B/11/S :   7  
##  0003_01:   1   Mars  :1759   Mode  :character   B/201/P:   7  
##  0003_02:   1                                    B/82/S :   7  
##  0004_01:   1                                    C/137/S:   7  
##  0005_01:   1                                    (Other):8458  
##  (Other):8687                                    NA's   : 199  
##  Destination             Age           VIP           RoomService   
##  Length:8693        Min.   : 0.00   Mode :logical   Min.   :    0  
##  Class :character   1st Qu.:20.00   FALSE:8291      1st Qu.:    0  
##  Mode  :character   Median :27.00   TRUE :199       Median :    0  
##                     Mean   :28.83   NA's :203       Mean   :  220  
##                     3rd Qu.:37.00                   3rd Qu.:   41  
##                     Max.   :79.00                   Max.   :14327  
##                                                                    
##    FoodCourt        ShoppingMall          Spa              VRDeck       
##  Min.   :    0.0   Min.   :    0.0   Min.   :    0.0   Min.   :    0.0  
##  1st Qu.:    0.0   1st Qu.:    0.0   1st Qu.:    0.0   1st Qu.:    0.0  
##  Median :    0.0   Median :    0.0   Median :    0.0   Median :    0.0  
##  Mean   :  448.4   Mean   :  169.6   Mean   :  304.6   Mean   :  298.3  
##  3rd Qu.:   61.0   3rd Qu.:   22.0   3rd Qu.:   53.0   3rd Qu.:   40.0  
##  Max.   :29813.0   Max.   :23492.0   Max.   :22408.0   Max.   :24133.0  
##                                                                         
##                  Name      Transported        Ailenum        Ailesira   
##  Alraium Disivering:   2   Mode :logical   0984   :   8   01     :6217  
##  Ankalik Nateansive:   2   FALSE:4315      4005   :   8   02     :1412  
##  Anton Woody       :   2   TRUE :4378      4256   :   8   03     : 571  
##  Apix Wala         :   2                   4498   :   8   04     : 231  
##  Asch Stradick     :   2                   5133   :   8   05     : 128  
##  (Other)           :8483                   5756   :   8   06     :  75  
##  NA's              : 200                   (Other):8645   (Other):  59  
##       Aile             deck           num       side            destination  
##  Min.   :0.0000   F      :2794          : 199    : 199   55 Cancri e  :1800  
##  1st Qu.:0.0000   G      :2559   82     :  28   P:4206   PSO J318.5-22: 796  
##  Median :0.0000   E      : 876   19     :  22   S:4288   TRAPPIST-1e  :6097  
##  Mean   :0.2848   B      : 779   86     :  22                                
##  3rd Qu.:1.0000   C      : 747   176    :  21                                
##  Max.   :1.0000   (Other): 739   56     :  21                                
##                   NA's   : 199   (Other):8380                                
##     expense     
##  Min.   :    0  
##  1st Qu.:    0  
##  Median :  716  
##  Mean   : 1441  
##  3rd Qu.: 1441  
##  Max.   :35987  
## 
summary(test)
##   PassengerId    HomePlanet    CryoSleep             Cabin     
##  0013_01:   1   Earth :2350   Length:4277        G/160/P:   8  
##  0018_01:   1   Europa:1002   Class :character   B/31/P :   7  
##  0019_01:   1   Mars  : 925   Mode  :character   D/273/S:   7  
##  0021_01:   1                                    E/228/S:   7  
##  0023_01:   1                                    G/748/S:   7  
##  0027_01:   1                                    (Other):4141  
##  (Other):4271                                    NA's   : 100  
##  Destination             Age           VIP           RoomService     
##  Length:4277        Min.   : 0.00   Mode :logical   Min.   :    0.0  
##  Class :character   1st Qu.:20.00   FALSE:4110      1st Qu.:    0.0  
##  Mode  :character   Median :26.22   TRUE :74        Median :    0.0  
##                     Mean   :28.66   NA's :93        Mean   :  215.1  
##                     3rd Qu.:37.00                   3rd Qu.:   48.0  
##                     Max.   :79.00                   Max.   :11567.0  
##                                                                      
##    FoodCourt        ShoppingMall         Spa              VRDeck       
##  Min.   :    0.0   Min.   :   0.0   Min.   :    0.0   Min.   :    0.0  
##  1st Qu.:    0.0   1st Qu.:   0.0   1st Qu.:    0.0   1st Qu.:    0.0  
##  Median :    0.0   Median :   0.0   Median :    0.0   Median :    0.0  
##  Mean   :  428.6   Mean   : 173.2   Mean   :  295.9   Mean   :  304.9  
##  3rd Qu.:   66.0   3rd Qu.:  27.0   3rd Qu.:   43.0   3rd Qu.:   31.0  
##  Max.   :25273.0   Max.   :8292.0   Max.   :19844.0   Max.   :22272.0  
##                                                                        
##                Name         Ailenum        Ailesira         Aile       
##  Berta Barnolderg:   2   0339   :   8   01     :3063   Min.   :0.0000  
##  Chrey Colte     :   2   1072   :   8   02     : 723   1st Qu.:0.0000  
##  Cints Erle      :   2   6332   :   8   03     : 269   Median :0.0000  
##  Cocors Cola     :   2   6499   :   8   04     : 107   Mean   :0.2838  
##  Con Pashe       :   2   6986   :   8   05     :  56   3rd Qu.:1.0000  
##  (Other)         :4173   8543   :   8   06     :  33   Max.   :1.0000  
##  NA's            :  94   (Other):4229   (Other):  26                   
##       deck           num       side            destination      expense     
##  F      :1445          : 100    : 100   55 Cancri e  : 841   Min.   :    0  
##  G      :1222   4      :  21   P:2084   PSO J318.5-22: 388   1st Qu.:    0  
##  E      : 447   31     :  18   S:2093   TRAPPIST-1e  :3048   Median :  714  
##  B      : 362   197    :  16                                 Mean   : 1418  
##  C      : 355   294    :  16                                 3rd Qu.: 1444  
##  (Other): 346   228    :  14                                 Max.   :33666  
##  NA's   : 100   (Other):4092
train <- transform(train, CryoSleep = replace(CryoSleep, is.na(CryoSleep) & expense==0 & Age>12, "TRUE"))
test <- transform(test, CryoSleep = replace(CryoSleep, is.na(CryoSleep) & expense==0 & Age>12, "TRUE"))
train$CryoSleep <- as.factor(train$CryoSleep)
test$CryoSleep <- as.factor(test$CryoSleep)
summary(train)
##   PassengerId    HomePlanet   CryoSleep        Cabin      Destination       
##  0001_01:   1   Earth :4803   FALSE:5558   G/734/S:   8   Length:8693       
##  0002_01:   1   Europa:2131   TRUE :3112   B/11/S :   7   Class :character  
##  0003_01:   1   Mars  :1759   NA's :  23   B/201/P:   7   Mode  :character  
##  0003_02:   1                              B/82/S :   7                     
##  0004_01:   1                              C/137/S:   7                     
##  0005_01:   1                              (Other):8458                     
##  (Other):8687                              NA's   : 199                     
##       Age           VIP           RoomService      FoodCourt      
##  Min.   : 0.00   Mode :logical   Min.   :    0   Min.   :    0.0  
##  1st Qu.:20.00   FALSE:8291      1st Qu.:    0   1st Qu.:    0.0  
##  Median :27.00   TRUE :199       Median :    0   Median :    0.0  
##  Mean   :28.83   NA's :203       Mean   :  220   Mean   :  448.4  
##  3rd Qu.:37.00                   3rd Qu.:   41   3rd Qu.:   61.0  
##  Max.   :79.00                   Max.   :14327   Max.   :29813.0  
##                                                                   
##   ShoppingMall          Spa              VRDeck       
##  Min.   :    0.0   Min.   :    0.0   Min.   :    0.0  
##  1st Qu.:    0.0   1st Qu.:    0.0   1st Qu.:    0.0  
##  Median :    0.0   Median :    0.0   Median :    0.0  
##  Mean   :  169.6   Mean   :  304.6   Mean   :  298.3  
##  3rd Qu.:   22.0   3rd Qu.:   53.0   3rd Qu.:   40.0  
##  Max.   :23492.0   Max.   :22408.0   Max.   :24133.0  
##                                                       
##                  Name      Transported        Ailenum        Ailesira   
##  Alraium Disivering:   2   Mode :logical   0984   :   8   01     :6217  
##  Ankalik Nateansive:   2   FALSE:4315      4005   :   8   02     :1412  
##  Anton Woody       :   2   TRUE :4378      4256   :   8   03     : 571  
##  Apix Wala         :   2                   4498   :   8   04     : 231  
##  Asch Stradick     :   2                   5133   :   8   05     : 128  
##  (Other)           :8483                   5756   :   8   06     :  75  
##  NA's              : 200                   (Other):8645   (Other):  59  
##       Aile             deck           num       side            destination  
##  Min.   :0.0000   F      :2794          : 199    : 199   55 Cancri e  :1800  
##  1st Qu.:0.0000   G      :2559   82     :  28   P:4206   PSO J318.5-22: 796  
##  Median :0.0000   E      : 876   19     :  22   S:4288   TRAPPIST-1e  :6097  
##  Mean   :0.2848   B      : 779   86     :  22                                
##  3rd Qu.:1.0000   C      : 747   176    :  21                                
##  Max.   :1.0000   (Other): 739   56     :  21                                
##                   NA's   : 199   (Other):8380                                
##     expense     
##  Min.   :    0  
##  1st Qu.:    0  
##  Median :  716  
##  Mean   : 1441  
##  3rd Qu.: 1441  
##  Max.   :35987  
## 
train <- transform(train, VIP = replace(VIP , is.na (VIP), FALSE))
test <- transform(test, VIP = replace(VIP , is.na (VIP), FALSE))
 train$deck <-addNA(train$deck) 
 test$deck <-addNA(test$deck) 
 train$CryoSleep <-addNA(train$CryoSleep) 
 test$CryoSleep <-addNA(test$CryoSleep) 
most_frequent_deck <- train %>%
  filter(!is.na(deck)) %>%
  group_by(HomePlanet,  deck) %>%
  summarize (count = n()) %>%
  arrange(HomePlanet, desc(count)) %>%
  slice (1) %>%
  ungroup ()
most_frequent_deck <- test %>%
  filter(!is.na(deck)) %>%
  group_by(HomePlanet,  deck) %>%
  summarize (count = n()) %>%
  arrange(HomePlanet, desc(count)) %>%
  slice (1) %>%
  ungroup ()
most_frequent_deck
## # A tibble: 3 × 3
##   HomePlanet deck  count
##   <fct>      <fct> <int>
## 1 Earth      G      1222
## 2 Europa     B       358
## 3 Mars       F       603
train$HomePlanet  <- as.character(train$HomePlanet)
train$deck <- as.character(train$deck)
test$HomePlanet  <- as.character(test$HomePlanet)
test$deck <- as.character(test$deck)
train <- train %>%
  mutate(deck = ifelse(is.na(deck) & HomePlanet == "Earth", "G",
                       ifelse(is.na(deck) & HomePlanet == "Europa", "B" ,
                              ifelse(is.na(deck) & HomePlanet == "Mars", "F", deck))))
test <- test %>%
  mutate(deck = ifelse(is.na(deck) & HomePlanet == "Earth", "G",
                       ifelse(is.na(deck) & HomePlanet == "Europa", "B" ,
                              ifelse(is.na(deck) & HomePlanet == "Mars", "F", deck))))
most_frequent_side <- train %>%
  filter(!is.na(deck)) %>%
  group_by(HomePlanet,  side) %>%
  summarize (count = n()) %>%
  arrange(HomePlanet, desc(count)) %>%
  slice (1) %>%
  ungroup ()
most_frequent_side
## # A tibble: 3 × 3
##   HomePlanet side  count
##   <chr>      <fct> <int>
## 1 Earth      P      2363
## 2 Europa     S      1115
## 3 Mars       P       888
train$side <- as.character(train$side)
test$side <- as.character(test$side)
train <- train %>%
  mutate(side = ifelse(is.na(side) & HomePlanet == "Earth", "P",
                       ifelse(is.na(side) & HomePlanet == "Europa", "S" ,
                              ifelse(is.na(side) & HomePlanet == "Mars", "P", side))))
test <- test %>%
  mutate(side = ifelse(is.na(side) & HomePlanet == "Earth", "P",
                       ifelse(is.na(side) & HomePlanet == "Europa", "S" ,
                              ifelse(is.na(side) & HomePlanet == "Mars", "P", side))))
train %>% describe_all()
## # A tibble: 22 × 8
##    variable     type     na na_pct unique   min   mean   max
##    <chr>        <chr> <int>  <dbl>  <int> <dbl>  <dbl> <dbl>
##  1 PassengerId  fct       0    0     8693    NA  NA       NA
##  2 HomePlanet   chr       0    0        3    NA  NA       NA
##  3 CryoSleep    fct       0    0        3    NA  NA       NA
##  4 Cabin        fct     199    2.3   6561    NA  NA       NA
##  5 Destination  chr       0    0        3    NA  NA       NA
##  6 Age          dbl       0    0       91     0  28.8     79
##  7 VIP          lgl       0    0        2     0   0.02     1
##  8 RoomService  dbl       0    0     1273     0 220.   14327
##  9 FoodCourt    dbl       0    0     1507     0 448.   29813
## 10 ShoppingMall dbl       0    0     1115     0 170.   23492
## # ℹ 12 more rows
test%>% describe_all()
## # A tibble: 21 × 8
##    variable     type     na na_pct unique   min   mean   max
##    <chr>        <chr> <int>  <dbl>  <int> <dbl>  <dbl> <dbl>
##  1 PassengerId  fct       0    0     4277    NA  NA       NA
##  2 HomePlanet   chr       0    0        3    NA  NA       NA
##  3 CryoSleep    fct       0    0        3    NA  NA       NA
##  4 Cabin        fct     100    2.3   3266    NA  NA       NA
##  5 Destination  chr       0    0        3    NA  NA       NA
##  6 Age          dbl       0    0       91     0  28.7     79
##  7 VIP          lgl       0    0        2     0   0.02     1
##  8 RoomService  dbl       0    0      842     0 215.   11567
##  9 FoodCourt    dbl       0    0      902     0 429.   25273
## 10 ShoppingMall dbl       0    0      715     0 173.    8292
## # ℹ 11 more rows
train <- train %>% select(-c("Cabin", "Name","Ailenum", "Ailesira","num"))
test <- test %>% select(-c("Cabin", "Name","Ailenum", "Ailesira","num"))
train <- train %>% mutate_if(is.character,as.factor)
train <- train %>% mutate_if(is.character,as.factor)
test <- test %>% mutate_if(is.character,as.factor)
train$PassengerId <- as.character(train$PassengerId)
test$PassengerId <- as.character(test$PassengerId)
summary(train)
##  PassengerId         HomePlanet   CryoSleep           Destination  
##  Length:8693        Earth :4803   FALSE:5558   55 Cancri e  :1800  
##  Class :character   Europa:2131   TRUE :3112   PSO J318.5-22: 796  
##  Mode  :character   Mars  :1759   NA   :  23   TRAPPIST-1e  :6097  
##                                                                    
##                                                                    
##                                                                    
##                                                                    
##       Age           VIP           RoomService      FoodCourt      
##  Min.   : 0.00   Mode :logical   Min.   :    0   Min.   :    0.0  
##  1st Qu.:20.00   FALSE:8494      1st Qu.:    0   1st Qu.:    0.0  
##  Median :27.00   TRUE :199       Median :    0   Median :    0.0  
##  Mean   :28.83                   Mean   :  220   Mean   :  448.4  
##  3rd Qu.:37.00                   3rd Qu.:   41   3rd Qu.:   61.0  
##  Max.   :79.00                   Max.   :14327   Max.   :29813.0  
##                                                                   
##   ShoppingMall          Spa              VRDeck        Transported    
##  Min.   :    0.0   Min.   :    0.0   Min.   :    0.0   Mode :logical  
##  1st Qu.:    0.0   1st Qu.:    0.0   1st Qu.:    0.0   FALSE:4315     
##  Median :    0.0   Median :    0.0   Median :    0.0   TRUE :4378     
##  Mean   :  169.6   Mean   :  304.6   Mean   :  298.3                  
##  3rd Qu.:   22.0   3rd Qu.:   53.0   3rd Qu.:   40.0                  
##  Max.   :23492.0   Max.   :22408.0   Max.   :24133.0                  
##                                                                       
##       Aile             deck      side            destination      expense     
##  Min.   :0.0000   F      :2831    : 199   55 Cancri e  :1800   Min.   :    0  
##  1st Qu.:0.0000   G      :2660   P:4206   PSO J318.5-22: 796   1st Qu.:    0  
##  Median :0.0000   E      : 876   S:4288   TRAPPIST-1e  :6097   Median :  716  
##  Mean   :0.2848   B      : 840                                 Mean   : 1441  
##  3rd Qu.:1.0000   C      : 747                                 3rd Qu.: 1441  
##  Max.   :1.0000   D      : 478                                 Max.   :35987  
##                   (Other): 261
summary(test)
##  PassengerId         HomePlanet   CryoSleep           Destination  
##  Length:4277        Earth :2350   FALSE:2695   55 Cancri e  : 841  
##  Class :character   Europa:1002   TRUE :1575   PSO J318.5-22: 388  
##  Mode  :character   Mars  : 925   NA   :   7   TRAPPIST-1e  :3048  
##                                                                    
##                                                                    
##                                                                    
##                                                                    
##       Age           VIP           RoomService        FoodCourt      
##  Min.   : 0.00   Mode :logical   Min.   :    0.0   Min.   :    0.0  
##  1st Qu.:20.00   FALSE:4203      1st Qu.:    0.0   1st Qu.:    0.0  
##  Median :26.22   TRUE :74        Median :    0.0   Median :    0.0  
##  Mean   :28.66                   Mean   :  215.1   Mean   :  428.6  
##  3rd Qu.:37.00                   3rd Qu.:   48.0   3rd Qu.:   66.0  
##  Max.   :79.00                   Max.   :11567.0   Max.   :25273.0  
##                                                                     
##   ShoppingMall         Spa              VRDeck             Aile       
##  Min.   :   0.0   Min.   :    0.0   Min.   :    0.0   Min.   :0.0000  
##  1st Qu.:   0.0   1st Qu.:    0.0   1st Qu.:    0.0   1st Qu.:0.0000  
##  Median :   0.0   Median :    0.0   Median :    0.0   Median :0.0000  
##  Mean   : 173.2   Mean   :  295.9   Mean   :  304.9   Mean   :0.2838  
##  3rd Qu.:  27.0   3rd Qu.:   43.0   3rd Qu.:   31.0   3rd Qu.:1.0000  
##  Max.   :8292.0   Max.   :19844.0   Max.   :22272.0   Max.   :1.0000  
##                                                                       
##       deck      side            destination      expense     
##  F      :1465    : 100   55 Cancri e  : 841   Min.   :    0  
##  G      :1284   P:2084   PSO J318.5-22: 388   1st Qu.:    0  
##  E      : 447   S:2093   TRAPPIST-1e  :3048   Median :  714  
##  B      : 380                                 Mean   : 1418  
##  C      : 355                                 3rd Qu.: 1444  
##  D      : 242                                 Max.   :33666  
##  (Other): 104
write.csv(train, "train_c.csv", row.names=FALSE)
write.csv(test, "test_c.csv", row.names=FALSE)
ggplot(train, aes(x = Age)) +
  geom_histogram(fill = "skyblue", color = "black")
## `stat_bin()` using `bins = 30`. Pick better value with `binwidth`.

ggplot(test, aes(x = Age)) +
  geom_histogram(fill = "skyblue", color = "black")
## `stat_bin()` using `bins = 30`. Pick better value with `binwidth`.

Logistic Regresyon

Logistik regresyon, istatistiksel bir modeldir ve sınıflandırma problemlerinde kullanılır. İki kategorili bağımlı değişkenleri tahmin etmek için bağımsız değişkenlerin değerlerini kullanır. Log-odds oranlarını temel alır ve bağımlı değişkenin olasılığını tahmin etmeyi amaçlar. Model eğitiminde regresyon katsayıları tahmin edilir ve bu katsayılarla yeni verilere dayalı olarak sınıflandırma yapılır. Logistik regresyon, sağlam istatistiksel özelliklere sahiptir ve birçok farklı alanda başarıyla kullanılır.

train_set <- train[2:15]
test_set <- test[2:14]
library(caTools)
set.seed(123)
split = sample.split(train_set$Transported,SplitRatio = 0.75)
training_set = subset(train_set, split == TRUE)
testing_set = subset(train_set, split == FALSE)
logistic = glm(formula = Transported ~ . ,family = binomial, data = training_set)
prob_pred = predict(logistic, type = 'response', newdata = testing_set[-11])
y_pred = ifelse(prob_pred > 0.5,1,0)
y_true <- ifelse(testing_set[11] == TRUE,1,0)
cm = table(y_true, y_pred)
cm
##       y_pred
## y_true   0   1
##      0 821 258
##      1 189 905
(821+905)/(821+905+258+189)
## [1] 0.7942936
logistic_son = glm(formula = Transported ~ . ,family = binomial, data = train_set)
## Warning: glm.fit: des probabilités ont été ajustées numériquement à 0 ou 1
prob_pred = predict(logistic_son, type = 'response', newdata = test_set)
y_pred = ifelse(prob_pred > 0.5, TRUE,FALSE)
Transported <- as.character(y_pred)
PassengerId <- test$PassengerId
Transported <- as.vector(Transported)
submission <- cbind(PassengerId,Transported)
submission <- as.data.frame(submission)
library(stringr)
write.csv(submission,"sub_logistic.csv", row.names = FALSE,quote = FALSE)

SVM

SVM, sınıflandırma ve regresyon problemleri için kullanılan bir makine öğrenimi algoritmasıdır. Ana amacı, sınıfları ayıran bir hiper düzlemi bulmaktır. Bu düzlemi belirleyen noktalara “destek vektör” denir. SVM, sınıflar arasındaki marjı (mesafe) maksimize eden en iyi hiper düzlemi bulmaya yardımcı olur. Ayrıca, non-lineer sınıflandırma problemlerini çözebilmek için kernel fonksiyonlarını kullanır. SVM, genelleme yeteneğini artırmak amacıyla sınıflar arasındaki marjı maksimize eder.

library(e1071)
fit_svm <- svm(Transported ~ ., data = training_set, type = 'C-classification', kernel = 'linear')
preds <- predict(fit_svm, newdata = testing_set, type = "raw") %>% data.frame()
y_pred = ifelse(preds$. == TRUE , 1, 0)
cm = table(y_true, y_pred)
cm
##       y_pred
## y_true   0   1
##      0 852 227
##      1 203 891
(852+891)/(852+891+227+203)
## [1] 0.8021169
svm_son <- svm(Transported ~ ., data = train_set, type = 'C-classification', kernel = 'linear')
preds <- predict(svm_son, newdata = test_set, type = "response") %>% data.frame()
y_pred = preds$.
Transported <- as.character(y_pred)
PassengerId <- test$PassengerId
Transported <- as.vector(Transported)
submission <- cbind(PassengerId, Transported)
submission <- as.data.frame(submission)
submission$Transported <- str_to_title(submission$Transported)
write.csv(submission, "sub_svm.csv",row.names = FALSE, quote = FALSE)

Naive Bayes

Naive Bayes, istatistik ve olasılık temel alarak sınıflandırma yapmak için kullanılan bir makine öğrenimi algoritmasıdır. Bu algoritma, Bayes Teoremi’ni kullanarak bir örneğin bir sınıfa ait olma olasılığını tahmin etmeye çalışır. Naive Bayes genellikle metin sınıflandırma ve spam filtreleme gibi dil işleme problemlerinde başarılıdır. Algoritmanın adı olan “Naive” (Saf) ifadesi, bağımsızlık varsayımını ifade eder. Naive Bayes, özelliklerin bağımsız olduğunu varsayar ve sınıflandırma için bu varsayıma dayanarak çalışır. Model oluşturulduktan sonra, yeni örneklerin sınıflandırılması için bu model kullanılır. Naive Bayes’in avantajları arasında basit ve hızlı olması, küçük veri setlerinde iyi performans göstermesi ve metin verileri gibi problemlerde etkili olması yer alır. Ancak, bağımsızlık varsayımının gerçek dünya verilerine her zaman uymaması zayıf bir yanıdır.

library(e1071)
fit_nb <- naiveBayes(Transported ~ ., data = training_set)
preds <- predict(fit_nb, newdata =testing_set[-11], type ="raw") %>% data.frame()
y_pred = ifelse(preds$TRUE. > 0.5, 1, 0)
cm = table(y_true, y_pred)
cm
##       y_pred
## y_true    0    1
##      0  513  566
##      1   78 1016
(496+1017)/(496+1017+583+77)
## [1] 0.6962724
nb_son = naiveBayes(Transported ~ ., data = train_set)
perd <- predict(nb_son, newdata = test_set, type = "raw") %>% data.frame()
y_pred = ifelse(preds$TRUE. > 0.5, TRUE, FALSE)
Transported <- as.character(y_pred)
PassengerId <- test$PassengerId
Transported <- as.vector(Transported)
submission <- cbind(PassengerId, Transported)
## Warning in cbind(PassengerId, Transported): number of rows of result is not a
## multiple of vector length (arg 2)
submission <- as.data.frame(submission)
submission$Transported <- str_to_title(submission$Transported)
write.csv(submission, "sub_nb.csv" , row.names = FALSE, quote = FALSE)

Dicision Trees

Karar ağaçları, makine öğrenimi algoritmasıdır ve sınıflandırma ve regresyon problemlerinde kullanılır. Veri kümesinde yapılan testlere göre ağaç dallara ayrılır ve sonuçlar yaprak düğümlerinde temsil edilir. Bu algoritma veri analizi, tanımlayıcı analiz ve tahmin problemlerinde kullanılır ve özellik seçimi yaparak veri hazırlama sürecini kolaylaştırır. Gelişmiş teknikler olarak Random Forest veya Gradient Boosting de kullanılabilir.

library(rpart)
library(rpart.plot)
library(randomForest)
library(caret)
training_set$Transported <- as.factor(training_set$Transported)
testing_set$Transported <- as.factor(testing_set$Transported)
train_set$Transported <- as.factor(train_set$Transported)
fit_tree <- rpart(Transported ~ . , data = training_set)
summary(fit_tree)
## Call:
## rpart(formula = Transported ~ ., data = training_set)
##   n= 6520 
## 
##           CP nsplit rel error    xerror       xstd
## 1 0.44004944      0 1.0000000 1.0000000 0.01247595
## 2 0.03244747      1 0.5599506 0.5599506 0.01117802
## 3 0.01000000      4 0.4626082 0.4663164 0.01052385
## 
## Variable importance
##    CryoSleep          Spa       VRDeck  RoomService    FoodCourt ShoppingMall 
##           39           16           15           12            8            6 
##   HomePlanet         deck 
##            2            1 
## 
## Node number 1: 6520 observations,    complexity param=0.4400494
##   predicted class=TRUE   expected loss=0.496319  P(node) =1
##     class counts:  3236  3284
##    probabilities: 0.496 0.504 
##   left son=2 (4166 obs) right son=3 (2354 obs)
##   Primary splits:
##       CryoSleep    splits as  LRR,        improve=703.4299, (0 missing)
##       RoomService  < 0.5    to the right, improve=408.8215, (0 missing)
##       Spa          < 0.5    to the right, improve=372.3306, (0 missing)
##       VRDeck       < 0.5    to the right, improve=353.3889, (0 missing)
##       ShoppingMall < 0.5    to the right, improve=228.9794, (0 missing)
##   Surrogate splits:
##       Spa          < 0.5    to the right, agree=0.727, adj=0.245, (0 split)
##       FoodCourt    < 0.5    to the right, agree=0.713, adj=0.206, (0 split)
##       VRDeck       < 0.5    to the right, agree=0.711, adj=0.199, (0 split)
##       RoomService  < 0.5    to the right, agree=0.700, adj=0.170, (0 split)
##       ShoppingMall < 0.5    to the right, agree=0.697, adj=0.161, (0 split)
## 
## Node number 2: 4166 observations,    complexity param=0.03244747
##   predicted class=FALSE  expected loss=0.3290927  P(node) =0.6389571
##     class counts:  2795  1371
##    probabilities: 0.671 0.329 
##   left son=4 (1087 obs) right son=5 (3079 obs)
##   Primary splits:
##       RoomService < 343    to the right, improve=97.32570, (0 missing)
##       Age         < 12.5   to the right, improve=86.55669, (0 missing)
##       Spa         < 241.5  to the right, improve=78.41481, (0 missing)
##       FoodCourt   < 1331   to the left,  improve=70.95503, (0 missing)
##       VRDeck      < 420.5  to the right, improve=53.42848, (0 missing)
##   Surrogate splits:
##       HomePlanet splits as  RRL,        agree=0.789, adj=0.191, (0 split)
##       deck       splits as  RRRLRRRR,   agree=0.744, adj=0.017, (0 split)
##       Age        < 78.5   to the right, agree=0.740, adj=0.002, (0 split)
## 
## Node number 3: 2354 observations
##   predicted class=TRUE   expected loss=0.1873407  P(node) =0.3610429
##     class counts:   441  1913
##    probabilities: 0.187 0.813 
## 
## Node number 4: 1087 observations
##   predicted class=FALSE  expected loss=0.1471941  P(node) =0.1667178
##     class counts:   927   160
##    probabilities: 0.853 0.147 
## 
## Node number 5: 3079 observations,    complexity param=0.03244747
##   predicted class=FALSE  expected loss=0.3933095  P(node) =0.4722393
##     class counts:  1868  1211
##    probabilities: 0.607 0.393 
##   left son=10 (1034 obs) right son=11 (2045 obs)
##   Primary splits:
##       Spa          < 205    to the right, improve=123.20220, (0 missing)
##       VRDeck       < 135.5  to the right, improve= 95.85901, (0 missing)
##       Age          < 10.5   to the right, improve= 61.76372, (0 missing)
##       ShoppingMall < 790.5  to the left,  improve= 48.63889, (0 missing)
##       FoodCourt    < 2200.5 to the left,  improve= 48.06279, (0 missing)
##   Surrogate splits:
##       HomePlanet splits as  RLR,        agree=0.699, adj=0.103, (0 split)
##       deck       splits as  LLLRRRRL,   agree=0.687, adj=0.068, (0 split)
##       VRDeck     < 2794.5 to the right, agree=0.669, adj=0.014, (0 split)
##       FoodCourt  < 3197.5 to the right, agree=0.668, adj=0.012, (0 split)
##       Age        < 59.5   to the right, agree=0.665, adj=0.004, (0 split)
## 
## Node number 10: 1034 observations
##   predicted class=FALSE  expected loss=0.1943907  P(node) =0.158589
##     class counts:   833   201
##    probabilities: 0.806 0.194 
## 
## Node number 11: 2045 observations,    complexity param=0.03244747
##   predicted class=FALSE  expected loss=0.4938875  P(node) =0.3136503
##     class counts:  1035  1010
##    probabilities: 0.506 0.494 
##   left son=22 (604 obs) right son=23 (1441 obs)
##   Primary splits:
##       VRDeck       < 363.5  to the right, improve=129.97180, (0 missing)
##       FoodCourt    < 2071   to the left,  improve= 52.82439, (0 missing)
##       HomePlanet   splits as  LRR,        improve= 33.55920, (0 missing)
##       ShoppingMall < 1540.5 to the left,  improve= 32.99444, (0 missing)
##       Age          < 10.5   to the right, improve= 31.29302, (0 missing)
##   Surrogate splits:
##       deck      splits as  RRLRRRRR,   agree=0.710, adj=0.018, (0 split)
##       FoodCourt < 7197.5 to the right, agree=0.707, adj=0.008, (0 split)
##       Age       < 68.5   to the right, agree=0.705, adj=0.002, (0 split)
## 
## Node number 22: 604 observations
##   predicted class=FALSE  expected loss=0.218543  P(node) =0.09263804
##     class counts:   472   132
##    probabilities: 0.781 0.219 
## 
## Node number 23: 1441 observations
##   predicted class=TRUE   expected loss=0.3907009  P(node) =0.2210123
##     class counts:   563   878
##    probabilities: 0.391 0.609
rpart.plot(fit_tree)

Ağaç şu ifadeyi veriyor: Eğer Transported’de CryoSleep aldılarsa (FALSE ya da NA) “no” dur. Eğer CryoSleep almadılarsa (TRUE) ve RoomService daha fazla para ediyorsa “Transported” değiller, ama daha az ediyorsa ve Spa’ya daha fazla para veriyorlarsa “Transported” olmuşlardır. Örneğin, RoomService’a 366 ya da daha fazla, Spa’ya 205 ya da daha fazla, VRDeck’e ise 248 daha fazla para verirse ama FoodCourt en azından sonucu 0’dan büyükse, onlar da “Transported” olmuşlardır.

preds = predict(fit_tree, newdata = testing_set[-11],type = "class")
y_pred = ifelse(preds == TRUE, 1,0)
cm = table(y_true, y_pred)
cm
##       y_pred
## y_true   0   1
##      0 735 344
##      1 170 924
(735+924)/(735+924+344+170)
## [1] 0.7634607
fit_tree <- rpart(Transported ~ ., data = train_set)
summary(fit_tree)
## Call:
## rpart(formula = Transported ~ ., data = train_set)
##   n= 8693 
## 
##           CP nsplit rel error    xerror        xstd
## 1 0.44264195      0 1.0000000 1.0000000 0.010803454
## 2 0.03066821      1 0.5573581 0.5578216 0.009668511
## 3 0.01000000      4 0.4653534 0.4825029 0.009221643
## 
## Variable importance
##    CryoSleep          Spa       VRDeck  RoomService    FoodCourt ShoppingMall 
##           40           17           15           11            8            6 
##   HomePlanet         deck 
##            1            1 
## 
## Node number 1: 8693 observations,    complexity param=0.4426419
##   predicted class=TRUE   expected loss=0.4963764  P(node) =1
##     class counts:  4315  4378
##    probabilities: 0.496 0.504 
##   left son=2 (5558 obs) right son=3 (3135 obs)
##   Primary splits:
##       CryoSleep    splits as  LRR,         improve=948.8062, (0 missing)
##       RoomService  < 0.5     to the right, improve=526.1339, (0 missing)
##       Spa          < 0.5     to the right, improve=514.4709, (0 missing)
##       VRDeck       < 0.5     to the right, improve=479.5694, (0 missing)
##       ShoppingMall < 0.5     to the right, improve=302.4414, (0 missing)
##   Surrogate splits:
##       Spa          < 0.5     to the right, agree=0.727, adj=0.243, (0 split)
##       FoodCourt    < 0.5     to the right, agree=0.712, adj=0.201, (0 split)
##       VRDeck       < 0.5     to the right, agree=0.707, adj=0.187, (0 split)
##       RoomService  < 0.5     to the right, agree=0.698, adj=0.163, (0 split)
##       ShoppingMall < 0.5     to the right, agree=0.694, adj=0.152, (0 split)
## 
## Node number 2: 5558 observations,    complexity param=0.03066821
##   predicted class=FALSE  expected loss=0.3281756  P(node) =0.639365
##     class counts:  3734  1824
##    probabilities: 0.672 0.328 
##   left son=4 (1432 obs) right son=5 (4126 obs)
##   Primary splits:
##       RoomService  < 346.5   to the right, improve=112.88130, (0 missing)
##       Age          < 12.5    to the right, improve=109.83150, (0 missing)
##       Spa          < 266.5   to the right, improve=105.42510, (0 missing)
##       FoodCourt    < 1331    to the left,  improve=104.01590, (0 missing)
##       ShoppingMall < 627.5   to the left,  improve= 69.98062, (0 missing)
##   Surrogate splits:
##       HomePlanet splits as  RRL,         agree=0.785, adj=0.166, (0 split)
##       deck       splits as  RRRLRRRR,    agree=0.745, adj=0.008, (0 split)
##       Age        < 78.5    to the right, agree=0.743, adj=0.001, (0 split)
## 
## Node number 3: 3135 observations
##   predicted class=TRUE   expected loss=0.185327  P(node) =0.360635
##     class counts:   581  2554
##    probabilities: 0.185 0.815 
## 
## Node number 4: 1432 observations
##   predicted class=FALSE  expected loss=0.1571229  P(node) =0.1647302
##     class counts:  1207   225
##    probabilities: 0.843 0.157 
## 
## Node number 5: 4126 observations,    complexity param=0.03066821
##   predicted class=FALSE  expected loss=0.3875424  P(node) =0.4746348
##     class counts:  2527  1599
##    probabilities: 0.612 0.388 
##   left son=10 (1391 obs) right son=11 (2735 obs)
##   Primary splits:
##       Spa          < 205     to the right, improve=157.04000, (0 missing)
##       VRDeck       < 417.5   to the right, improve=120.79880, (0 missing)
##       Age          < 12.5    to the right, improve= 78.22978, (0 missing)
##       FoodCourt    < 2507.5  to the left,  improve= 67.36756, (0 missing)
##       ShoppingMall < 627     to the left,  improve= 64.47554, (0 missing)
##   Surrogate splits:
##       HomePlanet splits as  RLR,         agree=0.695, adj=0.095, (0 split)
##       deck       splits as  LLLRRRRL,    agree=0.685, adj=0.065, (0 split)
##       FoodCourt  < 3197.5  to the right, agree=0.669, adj=0.017, (0 split)
##       VRDeck     < 2052    to the right, agree=0.665, adj=0.006, (0 split)
##       Age        < 75.5    to the right, agree=0.664, adj=0.003, (0 split)
## 
## Node number 10: 1391 observations
##   predicted class=FALSE  expected loss=0.194105  P(node) =0.1600138
##     class counts:  1121   270
##    probabilities: 0.806 0.194 
## 
## Node number 11: 2735 observations,    complexity param=0.03066821
##   predicted class=FALSE  expected loss=0.4859232  P(node) =0.314621
##     class counts:  1406  1329
##    probabilities: 0.514 0.486 
##   left son=22 (814 obs) right son=23 (1921 obs)
##   Primary splits:
##       VRDeck       < 355     to the right, improve=177.94610, (0 missing)
##       FoodCourt    < 2069.5  to the left,  improve= 67.78743, (0 missing)
##       ShoppingMall < 1248.5  to the left,  improve= 40.19680, (0 missing)
##       Age          < 7.5     to the right, improve= 38.46111, (0 missing)
##       HomePlanet   splits as  LRR,         improve= 37.95727, (0 missing)
##   Surrogate splits:
##       deck        splits as  RRLRRRRR,    agree=0.708, adj=0.018, (0 split)
##       FoodCourt   < 10134.5 to the right, agree=0.705, adj=0.007, (0 split)
##       Age         < 68.5    to the right, agree=0.703, adj=0.004, (0 split)
##       RoomService < 343     to the right, agree=0.703, adj=0.001, (0 split)
## 
## Node number 22: 814 observations
##   predicted class=FALSE  expected loss=0.2088452  P(node) =0.09363856
##     class counts:   644   170
##    probabilities: 0.791 0.209 
## 
## Node number 23: 1921 observations
##   predicted class=TRUE   expected loss=0.3966684  P(node) =0.2209824
##     class counts:   762  1159
##    probabilities: 0.397 0.603
rpart.plot(fit_tree)

CryoSleep alanlar Transported olmuştur, ama RoomService fazla alanlar ölmüştür. RoomService daha az para harcamış, Spa’ya daha fazla para harcamış, ama VRDeck’e eğer 355’ten fazla para harcamışlarsa ölmüşlerdir. Bu üçü (RoomService, Spa ve VRDeck), eğer 347’den fazla harcamamışlarsa, 205’den fazla harcamamışlarsa, 355’ten fazla harcamamışlarsa bile ölmüşlerdir.

preds = predict(fit_tree, newdata = test_set,type = "class")
y_pred = ifelse(preds == TRUE,TRUE,FALSE)
Transported <- as.character(y_pred)
PassengerId <- test$PassengerId
Transported <- as.vector(Transported)
submission <- cbind(PassengerId,Transported)
submission <- as.data.frame(submission)
submission$Transported <- str_to_title(submission$Transported)
write.csv(submission,"subm_dt.csv", row.names = FALSE,quote = FALSE)