Uzay Gemisi Titanik
Kozmik bir gizemi çözmek için veri bilimi becerilerinize ihtiyaç duyulan 2912 yılına hoş geldiniz. Dört ışık yılı öteden bir sinyal aldık ve işler pek iyi görünmüyor.
Uzay Gemisi Titanik, bir ay önce fırlatılan yıldızlararası bir yolcu gemisiydi. Gemide neredeyse 13.000 yolcu bulunan gemi, güneş sistemimizden göçmenleri yakın yıldızların yörüngesinde bulunan üç yeni yaşanabilir dış gezegene taşımak üzere ilk yolculuğuna çıktı.
Dikkatsiz Uzay Gemisi Titanic, ilk varış noktası olan kavurucu 55 Cancri E’ye giderken Alpha Centauri’yi dönerken, bir toz bulutunun içine gizlenmiş bir uzay-zaman anormalliğiyle çarpıştı. Ne yazık ki 1000 yıl öncesindeki adaşı ile benzer bir kaderle karşılaştı. Gemi sağlam kalmasına rağmen yolcuların neredeyse yarısı alternatif bir boyuta taşındı!
Katagorilerin Anlamları:
PassengerId: kimlik= gggg_pp ;gggg: seyahat grubunu ifade ederken, pp:gruptaki sırayı genellikle aile üyesini belirtir.
HomePlanet: yolcunun ayrıldığı, ikamet ettiği gezegendir.
CyroSleep: kabindeki yolcuları ifade eder.
Cabin: yolcuların kaldığı kabini güverte numara ve hangi numarada olduklarını ‘deck/num/side’ ile belirtir.
Destination: yolcunun ineceği gezegeni bildirir.
Age: yolcuların yaşlarını gösterir.
VIP: yolcunun özel hizmet için ödeme yapıp yapmadığını gösterir.
RoomService, FoodCourt, ShoppingMall, Spa, VRDeck: yolcunun lüksolanaklar faturasını gösterir.
Transpoted: yollcunun başka boyuta taşınıp taşınmadığını tahmin etmeye çalıştığımız hedef sütunu ifade eder.
test.csv: geride kalan 3/1 lik (4300) yolcu için kişisel kayıtlar, test verisi olarak kullanılacaktır. Görev: bu setteki yolcuların transported değerini tahmin etmek.
sample_submission.csv: doğru formatta bir gönderim dosyasıdır.
PassengerId: test setindeki her yolcu için kimlik.
Transported: hedef. her yolcuiçin true veya false tahmini yapılacak.
İlk olarak train ve test datalarını yüklüyoruz. Dataya başlamak için eksikleri temizliyoruz. str ile veri hakkında bilgi alıyoruz. Daha sonra DataExplorer paketi yardımıyla datayı araştırıp bilgileri gözden geçirerek işe yarayabileceğini düşündüğümüz bilgileri ayıklıyoruz. train için yaptığımız her aşamayı test için de kullanıyoruz. create_report() yaptığımızda bize birçok bilgi verir. Grafikleri de report yardımı ile inceleye biliriz.
Temel İstatistikler
Ham Sayımlar
Ad: Değer
Satırlar: 8.693
Sütunlar: 14
Ayrık sütunlar: 8
Sürekli sütunlar: 6
Tüm eksik sütunlar. 0
Eksik gözlemler: 2.324
Satırları Tamamla: 6.606
Toplam gözlem: 121.702
Data Hakkında Veri Grafikleri ve Yorumları
Yüzdelerin gösterildiği alttaki grafikte özelliklere göre değerlendirilmiştir. bu tabloda en yüksek oran yüzde 76 ile complate rows yani satırları tamamlanmış sütunlar iken en düşük oran 1.9 ile missing observation dur.
Eksik veri grafiği bize verilerde hangi oranda eksik olduğunu göstermektedir. Grafiği özet ile yorumladığımızda Transported ve PassengerId de 0.0 oranıyla hiç eksik data bulunmadığını gösterirken en yüksek oranın 2.5 ile CyroSleep te olduğu kanaatine varırız. Diğer katagoriler de 2 nin üzerinde eksik bilgi bulundurarak CyroSleep e yakın oranlardadır.
Histogram grafiğinde de data hakkında farklı bilgiler edinebiliriz. Tek tek incelediğimizde Age grafiğinde 20’li yaşlarda olan kişi sayısı neredeyse 800 e yaklaşmakta, aynı zamanda 80 li yaşlarda neredeyse 0 kişi bulunmakta. Yoğunluk 20-40 arasında yaşanırken, diğer yaşlarda bu oran oldukça düşmektedir. FoodCourt histogram grafiğinde yemeğe harcanan ücret oranları görülmektedir. Çoğu kişi yemeğe neredeyse hiç para harcamamıştır. Ayrıca RoomService, ShoppingMall, Spa ve VRDeck’ te de FoodCourt’a benzer biçimde para harcama oranının oldukça düşük olduğunu görülmektedir.
Çubuk grafiğinde ilk şemada gemideki yolcuların hangi gezegenden oldukları görülmektedir. “ Dünya”, “Europa”, “Mars” ve bilinmeyenlerin olduğu “NA” ile dört katagoride oluşmaktadır. Yolcuların birçoğu dünya gezegeninden olup çok az kısmı da NA’da dır. Dünyalı yolcular 5000 e yakın kişiden oluşurken en az oranla NA’lılar tahmini 200 civarındadır. Destination da ise nerede inecekleri gösterilmektedir. TRAPPİST-le 6000 e yakın kişi ile en fazla orana sahip iken NA tahmini 100-200 kişi ile en düşük orana sahiptir. Yolcuların birçoğunun VIP yolcu olmadığı görülüyor. NA ve VIP yolcu sayısı ise neredeyse birbirine eşittir. Yolcuların Transported oranı ise hem true hem false seçenekleri ile birbirine eşittir.
QQ grafiği, normal olasılık dağılımı
ile veri setinin dağılımını karşılaştıran bir grafiktir. Eksenlerde
teorik normal dağılımın kuantil değerleri ve veri setinin kuantil
değerleri yer alır. Eğer veri seti normal dağılıma yakınsa, QQ grafiği
genellikle bir doğru üzerinde olacaktır. grafikte Age değişkeninin duğru
üzerinde oldukça düzenli gitmesinden veri setinin normal dağılımda
olduğunu söyleyebiliriz. Diğer kategorilerde ise ters L biçiminde bir
hareket söz konusudur. Normal dağılıma sahip olmadığı yorumunu
yapabiliriz burada.
Korelasyon katsayısının işareti, ilişkinin yönünü; Korelasyon katsayısının büyüklüğü ise ilişkinin derecesini gösterir. ≤ 1 ✓ r =‐1 veya r =1 çıkması, iki değişken arasında tam bir doğrusal ilişkiye işaret eder. ✓ r=0 ise iki değişken arasında (doğrusal) bir ilişki yoktur. Sonucun +1 çıkması iki değişken arasında kuvvetli olumlu ilişkinin bulunduğunu, -1 ise kuvvetli olumsuz ilişkinin bulunduğunu gösterir. Korelasyon katsayısı 0 ‘a yaklaştıkça ilişkinin kuvveti zayıflar, sıfır ise iki değişken arasında doğrusal bir ilişkinin olmadığını gösterir. Grafikten örnek verirsek Cyrosleep ile Age’nin kesiştiği nokta 0.9 değerindedir. Yani neredeyse 1 e yaklaştığı için iki değişken arasında güçlü bir bağın olduğunu söyleyebiliriz. ShoppingMall ile VRDeck’ in kesiştiği noktada de sonuç 0 çıkmıştır yani bu değişkenler arasında bir bağ bulunmamaktadır. CyroSleep true ile CyroSleep false nin kesiştiği noktada -1 değeri bulunmaktadır. Yani bu iki değişken arasında kuvvetli olumsuz ilişki olduğunu söyleyebiliriz.
Temel bileşenler tarafından açıklanan varyans yüzdesi grafiği, veri setinin değişkenliğinin ana kaynaklarını gösterir. Her bir bileşen, veri setindeki farklı varyansın bir ölçüsünü temsil eder. Bu grafik, hangi bileşenlerin toplam varyansın büyük bir kısmını açıkladığını anlamamıza yardımcı olur ve temel bileşenler analizinde hangi bileşenlerin veri setinin toplam varyansının büyük bir kısmını açıkladığını gösterir. Dikey eksen üzerindeki açıklanan varyans oranları, her bir temel bileşenin toplam varyansın ne kadarını kapsadığını belirtir. Yatay eksendeki temel bileşenler, veri setindeki farklı özelliklerin kombinasyonlarını temsil eder. Ayrıca, veri setindeki bazı özelliklerin (örneğin, PassengerId, Cabin ve Name) çok sayıda kategori içerdiği ve bu nedenle analizden çıkarıldığı belirtilmiş.
Aşağıdaki temel bileşenler analizi grafiğinde özelliklerin görece önemlilikleri değerlendirilmiştir. Bazı özellikler negatif yönlü iken bazıları da pozitif yönlüdür.
## # 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
Train
Verileri Düzenleme
Burada verileri düzenlerken birkaç aşamadan geçiyoruz. Bazı özellikleri ayırırken,bazı işimize yaramayacağını düşündüğümüz verilerden kurtuluyoruz. datanın içinde boşluklara NA yazıp sonrada ya sıfır veriyoruz değerlere yada Age gibi özelliklerin ortalamasını alıyoruz. İşimize yaramayan bilgileri ‘select’ komutu ile siliyoruz. Tabi bu işlemleri hem train hem test için uyguluyoruz. En son bütün işlemleri yaptığımızda test ve train dataları için NA’ larda temizlenmeyen kategori var mı diye kontrol edip tahminler için bazı algoritmaları kullanıyoruz.
## # A tibble: 19 × 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
## 15 "ailenum" chr 0 0 6217 NA NA NA
## 16 "ailesira " chr 0 0 8 NA NA NA
## 17 "deck" chr 199 2.3 9 NA NA NA
## 18 "num" chr 0 0 1818 NA NA NA
## 19 "side" chr 0 0 3 NA NA NA
## [1] "Europa" "Earth" "Mars" NA
## NULL
## [1] "Earth" "Europa" "Mars" NA
## [1] "Earth" "Europa" "Mars" "NA"
## # A tibble: 18 × 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" fct 0 0 4 NA NA NA
## 3 "CryoSleep" lgl 217 2.5 3 0 0.36 1
## 4 "Destination" chr 182 2.1 4 NA NA NA
## 5 "Age" dbl 179 2.1 81 0 28.8 79
## 6 "VIP" lgl 203 2.3 3 0 0.02 1
## 7 "RoomService" dbl 181 2.1 1274 0 225. 14327
## 8 "FoodCourt" dbl 183 2.1 1508 0 458. 29813
## 9 "ShoppingMall" dbl 208 2.4 1116 0 174. 23492
## 10 "Spa" dbl 183 2.1 1328 0 311. 22408
## 11 "VRDeck" dbl 188 2.2 1307 0 305. 24133
## 12 "Name" chr 200 2.3 8474 NA NA NA
## 13 "Transported" lgl 0 0 2 0 0.5 1
## 14 "ailenum" chr 0 0 6217 NA NA NA
## 15 "ailesira " chr 0 0 8 NA NA NA
## 16 "deck" chr 199 2.3 9 NA NA NA
## 17 "num" chr 0 0 1818 NA NA NA
## 18 "side" chr 0 0 3 NA NA NA
train <- train %>%
group_by(HomePlanet, Destination) %>%
mutate(Age = ifelse(is.na(Age), mean(Age, na.rm = TRUE), Age))test <- test %>%
group_by(HomePlanet, Destination) %>%
mutate(Age = ifelse(is.na(Age), mean(Age, na.rm = TRUE), Age))## [1] "TRAPPIST-1e" "PSO J318.5-22" "55 Cancri e" NA
train <- train %>%
group_by(HomePlanet, Destination) %>%
mutate_at(vars(RoomService), ~replace_na(., mean(., na.rm = TRUE)))test <- test %>%
group_by(HomePlanet, Destination) %>%
mutate_at(vars(RoomService), ~replace_na(., mean(., na.rm = TRUE)))## # A tibble: 18 × 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" fct 0 0 4 NA NA NA
## 3 "CryoSleep" fct 0 0 3 NA NA NA
## 4 "Destination" fct 0 0 4 NA NA NA
## 5 "Age" dbl 0 0 91 0 28.8 79
## 6 "VIP" fct 0 0 3 NA NA NA
## 7 "RoomService" dbl 0 0 1287 0 225. 14327
## 8 "FoodCourt" dbl 183 2.1 1508 0 458. 29813
## 9 "ShoppingMall" dbl 208 2.4 1116 0 174. 23492
## 10 "Spa" dbl 183 2.1 1328 0 311. 22408
## 11 "VRDeck" dbl 188 2.2 1307 0 305. 24133
## 12 "Name" chr 200 2.3 8474 NA NA NA
## 13 "Transported" lgl 0 0 2 0 0.5 1
## 14 "ailenum" chr 0 0 6217 NA NA NA
## 15 "ailesira " chr 0 0 8 NA NA NA
## 16 "deck" chr 199 2.3 9 NA NA NA
## 17 "num" chr 0 0 1818 NA NA NA
## 18 "side" fct 0 0 3 NA NA NA
train <- train %>% mutate(ShoppingMall = coalesce(ShoppingMall, 0),
Spa = coalesce(Spa, 0),
VRDeck = coalesce(VRDeck, 0))test <- test %>% mutate(ShoppingMall = coalesce(ShoppingMall, 0),
Spa = coalesce(Spa, 0),
VRDeck = coalesce(VRDeck, 0))## # A tibble: 17 × 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" fct 0 0 4 NA NA NA
## 3 "CryoSleep" fct 0 0 3 NA NA NA
## 4 "Destination" fct 0 0 4 NA NA NA
## 5 "Age" dbl 0 0 91 0 28.8 79
## 6 "VIP" fct 0 0 3 NA NA NA
## 7 "RoomService" dbl 0 0 1287 0 225. 14327
## 8 "FoodCourt" dbl 0 0 1507 0 448. 29813
## 9 "ShoppingMall" dbl 0 0 1115 0 170. 23492
## 10 "Spa" dbl 0 0 1327 0 305. 22408
## 11 "VRDeck" dbl 0 0 1306 0 298. 24133
## 12 "Transported" lgl 0 0 2 0 0.5 1
## 13 "ailenum" chr 0 0 6217 NA NA NA
## 14 "ailesira " chr 0 0 8 NA NA NA
## 15 "deck" fct 0 0 9 NA NA NA
## 16 "num" chr 0 0 1818 NA NA NA
## 17 "side" fct 0 0 3 NA NA NA
## # A tibble: 16 × 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" fct 0 0 4 NA NA NA
## 3 "CryoSleep" fct 0 0 3 NA NA NA
## 4 "Destination" fct 0 0 4 NA NA NA
## 5 "Age" dbl 0 0 91 0 28.7 79
## 6 "VIP" fct 0 0 3 NA NA NA
## 7 "RoomService" dbl 0 0 848 0 219. 11567
## 8 "FoodCourt" dbl 0 0 902 0 429. 25273
## 9 "ShoppingMall" dbl 0 0 715 0 173. 8292
## 10 "Spa" dbl 0 0 833 0 296. 19844
## 11 "VRDeck" dbl 0 0 796 0 305. 22272
## 12 "ailenum" chr 0 0 3063 NA NA NA
## 13 "ailesira " chr 0 0 8 NA NA NA
## 14 "deck" fct 0 0 9 NA NA NA
## 15 "num" chr 0 0 1506 NA NA NA
## 16 "side" fct 0 0 3 NA NA NA
Tahmin Hesaplama Algoritmaları
Yaptığımız işlemler sonrasında tahminlerimizi kontrol etmek için kullanılan bazı algoritmalardan faydalanıyoruz. Benim kullandığım algoritmalar ; Logistic Regresyon, SVM Radial ve Decision Trees.
Logistic Regresyon
Bu algoritma olasılıkları hesaplar ve sınıflara ayırır. Logistic Regresyon direkt tahmin edilen veriyi değil katagorik tahmin etmek istediğimiz sınıfın olasılığını veren algoritmadır. İlk olarak bu algoritmayı kullandım. test ve train data setlerinde PassengerId i kullanmadığımız için birinci satırı almıyoruz ve 14 değişkenden yararlanıyoruz. sonra tahminimi % 70 ve 30 olarak ikiye ayırıyorum oluşturulan trainin ve testing setlerde doğru sonuçlar ile karşılaştırma yaparak ilerliyoruz. Tahmin adını vererek oluşturulan fonksiyonda logistici tahmin ediyoruz.Burada 11. sütunu kullanmayarak tahmin yapıyoruz. Sonra tahminimizi değerlendiriyoruz, eğer 0.5 ten büyük ise sonucu 1, küçük ise sonucu 0 alıyoruz. Gerçek değerler testing setinde gösteriliyor. Transported da true, false olarak gösterildiği için tahminlerimizi karşılaştırmak için bu katagoiyi de 1 veya 0 a çeviriyoruz. Sonuç true ise 1, false ise 0 çıkacak şekilde kodu girerek chunk ı çalıştırıyoruz. cm komutu ile kendi sonuçlarım ile gerçek sonuçları karşılaştırıyoruz. Ortalamayı bulmak için yanlış ve doğru larda doğru tahmin ettiklerimin toplamını bütün değerlere bölüyorum. Son olarak bütün datayı kullanarak test ediyoruz. burada karşılaştırmayı yaparken sonuç bir önceki gibi 1 ve 0 değil true ve false olarak yapıyoruz. daha sonraki aşamada kaggle ın bizden istediği formata bakıyoruz. sumble_submission ı indirerekk kontrol ediyoruz. PassengerId si olsun ve true-false diye ayırmamızı istemektedir. Gerekli kodları girerek transported ı true/false diye ayırıp dosyamızı yapıyoruz. detaylardan kurtulup işlemleri tamamlıyor ve Kaggle a yüklemeye hazır oluyoruz.
library(caTools)
set.seed(123)
split = sample.split(train_set$Transported, SplitRatio = 0.7)
training_set = subset(train_set, split == TRUE)
testing_set = subset(train_set, split == FALSE)## y_pred
## y_true 0 1
## 0 971 324
## 1 219 1094
## [1] 0.7917945
SVM radial (kernel)
SUPPORT VECTOR MACHINES (SVM) uygulaması kolay, genellikle iyi genelleştirme performansı gösteren, birçok problemi çözebilen bir algoritmadır. bu algoritma hem doğrusal hem de doğrusal olmayan verilere uygulanabilir. Yüksek doğruluk oranına sahiptir. Karmaşık ssınıfmodellerini sınıflandırabilir ve çoksayıda bağımsızdeğişkenle çalışabilir. Bu algoritmayı kullanırken ilk olarak indirilmesi gereken dosyayı indirip gerekli fonksiyonları yazmaya başlıyoruz. Bir önceki tahmin denemesine benzer şekilde ilerleyip oluşturduğımuz dosyaya isim vererek işlemleri tamamlıyoruz.
Decision Trees
Burada veri kümemizden bir karar ağacı çıkarıyoruz. Oluşan grafiğin hem özetini almak hemde ağacın grafiğini almak için gerekli kodları kullanıyoruz. burada bize bir ağaç verecek. bu ağaca göre Transported olacak kişi CyroSleep aldıysa (CyroSleep = true) Transport olmuştur. eğer CyroSleep almayıp RoomSevice ye daha fazla para ödüyor ise Transported olmadıklarını gösteriyor. RandomForest bu ağacın binlercesini ifade etmektedir. Daha sonra bir dosya haline getirip Kaggle a yüklemeye hazırlanmış oluyoruz.
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= 6085
##
## CP nsplit rel error xerror xstd
## 1 0.43145695 0 1.0000000 1.0000000 0.01291462
## 2 0.03697572 1 0.5685430 0.5685430 0.01162490
## 3 0.01357616 4 0.4576159 0.4698675 0.01092261
## 4 0.01000000 5 0.4440397 0.4599338 0.01084121
##
## Variable importance
## CryoSleep Spa VRDeck RoomService FoodCourt ShoppingMall
## 42 16 15 12 9 4
## HomePlanet deck
## 2 1
##
## Node number 1: 6085 observations, complexity param=0.431457
## predicted class=TRUE expected loss=0.4963024 P(node) =1
## class counts: 3020 3065
## probabilities: 0.496 0.504
## left son=2 (3957 obs) right son=3 (2128 obs)
## Primary splits:
## CryoSleep splits as LRL, improve=641.3171, (0 missing)
## RoomService < 0.5972222 to the right, improve=387.2327, (0 missing)
## Spa < 0.5 to the right, improve=349.1110, (0 missing)
## VRDeck < 0.5 to the right, improve=336.6729, (0 missing)
## ShoppingMall < 0.5 to the right, improve=207.4920, (0 missing)
## Surrogate splits:
## Spa < 0.5 to the right, agree=0.715, adj=0.185, (0 split)
## VRDeck < 0.5 to the right, agree=0.702, adj=0.148, (0 split)
## FoodCourt < 0.5 to the right, agree=0.700, adj=0.142, (0 split)
## RoomService < 0.5972222 to the right, agree=0.699, adj=0.138, (0 split)
## ShoppingMall < 0.5 to the right, agree=0.685, adj=0.099, (0 split)
##
## Node number 2: 3957 observations, complexity param=0.03697572
## predicted class=FALSE expected loss=0.3353551 P(node) =0.6502876
## class counts: 2630 1327
## probabilities: 0.665 0.335
## left son=4 (1008 obs) right son=5 (2949 obs)
## Primary splits:
## RoomService < 365.5 to the right, improve=94.13509, (0 missing)
## Age < 12.5 to the right, improve=88.06518, (0 missing)
## Spa < 241.5 to the right, improve=78.42037, (0 missing)
## FoodCourt < 2168 to the left, improve=62.77526, (0 missing)
## VRDeck < 420.5 to the right, improve=56.53137, (0 missing)
## Surrogate splits:
## HomePlanet splits as RRLR, agree=0.794, adj=0.191, (0 split)
## deck splits as RRRLRRRLR, agree=0.751, adj=0.023, (0 split)
## Age < 78.5 to the right, agree=0.746, adj=0.002, (0 split)
##
## Node number 3: 2128 observations
## predicted class=TRUE expected loss=0.1832707 P(node) =0.3497124
## class counts: 390 1738
## probabilities: 0.183 0.817
##
## Node number 4: 1008 observations
## predicted class=FALSE expected loss=0.1488095 P(node) =0.1656532
## class counts: 858 150
## probabilities: 0.851 0.149
##
## Node number 5: 2949 observations, complexity param=0.03697572
## predicted class=FALSE expected loss=0.3991183 P(node) =0.4846343
## class counts: 1772 1177
## probabilities: 0.601 0.399
## left son=10 (965 obs) right son=11 (1984 obs)
## Primary splits:
## Spa < 205 to the right, improve=122.17800, (0 missing)
## VRDeck < 135.5 to the right, improve= 97.03283, (0 missing)
## Age < 12.5 to the right, improve= 61.88060, (0 missing)
## ShoppingMall < 691.5 to the left, improve= 44.12198, (0 missing)
## FoodCourt < 2200.5 to the left, improve= 41.30443, (0 missing)
## Surrogate splits:
## HomePlanet splits as RLRR, agree=0.700, adj=0.083, (0 split)
## deck splits as LRLRRRRRR, agree=0.686, adj=0.040, (0 split)
## VRDeck < 4035.5 to the right, agree=0.677, adj=0.012, (0 split)
## FoodCourt < 3197.5 to the right, agree=0.676, adj=0.009, (0 split)
## Age < 65.5 to the right, agree=0.675, adj=0.006, (0 split)
##
## Node number 10: 965 observations
## predicted class=FALSE expected loss=0.1927461 P(node) =0.1585867
## class counts: 779 186
## probabilities: 0.807 0.193
##
## Node number 11: 1984 observations, complexity param=0.03697572
## predicted class=FALSE expected loss=0.499496 P(node) =0.3260477
## class counts: 993 991
## probabilities: 0.501 0.499
## left son=22 (645 obs) right son=23 (1339 obs)
## Primary splits:
## VRDeck < 233.5 to the right, improve=129.94320, (0 missing)
## FoodCourt < 2071 to the left, improve= 47.58535, (0 missing)
## HomePlanet splits as LRRL, improve= 38.86559, (0 missing)
## Age < 12.5 to the right, improve= 30.13728, (0 missing)
## ShoppingMall < 1248.5 to the left, improve= 28.16548, (0 missing)
## Surrogate splits:
## FoodCourt < 6836 to the right, agree=0.681, adj=0.020, (0 split)
## deck splits as RRLRRRRRL, agree=0.681, adj=0.019, (0 split)
## VIP splits as RLR, agree=0.677, adj=0.006, (0 split)
## RoomService < 361 to the right, agree=0.676, adj=0.005, (0 split)
## side splits as LRR-, agree=0.676, adj=0.003, (0 split)
##
## Node number 22: 645 observations, complexity param=0.01357616
## predicted class=FALSE expected loss=0.2387597 P(node) =0.1059984
## class counts: 491 154
## probabilities: 0.761 0.239
## left son=44 (578 obs) right son=45 (67 obs)
## Primary splits:
## FoodCourt < 2860.5 to the left, improve=48.108870, (0 missing)
## deck splits as LRRLLLL-R, improve=17.464090, (0 missing)
## HomePlanet splits as LRLL, improve=15.574760, (0 missing)
## VRDeck < 563 to the right, improve= 5.113637, (0 missing)
## side splits as RLR-, improve= 4.693095, (0 missing)
## Surrogate splits:
## Spa < 193 to the left, agree=0.899, adj=0.03, (0 split)
##
## Node number 23: 1339 observations
## predicted class=TRUE expected loss=0.3749066 P(node) =0.2200493
## class counts: 502 837
## probabilities: 0.375 0.625
##
## Node number 44: 578 observations
## predicted class=FALSE expected loss=0.1730104 P(node) =0.09498767
## class counts: 478 100
## probabilities: 0.827 0.173
##
## Node number 45: 67 observations
## predicted class=TRUE expected loss=0.1940299 P(node) =0.01101068
## class counts: 13 54
## probabilities: 0.194 0.806
## y_pred
## y_true FALSE TRUE
## 0 879 416
## 1 195 1118
## [1] 0.7657209
## Call:
## rpart(formula = Transported ~ ., data = train_set)
## n= 8693
##
## CP nsplit rel error xerror xstd
## 1 0.43244496 0 1.0000000 1.0000000 0.010803454
## 2 0.03437621 1 0.5675550 0.5675550 0.009719864
## 3 0.01000000 4 0.4644264 0.4743917 0.009167976
##
## Variable importance
## CryoSleep Spa VRDeck RoomService FoodCourt ShoppingMall
## 45 17 15 11 7 4
## HomePlanet
## 2
##
## Node number 1: 8693 observations, complexity param=0.432445
## predicted class=TRUE expected loss=0.4963764 P(node) =1
## class counts: 4315 4378
## probabilities: 0.496 0.504
## left son=2 (5656 obs) right son=3 (3037 obs)
## Primary splits:
## CryoSleep splits as LRL, improve=920.2004, (0 missing)
## RoomService < 0.5972222 to the right, improve=524.1859, (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.716, adj=0.187, (0 split)
## FoodCourt < 0.5 to the right, agree=0.701, adj=0.143, (0 split)
## VRDeck < 0.5 to the right, agree=0.696, adj=0.129, (0 split)
## RoomService < 0.5972222 to the right, agree=0.692, adj=0.119, (0 split)
## ShoppingMall < 0.5 to the right, agree=0.683, adj=0.092, (0 split)
##
## Node number 2: 5656 observations, complexity param=0.03437621
## predicted class=FALSE expected loss=0.3350424 P(node) =0.6506384
## class counts: 3761 1895
## probabilities: 0.665 0.335
## left son=4 (1453 obs) right son=5 (4203 obs)
## Primary splits:
## RoomService < 346.5 to the right, improve=120.27350, (0 missing)
## Spa < 266.5 to the right, improve=113.99320, (0 missing)
## Age < 12.5 to the right, improve=109.40550, (0 missing)
## FoodCourt < 1331 to the left, improve= 98.11980, (0 missing)
## VRDeck < 417.5 to the right, improve= 75.47684, (0 missing)
## Surrogate splits:
## HomePlanet splits as RRLR, agree=0.789, adj=0.178, (0 split)
## deck splits as RRRLRRRRR, agree=0.747, adj=0.015, (0 split)
## Age < 78.5 to the right, agree=0.743, adj=0.001, (0 split)
##
## Node number 3: 3037 observations
## predicted class=TRUE expected loss=0.1824169 P(node) =0.3493616
## class counts: 554 2483
## probabilities: 0.182 0.818
##
## Node number 4: 1453 observations
## predicted class=FALSE expected loss=0.1596696 P(node) =0.167146
## class counts: 1221 232
## probabilities: 0.840 0.160
##
## Node number 5: 4203 observations, complexity param=0.03437621
## predicted class=FALSE expected loss=0.3956698 P(node) =0.4834925
## class counts: 2540 1663
## probabilities: 0.604 0.396
## left son=10 (1385 obs) right son=11 (2818 obs)
## Primary splits:
## Spa < 205 to the right, improve=168.85850, (0 missing)
## VRDeck < 87.5 to the right, improve=129.93470, (0 missing)
## Age < 12.5 to the right, improve= 75.13576, (0 missing)
## FoodCourt < 2507.5 to the left, improve= 63.21254, (0 missing)
## ShoppingMall < 627 to the left, improve= 59.06597, (0 missing)
## Surrogate splits:
## HomePlanet splits as RLRR, agree=0.695, adj=0.074, (0 split)
## deck splits as LRLRRRRLR, agree=0.684, adj=0.042, (0 split)
## FoodCourt < 3197.5 to the right, agree=0.676, adj=0.017, (0 split)
## VRDeck < 2052 to the right, agree=0.672, adj=0.006, (0 split)
## Age < 75.5 to the right, agree=0.671, adj=0.003, (0 split)
##
## Node number 10: 1385 observations
## predicted class=FALSE expected loss=0.1935018 P(node) =0.1593236
## class counts: 1117 268
## probabilities: 0.806 0.194
##
## Node number 11: 2818 observations, complexity param=0.03437621
## predicted class=FALSE expected loss=0.4950319 P(node) =0.3241689
## class counts: 1423 1395
## probabilities: 0.505 0.495
## left son=22 (813 obs) right son=23 (2005 obs)
## Primary splits:
## VRDeck < 355 to the right, improve=186.83840, (0 missing)
## FoodCourt < 2069.5 to the left, improve= 64.16646, (0 missing)
## HomePlanet splits as LRRL, improve= 48.55098, (0 missing)
## ShoppingMall < 1248.5 to the left, improve= 38.41273, (0 missing)
## Age < 7.5 to the right, improve= 35.38317, (0 missing)
## Surrogate splits:
## FoodCourt < 10134.5 to the right, agree=0.714, adj=0.007, (0 split)
## Age < 68.5 to the right, agree=0.713, adj=0.004, (0 split)
## deck splits as RRLRRRRRR, agree=0.713, adj=0.004, (0 split)
## RoomService < 343 to the right, agree=0.712, adj=0.001, (0 split)
##
## Node number 22: 813 observations
## predicted class=FALSE expected loss=0.2091021 P(node) =0.09352352
## class counts: 643 170
## probabilities: 0.791 0.209
##
## Node number 23: 2005 observations
## predicted class=TRUE expected loss=0.3890274 P(node) =0.2306453
## class counts: 780 1225
## probabilities: 0.389 0.611