Veri setine erişmek için titanic sitesini ziyaret edebilirsiniz.
Titanic veri seti, Titanic gemisinin yolcularına ait bazı bilgileri içeren bir veri setidir. Veri seti, gemide bulunan her yolcu için aşağıdaki değişkenleri içermektedir:
PassengerId: Yolcu kimlik numarası
Survived: Hayatta kalma durumu (0 = hayatta kalmadı, 1 = hayatta kaldı)
Pclass: Bilet sınıfı (1 = 1. sınıf, 2 = 2. sınıf, 3 = 3. sınıf)
Name: Yolcunun adı
Sex: Yolcunun cinsiyeti (male = erkek, female = kadın)
Age: Yolcunun yaşı
SibSp: Titanic’te bulunan kardeş/eş sayısı
Parch : Titanic’te bulunan ebeveyn/çocuk sayısı
Ticket: Bilet numarası
Fare : Yolcu ücreti
Cabin: Yolcunun kabin numarası
Embarked: Yolcunun bindiği liman (C = Cherbourg, Q = Queenstown, S = Southampton)
Bu değişkenler, Titanic veri setinde bulunan tüm sütunların tanımını oluşturur.
Verinin değişkenleri
## [1] "PassengerId" "Survived" "Pclass" "Name" "Sex"
## [6] "Age" "SibSp" "Parch" "Ticket" "Fare"
## [11] "Cabin" "Embarked"
df %>%
glimpse()
## Rows: 891
## Columns: 12
## $ PassengerId <dbl> 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17,…
## $ Survived <dbl> 0, 1, 1, 1, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 1, 0, 1, 0, 1…
## $ Pclass <dbl> 3, 1, 3, 1, 3, 3, 1, 3, 3, 2, 3, 1, 3, 3, 3, 2, 3, 2, 3, 3…
## $ Name <chr> "Braund, Mr. Owen Harris", "Cumings, Mrs. John Bradley (Fl…
## $ Sex <chr> "male", "female", "female", "female", "male", "male", "mal…
## $ Age <dbl> 22, 38, 26, 35, 35, NA, 54, 2, 27, 14, 4, 58, 20, 39, 14, …
## $ SibSp <dbl> 1, 1, 0, 1, 0, 0, 0, 3, 0, 1, 1, 0, 0, 1, 0, 0, 4, 0, 1, 0…
## $ Parch <dbl> 0, 0, 0, 0, 0, 0, 0, 1, 2, 0, 1, 0, 0, 5, 0, 0, 1, 0, 0, 0…
## $ Ticket <chr> "A/5 21171", "PC 17599", "STON/O2. 3101282", "113803", "37…
## $ Fare <dbl> 7.2500, 71.2833, 7.9250, 53.1000, 8.0500, 8.4583, 51.8625,…
## $ Cabin <chr> NA, "C85", NA, "C123", NA, NA, "E46", NA, NA, NA, "G6", "C…
## $ Embarked <chr> "S", "C", "S", "S", "S", "Q", "S", "S", "S", "C", "S", "S"…
## spc_tbl_ [891 × 12] (S3: spec_tbl_df/tbl_df/tbl/data.frame)
## $ PassengerId: num [1:891] 1 2 3 4 5 6 7 8 9 10 ...
## $ Survived : Factor w/ 2 levels "0","1": 1 2 2 2 1 1 1 1 2 2 ...
## $ Pclass : Factor w/ 3 levels "1","2","3": 3 1 3 1 3 3 1 3 3 2 ...
## $ Name : chr [1:891] "Braund, Mr. Owen Harris" "Cumings, Mrs. John Bradley (Florence Briggs Thayer)" "Heikkinen, Miss. Laina" "Futrelle, Mrs. Jacques Heath (Lily May Peel)" ...
## $ Sex : Factor w/ 2 levels "female","male": 2 1 1 1 2 2 2 2 1 1 ...
## $ Age : num [1:891] 22 38 26 35 35 NA 54 2 27 14 ...
## $ SibSp : num [1:891] 1 1 0 1 0 0 0 3 0 1 ...
## $ Parch : num [1:891] 0 0 0 0 0 0 0 1 2 0 ...
## $ Ticket : chr [1:891] "A/5 21171" "PC 17599" "STON/O2. 3101282" "113803" ...
## $ Fare : num [1:891] 7.25 71.28 7.92 53.1 8.05 ...
## $ Cabin : chr [1:891] NA "C85" NA "C123" ...
## $ Embarked : Factor w/ 3 levels "C","Q","S": 3 1 3 3 3 2 3 3 3 1 ...
## - attr(*, "spec")=
## .. cols(
## .. PassengerId = col_double(),
## .. Survived = col_double(),
## .. Pclass = col_double(),
## .. Name = col_character(),
## .. Sex = col_character(),
## .. Age = col_double(),
## .. SibSp = col_double(),
## .. Parch = col_double(),
## .. Ticket = col_character(),
## .. Fare = col_double(),
## .. Cabin = col_character(),
## .. Embarked = col_character()
## .. )
## - attr(*, "problems")=<externalptr>
test train ayrımı yapmadan veriye bakalım
## Rows: 891
## Columns: 12
## $ PassengerId <dbl> 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17,…
## $ Survived <fct> 0, 1, 1, 1, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 1, 0, 1, 0, 1…
## $ Pclass <fct> 3, 1, 3, 1, 3, 3, 1, 3, 3, 2, 3, 1, 3, 3, 3, 2, 3, 2, 3, 3…
## $ Name <chr> "Braund, Mr. Owen Harris", "Cumings, Mrs. John Bradley (Fl…
## $ Sex <fct> male, female, female, female, male, male, male, male, fema…
## $ Age <dbl> 22, 38, 26, 35, 35, NA, 54, 2, 27, 14, 4, 58, 20, 39, 14, …
## $ SibSp <dbl> 1, 1, 0, 1, 0, 0, 0, 3, 0, 1, 1, 0, 0, 1, 0, 0, 4, 0, 1, 0…
## $ Parch <dbl> 0, 0, 0, 0, 0, 0, 0, 1, 2, 0, 1, 0, 0, 5, 0, 0, 1, 0, 0, 0…
## $ Ticket <chr> "A/5 21171", "PC 17599", "STON/O2. 3101282", "113803", "37…
## $ Fare <dbl> 7.2500, 71.2833, 7.9250, 53.1000, 8.0500, 8.4583, 51.8625,…
## $ Cabin <chr> NA, "C85", NA, "C123", NA, NA, "E46", NA, NA, NA, "G6", "C…
## $ Embarked <fct> S, C, S, S, S, Q, S, S, S, C, S, S, S, S, S, S, Q, S, S, C…
## variable mean std_dev variation_coef p_01 p_05 p_25
## 1 PassengerId 446.0000000 257.3538420 0.5770266 9.9 45.500 223.5000
## 2 Age 29.6991176 14.5264973 0.4891222 1.0 4.000 20.1250
## 3 SibSp 0.5230079 1.1027434 2.1084644 0.0 0.000 0.0000
## 4 Parch 0.3815937 0.8060572 2.1123441 0.0 0.000 0.0000
## 5 Fare 32.2042080 49.6934286 1.5430725 0.0 7.225 7.9104
## p_50 p_75 p_95 p_99 skewness kurtosis iqr range_98
## 1 446.0000 668.5 846.5000 882.1000 0.0000000 1.799997 445.0000 [9.9, 882.1]
## 2 28.0000 38.0 56.0000 65.8700 0.3882899 3.168637 17.8750 [1, 65.87]
## 3 0.0000 1.0 3.0000 5.0000 3.6891277 20.773512 1.0000 [0, 5]
## 4 0.0000 0.0 2.0000 4.0000 2.7444867 12.716613 0.0000 [0, 4]
## 5 14.4542 31.0 112.0791 249.0062 4.7792533 36.204289 23.0896 [0, 249.00622]
## range_80
## 1 [90, 802]
## 2 [14, 50]
## 3 [0, 1]
## 4 [0, 2]
## 5 [7.55, 77.9583]
sürekli değişkenlerin tümünün min,median,range vs vs detaylı istatistikleri
## PassengerId Survived Pclass Name Sex Age SibSp
## nbr.val 8.910000e+02 NA NA NA NA 7.140000e+02 891.00000000
## nbr.null 0.000000e+00 NA NA NA NA 0.000000e+00 608.00000000
## nbr.na 0.000000e+00 NA NA NA NA 1.770000e+02 0.00000000
## min 1.000000e+00 NA NA NA NA 4.200000e-01 0.00000000
## max 8.910000e+02 NA NA NA NA 8.000000e+01 8.00000000
## range 8.900000e+02 NA NA NA NA 7.958000e+01 8.00000000
## sum 3.973860e+05 NA NA NA NA 2.120517e+04 466.00000000
## median 4.460000e+02 NA NA NA NA 2.800000e+01 0.00000000
## mean 4.460000e+02 NA NA NA NA 2.969912e+01 0.52300786
## SE.mean 8.621678e+00 NA NA NA NA 5.436405e-01 0.03694329
## CI.mean.0.95 1.692119e+01 NA NA NA NA 1.067328e+00 0.07250613
## var 6.623100e+04 NA NA NA NA 2.110191e+02 1.21604308
## std.dev 2.573538e+02 NA NA NA NA 1.452650e+01 1.10274343
## coef.var 5.770266e-01 NA NA NA NA 4.891222e-01 2.10846437
## Parch Ticket Fare Cabin Embarked
## nbr.val 891.00000000 NA 891.000000 NA NA
## nbr.null 678.00000000 NA 15.000000 NA NA
## nbr.na 0.00000000 NA 0.000000 NA NA
## min 0.00000000 NA 0.000000 NA NA
## max 6.00000000 NA 512.329200 NA NA
## range 6.00000000 NA 512.329200 NA NA
## sum 340.00000000 NA 28693.949300 NA NA
## median 0.00000000 NA 14.454200 NA NA
## mean 0.38159371 NA 32.204208 NA NA
## SE.mean 0.02700393 NA 1.664792 NA NA
## CI.mean.0.95 0.05299881 NA 3.267377 NA NA
## var 0.64972824 NA 2469.436846 NA NA
## std.dev 0.80605722 NA 49.693429 NA NA
## coef.var 2.11234407 NA 1.543073 NA NA
Train veri setine genel olarak bakalım
## PassengerId Survived Pclass Name Sex
## Min. : 1.0 0:433 1:167 Length:713 female:248
## 1st Qu.:217.0 1:280 2:156 Class :character male :465
## Median :435.0 3:390 Mode :character
## Mean :441.2
## 3rd Qu.:665.0
## Max. :891.0
##
## Age SibSp Parch Ticket
## Min. : 0.42 Min. :0.0000 Min. :0.0000 Length:713
## 1st Qu.:21.00 1st Qu.:0.0000 1st Qu.:0.0000 Class :character
## Median :28.00 Median :0.0000 Median :0.0000 Mode :character
## Mean :29.54 Mean :0.5035 Mean :0.3338
## 3rd Qu.:38.00 3rd Qu.:1.0000 3rd Qu.:0.0000
## Max. :80.00 Max. :8.0000 Max. :5.0000
## NA's :140
## Fare Cabin Embarked
## Min. : 0.000 Length:713 C :134
## 1st Qu.: 7.925 Class :character Q : 61
## Median : 14.454 Mode :character S :516
## Mean : 31.428 NA's: 2
## 3rd Qu.: 29.700
## Max. :512.329
##
sütunlardaki çeşitlere bakalım
## PassengerId Survived Pclass Name Sex Age
## 713 2 3 713 2 85
## SibSp Parch Ticket Fare Cabin Embarked
## 7 6 574 228 122 4
nicel değişkenlerin histogramlarına bakalım
grafikten kadınların erkeklere oranla hayatta kalma şansının
daha fazla olduğunu söyleyebiliriz
1. sınıf yolcu olmanın size daha fazla hayatta kalma şansı
verdiğine dair net bir eğilim var.
Pclass 3’e doğru gidildikçe yaş ortalaması azalmaktadır. 2. ve 3. Pclass’larda aykırı değerler vardır.
Gemide 1-3 kardeş/eş/ebeveyn/çocuk olması (SibSp = 1-2, Parch =
1-3), yalnız kalmaktan (SibSp + Parch = 0) veya geniş bir aileye sahip
olmaktan orantılı olarak daha iyi hayatta kalma sayıları
önerir. Geniş aile sahip veya yalnız kişiler daha
şanssızdr
# Üç boyutlu scatter plot oluşturma
scatter_3d <- ggplot(train, aes(x = Age, y = Parch, z = factor(Survived), color = factor(Survived))) +
geom_point() +
labs(x = "PARCH", y = "Ücret", z = "Hayatta Kalma Durumu", color = "Hayatta Kalma Durumu") +
ggtitle("Yaş, Parch ve Hayatta Kalma Durumu")
scatter_3d_interactive <- ggplotly(scatter_3d)
scatter_3d_interactive
ho: eksik veriler rastgele dağılmıştır.
h1: eksik veriler rastgele dağılmamıştır.
## # A tibble: 1 × 4
## statistic df p.value missing.patterns
## <dbl> <dbl> <dbl> <int>
## 1 465. 43 0 5
p.value<0.5 ho kabul edilemez. sonuç: %5 anlamlılık düzeyinde eksik veriler rastgele dağılmamıştır.
testin sonucunun doğruluğunu anlayabilmek ve çözüm bulabilmek için aşağıdaki adımlar izlendi.
eksikliklerin hangi sütunlarda olduğunu görelim
## PassengerId Survived Pclass Name Sex Age
## 0 0 0 0 0 140
## SibSp Parch Ticket Fare Cabin Embarked
## 0 0 0 0 557 2
DEĞİŞKENLER İÇİN EKSİK DEĞER ORANI
## variable q_zeros p_zeros q_na p_na q_inf p_inf type unique
## 1 PassengerId 0 0.00 0 0.00 0 0 numeric 891
## 2 Survived 549 61.62 0 0.00 0 0 factor 2
## 3 Pclass 0 0.00 0 0.00 0 0 factor 3
## 4 Name 0 0.00 0 0.00 0 0 character 891
## 5 Sex 0 0.00 0 0.00 0 0 factor 2
## 6 Age 0 0.00 177 19.87 0 0 numeric 88
## 7 SibSp 608 68.24 0 0.00 0 0 numeric 7
## 8 Parch 678 76.09 0 0.00 0 0 numeric 7
## 9 Ticket 0 0.00 0 0.00 0 0 character 681
## 10 Fare 15 1.68 0 0.00 0 0 numeric 248
## 11 Cabin 0 0.00 687 77.10 0 0 character 147
## 12 Embarked 0 0.00 2 0.22 0 0 factor 3
## variable q_na p_na
## 1 PassengerId 0 0.00
## 2 Survived 0 0.00
## 3 Pclass 0 0.00
## 4 Name 0 0.00
## 5 Sex 0 0.00
## 6 Age 177 19.87
## 7 SibSp 0 0.00
## 8 Parch 0 0.00
## 9 Ticket 0 0.00
## 10 Fare 0 0.00
## 11 Cabin 687 77.10
## 12 Embarked 2 0.22
## PassengerId Survived Pclass Name Sex SibSp Parch Ticket Fare Embarked Age
## 183 1 1 1 1 1 1 1 1 1 1 1
## 529 1 1 1 1 1 1 1 1 1 1 1
## 19 1 1 1 1 1 1 1 1 1 1 0
## 158 1 1 1 1 1 1 1 1 1 1 0
## 2 1 1 1 1 1 1 1 1 1 0 1
## 0 0 0 0 0 0 0 0 0 2 177
## Cabin
## 183 1 0
## 529 0 1
## 19 1 1
## 158 0 2
## 2 1 1
## 687 866
cabin için 77 oranında eksik gözlem var. Bu oran çok fazla. Yani eksiklikten ziyade yokluk olduğunu görüyruz.Bu yüzden bu değişkeni silmek en iyi çözümdür.
Embarked için eksiklik gözardı edilecek kadar azdır. Bu yüzden en çok tekrar eden ile basit atama yöntemi ile doldurabiliriz
##
## C Q S
## 134 61 516
Age değişkeni için eksiklik oranı 19.87’dir. Yaş değişkeni
bizim için önemli olduğundan ve oran yüksek olmadığından bu eksiklikler
doldurulmalıdır. Age değişkeninin dağılımına
bakmalıyız.
Age değişkenindeki eksik değerleri randomForest ile doldurmaya karar verdim Age değişkeni için eksik değer sorunu çözüldü
## [1] 0
Eksik değerleri doldurduktan sonra dağılımına tekrar
bakalım
Target değişkeni olarak Survived’ı kullanarak Random Forest modeli kuracağım
Modeli kurduktan sonra ilk olarak Train veri seti üzerinden tahmin yaptım.
## Predicted
## Actual 0 1
## 0 422 11
## 1 52 228
## [1] "Accuracy: 0.91164095371669"
Doğruluk 0.91 bulunmuştur.
Kurduğum model ile test veri seti üzerinde de tahmin yapacağım. Bunun için ilk olarak test verisi üzerinde de düzenlemeler yapıldı
## [1] 0
Kurduğum model ile test verisi üzerinde yaptığım tahminler ve gerçek değerler karşılaştırılarak Confusion Matrix oluşturdum. Ve Accuracy’im 0.87dir
## Predicted
## Actual 0 1
## 0 106 10
## 1 11 51
## [1] "Accuracy: 0.882022471910112"
## Confusion Matrix and Statistics
##
## Reference
## Prediction 0 1
## 0 106 10
## 1 11 51
##
## Accuracy : 0.882
## 95% CI : (0.8253, 0.9255)
## No Information Rate : 0.6573
## P-Value [Acc > NIR] : 5.818e-12
##
## Kappa : 0.7391
##
## Mcnemar's Test P-Value : 1
##
## Sensitivity : 0.9060
## Specificity : 0.8361
## Pos Pred Value : 0.9138
## Neg Pred Value : 0.8226
## Prevalence : 0.6573
## Detection Rate : 0.5955
## Detection Prevalence : 0.6517
## Balanced Accuracy : 0.8710
##
## 'Positive' Class : 0
##
Gerçek değerler ve tahminlerin bir arada olduğu iki sütundan oluşan bir veriseti oluşturdum.Bu veri setinin ilk 5 satırı şu şekildedir.
## Actual Predicted
## 1 0 0
## 2 0 0
## 3 1 1
## 4 0 0
## 5 1 0
## 6 0 1
Hata matrisi oluşturarak onu görselleştirdim. Hatalı tahminler kırmızı renkte gösteriliyor ve doğru tahminler mavi renkte görüntüleniyor.