Bu derste, veri bilimi ve makine öğrenmesi adımlarını baştan sona uygulayacağımız bir proje üzerinde çalışacağız. Uygulama için Kaggle platformundaki “Spaceship Titanic” adlı sınıflandırma yarışmasını kullanacağız. Amaç, gerçek hayata benzer bir veri bilimi sürecini, baştan sona, mümkün olduğunca sistematik ve şeffaf bir şekilde deneyimlemek ve R programlama dilinde uygulama becerisi kazanmaktır.
Spaceship Titanic yarışmasında elimizde, kurgusal bir uzay gemisindeki yolculara ait bilgiler (yaş, kabin konumu, harcama kalemleri, aile yapısı vb.) ve bu yolcuların “anomali sonucunda taşınıp taşınmadığını” gösteren bir hedef değişken bulunmaktadır. Görevimiz, bu kayıtları kullanarak hangi yolcuların alternatif bir boyuta taşındığını tahmin eden bir makine öğrenmesi modeli kurmaktır.
Bu proje, veri ve senaryo kurgusal olsa da, karşılaşacağımız problemler (eksik veri, veri temizleme, değişken seçimi, model karşılaştırma, değerlendirme ölçütleri, vb.) gerçek veri bilimi projelerine oldukça benzemektedir.
Kaggle, veri bilimi ve makine öğrenmesi alanında kullanılan, yarışmaların, veri setlerinin ve örnek kodların paylaşıldığı bir çevrimiçi platformdur.
Kullanıcılar:
Kaggle, veri bilimi becerilerini geliştirmek, yeni teknikler öğrenmek ve gerçek dünya problemlerini çözmek için harika bir kaynaktır.
Spaceship Titanic yarışması, Kaggle platformunda bulunan ve katılımcıların bir uzay gemisindeki yolcuların alternatif bir boyuta taşınıp taşınmadığını tahmin etmeye çalıştığı bir sınıflandırma problemidir. Yarışmada verilen veri seti, yolcuların demografik bilgileri, seyahat detayları ve harcama alışkanlıkları gibi çeşitli özellikleri içermektedir.
Yarışmanın amacı, bu özellikleri kullanarak hangi yolcuların
taşındığını doğru bir şekilde tahmin eden bir makine öğrenmesi modeli
geliştirmektir. Katılımcılar, modellerini eğitmek ve değerlendirmek için
sağlanan eğitim train veri setini kullanabilir ve ardından
test test veri seti üzerinde tahminler yaparak
performanslarını ölçebilirler.
Yarışma, veri bilimi ve makine öğrenmesi becerilerini geliştirmek isteyenler için harika bir fırsat sunmaktadır. Katılımcılar, veri ön işleme, özellik mühendisliği, model seçimi ve değerlendirme gibi önemli adımları deneyimleyebilirler.
Daha fazla bilgi için yarışma sayfası:
Kaggle Spaceship Titanic:
Bu projede aşağıdaki adımları takip edeceğiz:
Bu adımları takip ederek, veri bilimi sürecini baştan sona deneyimlemiş olacağız ve R programlama dilinde uygulama becerilerimizi geliştireceğiz.
Veri setini anlamak için öncelikle gerekli kütüphaneleri yükleyelim ve veri setini R ortamına alalım. Ardından, veri setindeki değişkenleri ve hedef değişkeni inceleyerek, problemin doğasını anlayacağız.
# Gerekli kütüphaneleri yükleyelim
library(tidyverse)
library(readr)
library(rmarkdown)
# Veri setini R ortamına alalım
train <- read_csv("train.csv")
test <- read_csv("test.csv")
# Veri setini inceleyelim
paged_table(train)
paged_table(test)
Yukarıdaki tablolar, eğitim ve test veri setlerindeki değişkenleri ve örnek kayıtları göstermektedir. Eğitim veri setinde, yolcuların çeşitli özellikleri ve hedef değişken (Transported) bulunmaktadır. Test veri setinde ise hedef değişken bulunmamaktadır.
# Veri yapısını inceleme
glimpse(train)
## Rows: 8,693
## Columns: 14
## $ PassengerId <chr> "0001_01", "0002_01", "0003_01", "0003_02", "0004_01", "0…
## $ HomePlanet <chr> "Europa", "Earth", "Europa", "Europa", "Earth", "Earth", …
## $ CryoSleep <lgl> FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, TRUE, FA…
## $ Cabin <chr> "B/0/P", "F/0/S", "A/0/S", "A/0/S", "F/1/S", "F/0/P", "F/…
## $ Destination <chr> "TRAPPIST-1e", "TRAPPIST-1e", "TRAPPIST-1e", "TRAPPIST-1e…
## $ Age <dbl> 39, 24, 58, 33, 16, 44, 26, 28, 35, 14, 34, 45, 32, 48, 2…
## $ VIP <lgl> FALSE, FALSE, TRUE, FALSE, FALSE, FALSE, FALSE, FALSE, FA…
## $ RoomService <dbl> 0, 109, 43, 0, 303, 0, 42, 0, 0, 0, 0, 39, 73, 719, 8, 32…
## $ FoodCourt <dbl> 0, 9, 3576, 1283, 70, 483, 1539, 0, 785, 0, 0, 7295, 0, 1…
## $ ShoppingMall <dbl> 0, 25, 0, 371, 151, 0, 3, 0, 17, 0, NA, 589, 1123, 65, 12…
## $ Spa <dbl> 0, 549, 6715, 3329, 565, 291, 0, 0, 216, 0, 0, 110, 0, 0,…
## $ VRDeck <dbl> 0, 44, 49, 193, 2, 0, 0, NA, 0, 0, 0, 124, 113, 24, 7, 0,…
## $ Name <chr> "Maham Ofracculy", "Juanna Vines", "Altark Susent", "Sola…
## $ Transported <lgl> FALSE, TRUE, FALSE, FALSE, TRUE, TRUE, TRUE, TRUE, TRUE, …
glimpse(), dplyr/tidyverse paketinin
sağladığı, bir veri çerçevesinin (data frame veya
tibble) yapısını hızlı ve okunabilir bir şekilde
görüntülemek için kullanılan bir fonksiyondur. Bu fonksiyon, veri
setindeki her bir sütunun (değişkenin) adını, veri tipini ve ilk birkaç
değerini gösterir. Böylece, veri setinin genel yapısını ve içeriğini
hızlıca anlayabiliriz.
Veriyi doğru işlemek ve uygun makine öğrenmesi modellerini kullanmak için değişken türlerini anlamak kritik öneme sahiptir. glimpse() çıktısında göreceğimiz temel veri türleri şunlardır:
dbl Numeric (Sayısal): Gerçek sayıları
temsil eder (ör. 23.7, 0.45, 117.0). Spaceship Titanic Örnekleri, yaş
(Age), harcama miktarları (RoomService, FoodCourt vb.) gibi.chr Character (Karakter): Metin veya
kategorik veriler içeren değişkenlerdir. Çoğu zaman kategorik
değişkenler başlangıçta chr olarak gelir ve modelleme aşamasında faktöre
dönüştürülmesi gerekebilir. Spaceship Titanic Örnekleri: PassengerId,
HomePlanet, Cabin vb.lgl Logical (Mantıksal): TRUE veya
FALSE değerlerini alabilen değişkenlerdir. Örneğin, hedef değişkenimiz
Transported bu türdedir.int Integer (Tam Sayı): Tam sayıları
temsil eder (ör. 1, 42, -7). Örneğin, Age değişkeni tam sayılar
içerebilir.fct Factor (Kategori): Kategorik
verilerin R’daki özel veri türüdür. chr türündeki değişkenler modelleme
aşamasında as.factor() ile faktöre dönüştürülerek daha
etkin şekilde kullanılabilir.# Eksik değer analizi
colSums(is.na(train))
## PassengerId HomePlanet CryoSleep Cabin Destination Age
## 0 201 217 199 182 179
## VIP RoomService FoodCourt ShoppingMall Spa VRDeck
## 203 181 183 208 183 188
## Name Transported
## 200 0
Yukarıdaki kod, eğitim veri setindeki her bir sütunda (değişkende) eksik (NA) değerlerin sayısını hesaplar ve görüntüler. Bu analiz, veri setindeki eksik verilerin hangi değişkenlerde yoğunlaştığını ve ne kadar eksik veri olduğunu anlamamıza yardımcı olur. Eksik veriler, veri ön işleme aşamasında ele alınması gereken önemli bir konudur, çünkü eksik veriler model performansını olumsuz etkileyebilir.
Veri setindeki değişkenlerin türlerine göre değerlendirilmesi, veri ön işleme sürecinde önemli bir adımdır. Farklı türdeki değişkenler için farklı işlemler ve dönüşümler gerekebilir. Aşağıda, veri setindeki değişkenleri türlerine göre nasıl değerlendirebileceğimiz ve işleyebileceğimiz hakkında genel bir rehber bulunmaktadır:
Sayısal Değişkenler (Numeric - dbl, int):
Kategorik Değişkenler (Character - chr, Factor - fct):
as.factor() fonksiyonu ile yapılabilir.Mantıksal Değişkenler (Logical - lgl):
Tarih ve Zaman Değişkenleri:
Hedef Değişken (Dependent Variable):
# Her değişken için unique değer sayısını gösterelim
train %>%
summarise(across(everything(), ~ n_distinct(.)))
## # A tibble: 1 × 14
## PassengerId HomePlanet CryoSleep Cabin Destination Age VIP RoomService
## <int> <int> <int> <int> <int> <int> <int> <int>
## 1 8693 4 3 6561 4 81 3 1274
## # ℹ 6 more variables: FoodCourt <int>, ShoppingMall <int>, Spa <int>,
## # VRDeck <int>, Name <int>, Transported <int>
Yukarıdaki kod, eğitim veri setindeki her bir sütun (değişken) için benzersiz (unique) değerlerin sayısını hesaplar ve görüntüler. Bu analiz, her değişkenin kaç farklı kategori veya değer içerdiğini anlamamıza yardımcı olur. Özellikle kategorik değişkenler için bu bilgi, modelleme aşamasında hangi değişkenlerin kullanılabileceği ve nasıl işleneceği konusunda önemli ipuçları sağlar. Örneğin, çok fazla benzersiz değere sahip kategorik değişkenler, modelin karmaşıklığını artırabilir ve overfitting riskini yükseltebilir. Bu nedenle, bu tür analizler veri ön işleme sürecinde kritik bir rol oynar.
# Kategorik değişkenleri faktöre dönüştürelim
train <- train %>%
mutate(across(c(HomePlanet, CryoSleep, Destination, VIP, Transported), as.factor))
test <- test %>%
mutate(across(c(HomePlanet, CryoSleep, Destination, VIP), as.factor))
Yukarıdaki kod, eğitim ve test veri setlerindeki belirli kategorik
değişkenleri faktör (factor) türüne dönüştürür. mutate()
fonksiyonu ile across() kullanılarak belirtilen sütunlar
(HomePlanet, CryoSleep,
Destination, VIP, ve Transported
eğitim setinde; HomePlanet, CryoSleep,
Destination, ve VIP test setinde)
as.factor() fonksiyonu ile faktöre dönüştürülür. Bu
dönüşüm, modelleme aşamasında bu değişkenlerin doğru şekilde işlenmesini
sağlar, çünkü birçok makine öğrenmesi algoritması kategorik değişkenleri
faktör olarak bekler.
summary(train)
## PassengerId HomePlanet CryoSleep Cabin
## Length:8693 Earth :4602 FALSE:5439 Length:8693
## Class :character Europa:2131 TRUE :3037 Class :character
## Mode :character Mars :1759 NA's : 217 Mode :character
## NA's : 201
##
##
##
## Destination Age VIP RoomService
## 55 Cancri e :1800 Min. : 0.00 FALSE:8291 Min. : 0.0
## PSO J318.5-22: 796 1st Qu.:19.00 TRUE : 199 1st Qu.: 0.0
## TRAPPIST-1e :5915 Median :27.00 NA's : 203 Median : 0.0
## NA's : 182 Mean :28.83 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
## Length:8693 FALSE:4315
## Class :character TRUE :4378
## Mode :character
##
##
##
##
Yukarıdaki kod, eğitim veri setindeki her bir değişken için özet
istatistikleri görüntüler. summary() fonksiyonu, sayısal
değişkenler için minimum, maksimum, ortalama, medyan ve çeyrek değerler
gibi temel istatistikleri sağlar. Kategorik değişkenler için ise her bir
kategoriye ait frekans dağılımını gösterir. Bu özet bilgiler, veri
setinin genel yapısını ve özelliklerini anlamamıza yardımcı olur ve veri
ön işleme sürecinde hangi adımların atılması gerektiği konusunda önemli
ipuçları sunar. Örneğin, eksik değerlerin varlığı, aykırı değerler veya
dengesiz kategorik dağılımlar gibi konular bu özetler aracılığıyla
tespit edilebilir.
Faktöre dönüştürülmesi binlerce kategori yaratacağından model tarafından öğrenilebilecek bir yapıya katkı sağlamaz.Bu nedenle doğrudan bir kategorik değişken olarak kullanılması uygun değildir.
Ancak PassengerId, yapısı gereği önemli ve çıkarımlara elverişli bilgiler taşır.
Kaggle’ın tanımına göre: PassengerId her yolcu için benzersiz bir numaradır.Bu numara gggg_pp biçimindedir. Buradaki gggg, yolcunun birlikte seyahat ettiği grubu gösterir; pp ise grubun içindeki kişi sırasıdır. Grup içindeki kişiler çoğunlukla aile üyeleridir, ancak her zaman böyle olmak zorunda değildir.
Bu yapı sayesinde PassengerId’nin kendisini kategorik olarak kullanmasak bile, içindeki alt bilgileri çıkartarak yeni açıklayıcı değişkenler (features) oluşturabiliriz.
# PassengerId'den grup numarası ve kişi sırasını çıkaralım
train <- train %>%
separate(PassengerId, into = c("Grup_No", "Kisi_No"), sep = "_", remove = FALSE) %>%
mutate(Grup_No = as.factor(Grup_No),
Kisi_No = as.integer(Kisi_No))
test <- test %>%
separate(PassengerId, into = c("Grup_No", "Kisi_No"), sep = "_", remove = FALSE) %>%
mutate(Grup_No = as.factor(Grup_No),
Kisi_No = as.integer(Kisi_No))
Yukarıdaki kod, PassengerId sütununu iki yeni sütuna
ayırır: Grup_No ve Kisi_No.
separate() fonksiyonu kullanılarak,
PassengerId içindeki “gggg_pp” formatına göre ayırma işlemi
gerçekleştirilir. Ardından, mutate() fonksiyonu ile
Grup_No faktör (factor) türüne dönüştürülürken,
Kisi_No tam sayı (integer) türüne dönüştürülür. Bu yeni
değişkenler, yolcuların birlikte seyahat ettiği grupları ve grup
içindeki kişi sırasını temsil eder ve modelleme aşamasında açıklayıcı
değişkenler olarak kullanılabilir.
head(train %>% select(PassengerId, Grup_No, Kisi_No))
## # A tibble: 6 × 3
## PassengerId Grup_No Kisi_No
## <chr> <fct> <int>
## 1 0001_01 0001 1
## 2 0002_01 0002 1
## 3 0003_01 0003 1
## 4 0003_02 0003 2
## 5 0004_01 0004 1
## 6 0005_01 0005 1
Bu sayede iki yeni değişken elde ettik:
• Grup_No: Yolcunun ait olduğu seyahat grubunu gösterir.
• Kisi_No: Grubun içindeki kişi sırasını gösterir.
Bu yeni değişkenler, yolcuların birlikte seyahat edip etmediklerini ve grup içindeki konumlarını anlamamıza yardımcı olabilir. Bu bilgiler, modelin performansını artırmak için kullanılabilir. Örneğin:
• Tek başına seyahat edenlerin davranışları farklı olabilir.
• Aile grupları benzer cabin, homeplanet ve destination bilgilerine sahiptir.
• Grup içindeki kişi sayısı, taşınma olasılığı üzerinde etkili olabilir.
train <- train %>%
group_by(Grup_No) %>%
mutate(Grup_Buyuklugu = n()) %>%
ungroup()
test <- test %>%
group_by(Grup_No) %>%
mutate(Grup_Buyuklugu= n()) %>%
ungroup()
Yukarıdaki kod, Grup_No değişkenine göre gruplama yapar
ve her grup içindeki yolcu sayısını hesaplayarak yeni bir sütun olan
Grup_Buyuklugu oluşturur. group_by(Grup_No)
ile yolcuları gruplar, ardından
mutate(Grup_Buyuklugu = n()) ile her grup için yolcu
sayısını belirler. Son olarak, ungroup() ile gruplamayı
kaldırır. Bu yeni değişken, her yolcunun ait olduğu grubun büyüklüğünü
temsil eder ve modelleme aşamasında açıklayıcı bir özellik olarak
kullanılabilir. Grup büyüklüğü, taşınma olasılığı üzerinde etkili
olabilir; örneğin, daha büyük gruplar birlikte hareket etme eğiliminde
olabilir.
head(train %>% select(PassengerId, Grup_Buyuklugu), 10)
## # A tibble: 10 × 2
## PassengerId Grup_Buyuklugu
## <chr> <int>
## 1 0001_01 1
## 2 0002_01 1
## 3 0003_01 2
## 4 0003_02 2
## 5 0004_01 1
## 6 0005_01 1
## 7 0006_01 2
## 8 0006_02 2
## 9 0007_01 1
## 10 0008_01 3
# Kişi yalnız mı seyahat ediyor?
train <- train %>%
mutate(Yalniz_Seyahat = ifelse(Grup_Buyuklugu == 1, 1, 0))
test <- test %>%
mutate(Yalniz_Seyahat = ifelse(Grup_Buyuklugu == 1, 1, 0))
Yukarıdaki kod, her yolcunun yalnız seyahat edip etmediğini belirten
yeni bir sütun olan Yalniz_Seyahat oluşturur.
mutate() fonksiyonu kullanılarak,
Grup_Buyuklugu değişkeni kontrol edilir; eğer grup
büyüklüğü 1 ise (yani yolcu tek başına seyahat ediyorsa),
Yalniz_Seyahat değeri 1 olarak atanır, aksi takdirde 0
olarak atanır. Bu yeni değişken, modelleme aşamasında açıklayıcı bir
özellik olarak kullanılabilir ve yalnız seyahat eden yolcuların taşınma
olasılığı üzerindeki etkisini incelemek için faydalı olabilir.
table(train$Grup_Buyuklugu)
##
## 1 2 3 4 5 6 7 8
## 4805 1682 1020 412 265 174 231 104
train <- train %>%
mutate(Grup_Buyuklugu_Kat = case_when(
Grup_Buyuklugu %in% c(1, 2, 3) ~ as.character(Grup_Buyuklugu),
Grup_Buyuklugu >= 4 ~ "4+"
)) %>%
mutate(Grup_Buyuklugu_Kat = factor(Grup_Buyuklugu_Kat))
table(train$Grup_Buyuklugu_Kat)
##
## 1 2 3 4+
## 4805 1682 1020 1186
Yukarıdaki kod, Grup_Buyuklugu değişkenini kategorik bir
değişkene dönüştürerek Grup_Buyuklugu_Kat adlı yeni bir
sütun oluşturur. case_when() fonksiyonu kullanılarak, grup
büyüklüğü 1, 2 veya 3 olan yolcular için bu değerler korunur; ancak grup
büyüklüğü 4 veya daha fazla olan yolcular için “4+” kategorisi atanır.
Ardından, mutate() ile Grup_Buyuklugu_Kat
faktör (factor) türüne dönüştürülür. Bu yeni kategorik değişken,
modelleme aşamasında açıklayıcı bir özellik olarak kullanılabilir ve
farklı grup büyüklüklerinin taşınma olasılığı üzerindeki etkisini
incelemek için faydalı olabilir. Son olarak, table()
fonksiyonu ile bu yeni kategorik değişkenin frekans dağılımı
görüntülenir.
test <- test %>%
mutate(Grup_Buyuklugu_Kat = case_when(
Grup_Buyuklugu %in% c(1, 2, 3) ~ as.character(Grup_Buyuklugu),
Grup_Buyuklugu >= 4 ~ "4+"
)) %>%
mutate(Grup_Buyuklugu_Kat = factor(Grup_Buyuklugu_Kat))
Cabin değişkeni, yolcuların kabin konumlarını temsil eder ve genellikle “Deck/Numara/Side” formatında kodlanmıştır. Bu değişken, yolcuların gemideki konumları hakkında önemli bilgiler içerebilir ve modelleme aşamasında açıklayıcı bir özellik olarak kullanılabilir.
# Cabin'den Deck, Numara ve Side bilgilerini çıkaralım
train <- train %>%
separate(Cabin, into = c("Deck", "Numara", "Side"), sep = "/", remove = FALSE) %>%
mutate(Deck = as.factor(Deck),
Side = as.factor(Side),
Numara = as.integer(Numara))
test <- test %>%
separate(Cabin, into = c("Deck", "Numara", "Side"), sep = "/", remove = FALSE) %>%
mutate(Deck = as.factor(Deck),
Side = as.factor(Side),
Numara = as.integer(Numara))
Yukarıdaki kod, Cabin sütununu üç yeni sütuna ayırır:
Deck, Numara ve Side.
separate() fonksiyonu kullanılarak, Cabin
içindeki “Deck/Numara/Side” formatına göre ayırma işlemi
gerçekleştirilir. Ardından, mutate() fonksiyonu ile
Deck ve Side faktör (factor) türüne
dönüştürülürken, Numara tam sayı (integer) türüne
dönüştürülür. Bu yeni değişkenler, yolcuların gemideki konumlarını
temsil eder ve modelleme aşamasında açıklayıcı değişkenler olarak
kullanılabilir. Örneğin, belirli bir güvertede (deck) veya tarafta
(side) seyahat eden yolcuların taşınma olasılıkları farklı olabilir.
head(train %>% select(Cabin, Deck, Numara, Side))
## # A tibble: 6 × 4
## Cabin Deck Numara Side
## <chr> <fct> <int> <fct>
## 1 B/0/P B 0 P
## 2 F/0/S F 0 S
## 3 A/0/S A 0 S
## 4 A/0/S A 0 S
## 5 F/1/S F 1 S
## 6 F/0/P F 0 P
Bu sayede üç yeni değişken elde ettik:
• Deck: Yolcunun kabin güvertesini gösterir.
• Numara: Kabin numarasını gösterir.
• Side: Kabinin gemideki tarafını (sol/sağ) gösterir.
Bu yeni değişkenler, yolcuların gemideki konumlarını anlamamıza yardımcı olabilir. Bu bilgiler, modelin performansını artırmak için kullanılabilir. Örneğin:
• Bazı güverteler veya taraflar, anomaliye karşı daha savunmasız olabilir.
• Kabin numarası, yolcunun gemideki konumunu ve dolayısıyla taşınma olasılığını etkileyebilir.
summary(train %>% select(Deck, Numara, Side))
## Deck Numara Side
## F :2794 Min. : 0.0 P :4206
## G :2559 1st Qu.: 167.2 S :4288
## E : 876 Median : 427.0 NA's: 199
## B : 779 Mean : 600.4
## C : 747 3rd Qu.: 999.0
## (Other): 739 Max. :1894.0
## NA's : 199 NA's :199
table(train$Deck)
##
## A B C D E F G T
## 256 779 747 478 876 2794 2559 5
# A, D ve T güvertelerinde çok az yolcu var, bunları "Diğer" kategorisine alalım
train <- train %>%
mutate(Deck = fct_collapse(Deck,
Diğer = c("A", "D", "T")))
test <- test %>%
mutate(Deck = fct_collapse(Deck,
Diğer = c("A", "D", "T")))
Yukarıdaki kod, Deck değişkenindeki az sayıda gözleme
sahip olan “A”, “D” ve “T” kategorilerini “Diğer” adlı yeni bir kategori
altında birleştirir. fct_collapse() fonksiyonu
kullanılarak, belirtilen kategoriler tek bir kategoriye dönüştürülür. Bu
işlem, modelleme aşamasında nadir kategorilerin etkisini azaltmak ve
modelin genelleme yeteneğini artırmak için faydalı olabilir. Özellikle,
az sayıda gözleme sahip kategoriler modelin öğrenme sürecini olumsuz
etkileyebilir, bu nedenle bu tür kategorilerin birleştirilmesi yaygın
bir uygulamadır.
summary(train$Deck)
## Diğer B C E F G NA's
## 739 779 747 876 2794 2559 199
Name değişkeni, yolcuların isimlerini içerir ve genellikle kişisel bilgileri temsil eder. Bu değişken, doğrudan modelleme aşamasında kullanılmaktan ziyade, içindeki bilgileri çıkartarak yeni açıklayıcı değişkenler (features) oluşturmak için kullanılabilir.
# Name ad ve soyad bilgilerini çıkaralım
train <- train %>%
separate(Name, into = c("Ad", "Soyad"), sep = " ", remove = FALSE)
test <- test %>%
separate(Name, into = c("Ad", "Soyad"), sep = " ", remove = FALSE)
Yukarıdaki kod, Name sütununu iki yeni sütuna ayırır:
Soyad ve Ad. separate()
fonksiyonu kullanılarak, Name içindeki boşluk karakterine
göre ayırma işlemi gerçekleştirilir. Bu yeni değişkenler, yolcuların
isimlerini temsil eder ve modelleme aşamasında açıklayıcı değişkenler
olarak kullanılabilir. Örneğin, belirli bir soyada sahip yolcuların
taşınma olasılıkları farklı olabilir veya belirli adlara sahip
yolcuların demografik özellikleri üzerinde analizler yapılabilir.
head(train %>% select(Name, Soyad, Ad))
## # A tibble: 6 × 3
## Name Soyad Ad
## <chr> <chr> <chr>
## 1 Maham Ofracculy Ofracculy Maham
## 2 Juanna Vines Vines Juanna
## 3 Altark Susent Susent Altark
## 4 Solam Susent Susent Solam
## 5 Willy Santantines Santantines Willy
## 6 Sandie Hinetthews Hinetthews Sandie
Bu sayede iki yeni değişken elde ettik:
• Soyad: Yolcunun soyadını gösterir.
• Ad: Yolcunun adını gösterir.
Bu yeni değişkenler, yolcuların isimlerini anlamamıza yardımcı olabilir. Bu bilgiler, modelin performansını artırmak için kullanılabilir. Örneğin: • Bazı soyadlar belirli demografik gruplarla ilişkilendirilebilir. • Adlar, kültürel veya coğrafi kökenler hakkında ipuçları verebilir.
Veri setindeki eksik (NA) değerlerin doldurulması, veri ön işleme sürecinde kritik bir adımdır. Eksik veriler, model performansını olumsuz etkileyebilir, bu nedenle uygun yöntemlerle doldurulmaları önemlidir.
Yolcuların gezegen bilgisi olan HomePlanet değişkeninde eksik değerler bulunmaktadır. Bu eksik değerleri doldurmak için, yolcuların diğer özelliklerine (örneğin, Cabin, Destination) dayanarak en olası gezegeni atayabiliriz.
Home_Planet_GrupNO_bilgi <- train %>%
group_by(Grup_No) %>%
summarize(
grup_kac_kisi = n(),
kacinin_HP_bilgisi_bos = sum(is.na(HomePlanet)),
kacinin_HP_bilgisi_dolu = sum(!is.na(HomePlanet)),
Grup_kac_farkli_HP = n_distinct(HomePlanet, na.rm = TRUE)
) %>%
ungroup()
head(Home_Planet_GrupNO_bilgi)
## # A tibble: 6 × 5
## Grup_No grup_kac_kisi kacinin_HP_bilgisi_bos kacinin_HP_bilgisi_dolu
## <fct> <int> <int> <int>
## 1 0001 1 0 1
## 2 0002 1 0 1
## 3 0003 2 0 2
## 4 0004 1 0 1
## 5 0005 1 0 1
## 6 0006 2 0 2
## # ℹ 1 more variable: Grup_kac_farkli_HP <int>
Yukarıdaki kod, train veri setindeki yolcuları
Grup_No değişkenine göre gruplar ve her grup için çeşitli
istatistikleri hesaplar. summarize() fonksiyonu
kullanılarak, her grup içindeki toplam yolcu sayısı
(grup_kac_kisi), HomePlanet bilgisi eksik olan yolcu sayısı
(kacinin_HP_bilgisi_bos), HomePlanet bilgisi dolu olan
yolcu sayısı (kacinin_HP_bilgisi_dolu) ve grup içindeki
farklı HomePlanet sayısı (Grup_kac_farkli_HP) hesaplanır.
Son olarak, ungroup() ile gruplama kaldırılır. Bu özet
bilgiler, HomePlanet değişkenindeki eksik değerleri doldurmak için
kullanılabilir ve her grubun gezegen bilgisi hakkında daha iyi bir
anlayış sağlar.
table(Home_Planet_GrupNO_bilgi$Grup_kac_farkli_HP)
##
## 0 1
## 110 6107
grup_0 <- Home_Planet_GrupNO_bilgi %>%
filter(Grup_kac_farkli_HP == 0)
# Bu gruplarda kaç tane dolu HP var?
sum(grup_0$kacinin_HP_bilgisi_dolu)
## [1] 0
Yukarıdaki kod, Home_Planet_GrupNO_bilgi veri setinden
Grup_kac_farkli_HP değeri 0 olan grupları filtreler ve
grup_0 adlı yeni bir veri seti oluşturur.
Bu, 0 farklı HomePlanet görülen 110 grubun tamamında gerçekten hiç HP kaydı olmadığını ispatlar.
grup_1 <- Home_Planet_GrupNO_bilgi %>%
filter(Grup_kac_farkli_HP == 1)
Yukarıdaki kod, Home_Planet_GrupNO_bilgi veri setinden
Grup_kac_farkli_HP değeri 1 olan grupları filtreler ve
grup_1 adlı yeni bir veri seti oluşturur. Bu gruplar,
HomePlanet bilgisi eksik olan yolcuların bulunduğu ancak grup içindeki
diğer yolcuların HomePlanet bilgisi dolu olduğu gruplardır. Bu bilgi,
eksik HomePlanet değerlerini doldurmak için kullanılabilir, çünkü aynı
gruptaki diğer yolcuların gezegen bilgisi, eksik olan yolcular için en
olası değeri belirlemeye yardımcı olabilir.
# Bu grupların içindeki HomePlanet değerlerini görelim
table(grup_1$Grup_kac_farkli_HP, useNA = "ifany")
##
## 1
## 6107
Yukarıdaki kod, grup_1 veri setindeki
Grup_kac_farkli_HP değişkeninin frekans dağılımını
görüntüler. table() fonksiyonu kullanılarak, bu grupların
içindeki HomePlanet değerlerinin dağılımı ve eksik (NA) değerlerin
varlığı hakkında bilgi edinilir. useNA = "ifany"
parametresi, eğer varsa eksik değerlerin de tabloya dahil edilmesini
sağlar. Bu analiz, eksik HomePlanet değerlerini doldurmak için
kullanılabilecek en olası gezegenleri belirlemeye yardımcı olabilir.
Bir grupta dolu HomePlanet varsa tüm üyelerde aynıdır. Aynı grupta iki farklı gezegen asla görülmemiştir. Bu nedenle, eksik HomePlanet değerlerini doldurmak için grup içindeki dolu HomePlanet değerini kullanabiliriz.
# Doldurmadan önce/sonra kaç NA vardı görmek istersen:
sum(is.na(train$HomePlanet)) # şu anki NA sayısı
## [1] 201
# 1) Her grup için referans HomePlanet bilgisini çıkaralım
hp_referans_train <- train %>%
group_by(Grup_No) %>%
summarise(
Grup_HP = HomePlanet[!is.na(HomePlanet)][1], # gruptaki ilk dolu HomePlanet
.groups = "drop"
)
hp_referans_test <- test %>%
group_by(Grup_No) %>%
summarise(
Grup_HP = HomePlanet[!is.na(HomePlanet)][1], # gruptaki ilk dolu HomePlanet
.groups = "drop"
)
head(hp_referans_train)
## # A tibble: 6 × 2
## Grup_No Grup_HP
## <fct> <fct>
## 1 0001 Europa
## 2 0002 Earth
## 3 0003 Europa
## 4 0004 Earth
## 5 0005 Earth
## 6 0006 Earth
Yukarıdaki kod, train veri setindeki yolcuları
Grup_No değişkenine göre gruplar ve her grup için ilk dolu
HomePlanet değerini çıkararak hp_referans_train adlı yeni
bir veri seti oluşturur. summarise() fonksiyonu
kullanılarak, her grup içindeki HomePlanet bilgisi eksik olmayan ilk
değeri (Grup_HP) belirlenir. .groups = "drop"
parametresi, gruplama işleminin ardından gruplama yapısını kaldırır. Bu
referans HomePlanet bilgisi, eksik HomePlanet değerlerini doldurmak için
kullanılabilir.
# 2) Orijinal train veri seti ile bu referans bilgiyi birleştirelim
train <- train %>%
left_join(hp_referans_train, by = "Grup_No")
test <- test %>%
left_join(hp_referans_test, by = "Grup_No")
head(train %>% select(PassengerId, HomePlanet, Grup_HP))
## # A tibble: 6 × 3
## PassengerId HomePlanet Grup_HP
## <chr> <fct> <fct>
## 1 0001_01 Europa Europa
## 2 0002_01 Earth Earth
## 3 0003_01 Europa Europa
## 4 0003_02 Europa Europa
## 5 0004_01 Earth Earth
## 6 0005_01 Earth Earth
Yukarıdaki kod, train ve test veri
setlerine hp_referans_train ve
hp_referans_test veri setlerinden elde edilen referans
HomePlanet bilgilerini ekler. left_join() fonksiyonu
kullanılarak, her iki veri seti Grup_No değişkeni üzerinden
birleştirilir. Bu işlem sonucunda, her yolcunun ait olduğu grubun
referans HomePlanet bilgisi (Grup_HP) orijinal veri setine
eklenir. Bu yeni bilgi, eksik HomePlanet değerlerini doldurmak için
kullanılabilir.
# 3) Eksik HomePlanet değerlerini dolduralım
train <- train %>%
mutate(HomePlanet = coalesce(HomePlanet, Grup_HP)) %>%
select(-Grup_HP)
test <- test %>%
mutate(HomePlanet = coalesce(HomePlanet, Grup_HP)) %>%
select(-Grup_HP) # artık gerek yok, silebiliriz
Yukarıdaki kod, train ve test veri
setlerindeki eksik (NA) HomePlanet değerlerini doldurur.
mutate() fonksiyonu kullanılarak, ifelse() ile
HomePlanet değeri eksik olan yolcular için Grup_HP (grup
referans HomePlanet) değeri atanır; eğer HomePlanet değeri dolu ise
mevcut değeri korunur. Ardından, select(-Grup_HP) ile artık
ihtiyaç duyulmayan Grup_HP sütunu veri setinden kaldırılır.
Bu işlem sonucunda, HomePlanet değişkenindeki eksik değerler uygun
şekilde doldurulmuş olur.
# Doldurduktan sonra kaç NA kaldı görmek istersen:
sum(is.na(train$HomePlanet)) # doldurduktan sonraki NA sayısı
## [1] 111
soyad_planet_analizi <- train %>%
group_by(Soyad) %>%
summarise(
soyad_kac_kisi = n(),
kac_farkli_HP = n_distinct(HomePlanet, na.rm = TRUE),
hangi_HP = paste(unique(HomePlanet[!is.na(HomePlanet)]), collapse = ", "),
.groups = "drop"
)
head(soyad_planet_analizi)
## # A tibble: 6 × 4
## Soyad soyad_kac_kisi kac_farkli_HP hangi_HP
## <chr> <int> <int> <chr>
## 1 Acobson 4 1 "Earth"
## 2 Acobsond 3 1 "Earth"
## 3 Adavisons 9 1 "Earth"
## 4 Adkinson 3 1 "Earth"
## 5 Admingried 4 1 "Europa"
## 6 Ageurante 1 0 ""
Yukarıdaki kod, train veri setindeki yolcuları
Soyad değişkenine göre gruplar ve her soyad için çeşitli
istatistikleri hesaplar. summarise() fonksiyonu
kullanılarak, her soyad içindeki toplam yolcu sayısı
(soyad_kac_kisi), farklı HomePlanet sayısı
(kac_farkli_HP) ve dolu HomePlanet değerlerinin birleşik
bir listesini (hangi_HP) oluşturur.
na.rm = TRUE parametresi, eksik (NA) değerlerin
hesaplamalara dahil edilmemesini sağlar. Son olarak,
.groups = "drop" ile gruplama kaldırılır. Bu özet bilgiler,
soyad bazında HomePlanet dağılımını anlamamıza yardımcı olur ve eksik
HomePlanet değerlerini doldurmak için kullanılabilir.
table(soyad_planet_analizi$kac_farkli_HP)
##
## 0 1 3
## 7 2210 1
Soyad bazında HomePlanet tutarlılığını incelediğimizde 2210 farklı soyadın tamamının yalnızca tek bir gezegenden geldiği görülmüştür. Bu, soyadın aile yapısını doğru şekilde temsil ettiğini ve eksik HomePlanet değerlerini soyad bazında doldurmanın mantıklı olduğunu destekler.
Ancak analizde yalnızca bir özel durum ortaya çıkmaktadır: Soyad = NA olan yolcuların bulunduğu tek grup, üç farklı gezegenden gelen kişiler içermektedir. Bu durum soyad bilgisi tamamen eksik olan bu kişilerin aslında bir soyadı paylaşmadıklarını, sadece soyadları bulunmadığı için aynı kategoriye düştüklerini göstermektedir. Bu nedenle bu grup, bir aileyi temsil etmez ve HomePlanet açısından tutarsız görünmesi tamamen beklenen bir durumdur.
Bu bulgu, gerçek soyadı olan yolcular arasında herhangi bir tutarsızlık olmadığını ve soyadının aile ilişkilerini temsil etmek için güvenilir bir değişken olduğunu doğrulamaktadır.
hp_referans_soyad <- soyad_planet_analizi %>%
filter(kac_farkli_HP == 1) %>%
select(Soyad, Soyad_HP = hangi_HP)
head(hp_referans_soyad)
## # A tibble: 6 × 2
## Soyad Soyad_HP
## <chr> <chr>
## 1 Acobson Earth
## 2 Acobsond Earth
## 3 Adavisons Earth
## 4 Adkinson Earth
## 5 Admingried Europa
## 6 Aginge Europa
# Orijinal train veri seti ile bu referans bilgiyi birleştirelim
train <- train %>%
left_join(hp_referans_soyad, by = "Soyad")
test <- test %>%
left_join(hp_referans_soyad, by = "Soyad")
# Dolduralım
train <- train %>%
mutate(HomePlanet = coalesce(HomePlanet, Soyad_HP)) %>%
select(-Soyad_HP)
test <- test %>%
mutate(HomePlanet = coalesce(HomePlanet, Soyad_HP)) %>%
select(-Soyad_HP) # Soyad_HP gerek yok, silebiliriz
Yukarıdaki kod, train ve test veri
setlerine hp_referans_soyad veri setinden elde edilen
referans HomePlanet bilgilerini ekler. left_join()
fonksiyonu kullanılarak, her iki veri seti Soyad değişkeni
üzerinden birleştirilir. Bu işlem sonucunda, her yolcunun soyadına
karşılık gelen referans HomePlanet bilgisi (Soyad_HP)
orijinal veri setine eklenir. Ardından, mutate() fonksiyonu
ile ifelse() kullanılarak HomePlanet değeri eksik olan
yolcular için Soyad_HP değeri atanır; eğer HomePlanet
değeri dolu ise mevcut değeri korunur. Son olarak,
select(-Soyad_HP) ile artık ihtiyaç duyulmayan
Soyad_HP sütunu veri setinden kaldırılır. Bu işlem
sonucunda, HomePlanet değişkenindeki eksik değerler uygun şekilde
doldurulmuş olur.
# Doldurduktan sonra kaç NA kaldı görmek istersen:
sum(is.na(train$HomePlanet))
## [1] 12
sum(is.na(test$HomePlanet))
## [1] 7
Home_Planet_Deck_bilgi <- train %>%
group_by(Deck) %>%
summarize(
grup_kac_kisi = n(),
kacinin_HP_bilgisi_bos = sum(is.na(HomePlanet)),
kacinin_HP_bilgisi_dolu = sum(!is.na(HomePlanet)),
Grup_kac_farkli_HP = n_distinct(HomePlanet, na.rm = TRUE),
hangi_HP = paste(unique(HomePlanet[!is.na(HomePlanet)]), collapse = ", "),
) %>%
ungroup()
Home_Planet_Deck_bilgi
## # A tibble: 7 × 6
## Deck grup_kac_kisi kacinin_HP_bilgisi_bos kacinin_HP_bilgisi_dolu
## <fct> <int> <int> <int>
## 1 Diğer 739 2 737
## 2 B 779 0 779
## 3 C 747 1 746
## 4 E 876 1 875
## 5 F 2794 6 2788
## 6 G 2559 2 2557
## 7 <NA> 199 0 199
## # ℹ 2 more variables: Grup_kac_farkli_HP <int>, hangi_HP <chr>
Yukarıdaki kod, train veri setindeki yolcuları
Deck değişkenine göre gruplar ve her güverte için çeşitli
istatistikleri hesaplar. summarize() fonksiyonu
kullanılarak, her güverte içindeki toplam yolcu sayısı
(grup_kac_kisi), HomePlanet bilgisi eksik olan yolcu sayısı
(kacinin_HP_bilgisi_bos), HomePlanet bilgisi dolu olan
yolcu sayısı (kacinin_HP_bilgisi_dolu), farklı HomePlanet
sayısı (Grup_kac_farkli_HP) ve dolu HomePlanet değerlerinin
birleşik bir listesini (hangi_HP) oluşturur.
na.rm = TRUE parametresi, eksik (NA) değerlerin
hesaplamalara dahil edilmemesini sağlar. Son olarak,
ungroup() ile gruplama kaldırılır. Bu özet bilgiler, Deck
değişkeni bazında HomePlanet dağılımını anlamamıza yardımcı olur ve
eksik HomePlanet değerlerini doldurmak için kullanılabilir. B ve C,
Europa gezegeninden yolcuların, G ise Earth yolcularının konakladığı
Deckler.
# Deck bazında dolduralım
hp_referans_deck <- Home_Planet_Deck_bilgi %>%
filter(Grup_kac_farkli_HP == 1) %>%
select(Deck, Deck_HP = hangi_HP)
head(hp_referans_deck)
## # A tibble: 3 × 2
## Deck Deck_HP
## <fct> <chr>
## 1 B Europa
## 2 C Europa
## 3 G Earth
# Orijinal train veri seti ile bu referans bilgiyi birleştirelim
train <- train %>%
left_join(hp_referans_deck, by = "Deck")
test <- test %>%
left_join(hp_referans_deck, by = "Deck")
# Dolduralım
train <- train %>%
mutate(HomePlanet = coalesce(HomePlanet, Deck_HP)) %>%
select(-Deck_HP)
test <- test %>%
mutate(HomePlanet = coalesce(HomePlanet, Deck_HP)) %>%
select(-Deck_HP) # artık gerek yok, silebiliriz
# Doldurduktan sonra kaç NA kaldı görmek istersen:
sum(is.na(train$HomePlanet))
## [1] 9
sum(is.na(test$HomePlanet))
## [1] 5
table(train$HomePlanet)
##
## Earth Europa Mars
## 4707 2173 1804
train <- train %>%
mutate(HomePlanet = coalesce(HomePlanet, "Earth"))
test <- test %>%
mutate(HomePlanet = coalesce(HomePlanet, "Earth"))
Yukarıdaki kod, train ve test veri
setlerindeki eksik (NA) HomePlanet değerlerini “Earth” olarak doldurur.
mutate() fonksiyonu kullanılarak, coalesce()
ile HomePlanet değeri eksik olan yolcular için “Earth” değeri atanır;
eğer HomePlanet değeri dolu ise mevcut değeri korunur. Bu işlem
sonucunda, HomePlanet değişkenindeki tüm eksik değerler uygun şekilde
doldurulmuş olur.
sum(is.na(train$HomePlanet))
## [1] 0
sum(is.na(test$HomePlanet))
## [1] 0
train$HomePlanet <- as.factor(train$HomePlanet)
test$HomePlanet <- as.factor(test$HomePlanet)
Destination değişkeni, yolcuların varış noktalarını temsil eder ve bazı eksik değerlere sahiptir. Bu eksik değerleri doldurmak için, yolcuların diğer özelliklerine (örneğin, HomePlanet, Cabin) dayanarak en olası varış noktasını atayabiliriz.
Dest_deck_bilgi <- train %>%
group_by(Deck) %>%
summarize(
grup_kac_kisi = n(),
kacinin_D_bilgisi_bos = sum(is.na(Destination)),
kacinin_D_bilgisi_dolu = sum(!is.na(Destination)),
Grup_kac_farkli_D = n_distinct(Destination, na.rm = TRUE),
hangi_D = paste(unique(Destination[!is.na(Destination)]), collapse = ", "),
) %>%
ungroup()
table(Dest_deck_bilgi$Grup_kac_farkli_D)
##
## 3
## 7
Yukarıdaki kod, train veri setindeki yolcuları
Grup_No değişkenine göre gruplar ve her grup için çeşitli
istatistikleri hesaplar. summarize() fonksiyonu
kullanılarak, her grup içindeki toplam yolcu sayısı
(grup_kac_kisi), Destination bilgisi eksik olan yolcu
sayısı (kacinin_D_bilgisi_bos), Destination bilgisi dolu
olan yolcu sayısı (kacinin_D_bilgisi_dolu), farklı
Destination sayısı (Grup_kac_farkli_D) ve dolu Destination
değerlerinin birleşik bir listesini (hangi_D) oluşturur.
na.rm = TRUE parametresi, eksik (NA) değerlerin
hesaplamalara dahil edilmemesini sağlar. Son olarak,
ungroup() ile gruplama kaldırılır. Bu özet bilgiler,
Destination değişkenindeki eksik değerleri doldurmak için yeterli
değil.
Dest_Ad_bilgi <- train %>%
group_by(Ad) %>%
summarize(
grup_kac_kisi = n(),
kacinin_D_bilgisi_bos = sum(is.na(Destination)),
kacinin_D_bilgisi_dolu = sum(!is.na(Destination)),
Grup_kac_farkli_D = n_distinct(Destination, na.rm = TRUE),
hangi_D = paste(unique(Destination[!is.na(Destination)]), collapse = ", "),
) %>%
ungroup() %>%
filter(grup_kac_kisi > 1)
table(Dest_Ad_bilgi$Grup_kac_farkli_D)
##
## 1 2 3
## 770 1054 270
Dest_Soyad_bilgi <- train %>%
group_by(Soyad) %>%
summarize(
grup_kac_kisi = n(),
kacinin_D_bilgisi_bos = sum(is.na(Destination)),
kacinin_D_bilgisi_dolu = sum(!is.na(Destination)),
Grup_kac_farkli_D = n_distinct(Destination, na.rm = TRUE),
hangi_D = paste(unique(Destination[!is.na(Destination)]), collapse = ", "),
) %>%
ungroup() %>%
filter(grup_kac_kisi > 1)
table(Dest_Soyad_bilgi$Grup_kac_farkli_D)
##
## 1 2 3
## 620 948 268
Belirli bir ada veya soyada sahip yolcuların varış noktaları genellikle tutarlı değil.
library(rpart)
library(rpart.plot)
dt_model <- rpart(
Destination ~ HomePlanet + Deck + Side + Age + CryoSleep + VIP + RoomService +
FoodCourt + ShoppingMall + Spa + VRDeck + Grup_Buyuklugu_Kat+ Yalniz_Seyahat,
data = train %>% filter(!is.na(Destination)),
method = "class",
cp = 0.00221
)
dt_small <- rpart(
Destination ~ HomePlanet + Deck + Side + Age + CryoSleep + VIP + RoomService +
FoodCourt + ShoppingMall + Spa + VRDeck + Grup_Buyuklugu_Kat+ Yalniz_Seyahat,
data = train %>% filter(!is.na(Destination)),
method = "class",
cp = 0.002,
)
rpart.plot(
dt_small
)
Yukarıdaki kod, karar ağacı (decision tree) modeli oluşturmak için
rpart paketini kullanır. rpart() fonksiyonu
ile Destination değişkenini tahmin etmek için bir model
kurulur. Modelde açıklayıcı değişkenler olarak HomePlanet,
Deck, Side, Age,
CryoSleep, VIP, RoomService,
FoodCourt, ShoppingMall, Spa,
VRDeck, Grup_Buyuklugu_Kat ve
Yalniz_Seyahat kullanılır. Model, yalnızca
Destination değeri eksik olmayan yolcular üzerinde eğitilir
(filter(!is.na(Destination))).
method = "class" parametresi, sınıflandırma problemi
olduğunu belirtir ve cp = 0.00221 parametresi, modelin
karmaşıklığını kontrol eden bir kesme parametresidir.