Veri setine erişmek için titanic sitesini ziyaret edebilirsiniz.

1.Veri Seti Hikayesi/Tanımı ve Amaçlar

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.

AMAÇ: Veri incelemesi yapıldıktan sonra uygun olan model seçilerek veri setindeki yolcuların hayatta kalma durumunu tahmin etmek

2. Kütüphanelerin Yüklenmesi

3.Veri Setini Yükleme (Tidy Süreci)

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"…

3.1 Degisken Donusumleri ve Turlerinin Ayarlanmasi

## 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

3.2 test-train ayrımı

4.Feature engineering

4.1 Keşifsel Veri Analizi

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

4.2 eksik verilerin yapısını inceleme ve Eksik veri sorununu giderme

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

5. Model Kurma

Target değişkeni olarak Survived’ı kullanarak Random Forest modeli kuracağım

5.1 Train Tahmin

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.

5.2 Test Tahmini

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

5.3 Hatanı Matrisinin Görselleştirilmesi

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.