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.
- 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.
## # 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
## # 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)## # 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
## # 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)## 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
## 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$num <- droplevels(train$num)
test$num <- droplevels(test$num)
train$side <- droplevels(train$side)
test$side <- droplevels(test$side)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()## # 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)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)))## # 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
## # 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
most_frequent_destinations <- train %>%
filter(!is.na(Destination)) %>%
group_by(HomePlanet, Destination) %>%
summarize(count = n()) %>%
arrange(Destination, desc(count)) %>%
slice(1) %>%
ungroup()## # 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$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$VRDecktrain <- 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"))## 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
##
## 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"))## 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
##
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 ()## # A tibble: 3 × 3
## HomePlanet deck count
## <fct> <fct> <int>
## 1 Earth G 1222
## 2 Europa B 358
## 3 Mars F 603
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 ()## # A tibble: 3 × 3
## HomePlanet side count
## <chr> <fct> <int>
## 1 Earth P 2363
## 2 Europa S 1115
## 3 Mars P 888
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))))## # 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
## # 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
## 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
## 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
## `stat_bin()` using `bins = 30`. Pick better value with `binwidth`.
## `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.
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)## y_pred
## y_true 0 1
## 0 821 258
## 1 189 905
## [1] 0.7942936
## Warning: glm.fit: des probabilités ont été ajustées numériquement à 0 ou 1
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
## y_true 0 1
## 0 852 227
## 1 203 891
## [1] 0.8021169
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
## y_true 0 1
## 0 513 566
## 1 78 1016
## [1] 0.6962724
## Warning in cbind(PassengerId, Transported): number of rows of result is not a
## multiple of vector length (arg 2)
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.
training_set$Transported <- as.factor(training_set$Transported)
testing_set$Transported <- as.factor(testing_set$Transported)
train_set$Transported <- as.factor(train_set$Transported)## 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
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.
## y_pred
## y_true 0 1
## 0 735 344
## 1 170 924
## [1] 0.7634607
## 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
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.