SPACESHIP TITANIC

UZAY GEMİSİ TİTANİK

Predict which passengers are transported to an alternate dimension

Hangi yolcuların alternatif bir boyuta taşınacağını tahmin edin.

Welcome to the year 2912, where your data science skills are needed to solve a cosmic mystery. We’ve received a transmission from four lightyears away and things aren’t looking good.

Kozmik bir gizemi çözmek için veri bilimi becerilerinize ihtiyaç duyulan 2912 yılına hoş geldiniz. Dört ışıkyılı uzaklıktan bir ileti aldık ve işler pek iyi görünmüyor.

The Spaceship Titanic was an interstellar passenger liner launched a month ago. With almost 13,000 passengers on board, the vessel set out on its maiden voyage transporting emigrants from our solar system to three newly habitable exoplanets orbiting nearby stars.

Uzay Gemisi Titanik, bir ay önce fırlatılan yıldızlararası bir yolcu gemisiydi. Gemide yaklaşık 13.000 yolcu bulunan gemi, güneş sistemimizdeki göçmenleri yakın yıldızların yörüngesinde bulunan yeni yaşanabilir üç dış gezegene taşımak üzere ilk yolculuğuna çıktı.

While rounding Alpha Centauri en route to its first destination—the torrid 55 Cancri E—the unwary Spaceship Titanic collided with a spacetime anomaly hidden within a dust cloud. Sadly, it met a similar fate as its namesake from 1000 years before. Though the ship stayed intact, almost half of the passengers were transported to an alternate dimension!

Tedbirsiz Uzay gemisi Titanic, Alpha Centauri'yi ilk hedefine (kızgın 55 Cancri E) doğru giderken, gizlenmiş bir uzay-zaman anormalliğiyle çarpıştı. bir toz bulutunun içinde. 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ı!

To help rescue crews and retrieve the lost passengers, you are challenged to predict which passengers were transported by the anomaly using records recovered from the spaceship’s damaged computer system.

Kurtarma ekiplerine yardımcı olmak ve kayıp yolcuları geri almak için, uzay gemisinin hasarlı bilgisayar sisteminden elde edilen kayıtları kullanarak anormallik nedeniyle hangi yolcuların taşındığını tahmin etmeniz gerekiyor.

Help save them and change history!

Onları kurtarmaya ve geçmişi değiştirmeye yardım edin!

Veri setlerimiz olan Train ve Test’i yükleyelim.

Train datamızı yükleyelim.

library(readr)
train <- read_csv("train.csv")
## Rows: 8693 Columns: 14
## ── Column specification ────────────────────────────────────────────────────────
## Delimiter: ","
## chr (5): PassengerId, HomePlanet, Cabin, Destination, Name
## dbl (6): Age, RoomService, FoodCourt, ShoppingMall, Spa, VRDeck
## lgl (3): CryoSleep, VIP, Transported
## 
## ℹ Use `spec()` to retrieve the full column specification for this data.
## ℹ Specify the column types or set `show_col_types = FALSE` to quiet this message.

Yükleme sonucunda Train datamızda 8693 tane gözlem ve 14 tane değişkenimiz olduğunu görüyoruz.

Train datamızdaki gözlemlerin anlamları şöyledir:

train.csv: Yolcuların yaklaşık üçte ikisinin (~8700) kişisel kayıtları, eğitim verileri olarak kullanılacak

PassengerId: Her yolcu için benzersiz bir Kimlik. Her kimlik, yolcunun birlikte seyahat ettiği grubu belirten ve grup içindeki numarası olan gggg_ppformu alır . Bir gruptaki insanlar çoğunlukla aile üyeleridir, ancak her zaman değil.ggggpp

HomePlanet:Yolcunun ayrıldığı gezegen, genellikle daimi ikamet ettikleri gezegen.

CryoSleep: Yolcunun yolculuk süresince askıya alınmış animasyona alınmayı seçip seçmediğini belirtir. Dondurucu uykudaki yolcular kabinlerine hapsedilir.

Cabin: Yolcunun kaldığı kabin numarası. deck/num/sideİskele sideveya PSancak formunu alır . _ _ S_

Destination: Yolcunun ineceği gezegen.

Age: Yolcunun yaşı.

VIP:Yolcunun yolculuk sırasında özel VIP hizmeti için ödeme yapıp yapmadığı.

RoomService, FoodCourt, ShoppingMall, Spa, VRDeck:Yolcunun Uzay Gemisi Titanic'in birçok lüks olanağının her birinde fatura ettiği tutar.

Name: Yolcunun adı ve soyadı.

Transported: Yolcunun başka bir boyuta taşınıp taşınmadığı. Bu hedeftir, tahmin etmeye çalıştığınız sütundur.

Test datamızı yükleyelim.

library(readr)
test<- read_csv("test.csv")
## Rows: 4277 Columns: 13
## ── Column specification ────────────────────────────────────────────────────────
## Delimiter: ","
## chr (5): PassengerId, HomePlanet, Cabin, Destination, Name
## dbl (6): Age, RoomService, FoodCourt, ShoppingMall, Spa, VRDeck
## lgl (2): CryoSleep, VIP
## 
## ℹ Use `spec()` to retrieve the full column specification for this data.
## ℹ Specify the column types or set `show_col_types = FALSE` to quiet this message.

Yükleme sonucunda Test datamızda 4277 tane gözlem ve 13 tane değişkenimiz olduğunu görüyoruz.

test.csv:Yolcuların geri kalan üçte birinin (~4300) kişisel kayıtları, test verisi olarak kullanılacak. 

Transported:Göreviniz bu setteki yolcular için değerini tahmin etmektir .

Veri setlerindeki veri türlerimizi inceleyelim.

Train datamızdaki veri türlerimizi incelemek için str paketinden yardım alıyoruz.

str(train)
## spc_tbl_ [8,693 × 14] (S3: spec_tbl_df/tbl_df/tbl/data.frame)
##  $ PassengerId : chr [1:8693] "0001_01" "0002_01" "0003_01" "0003_02" ...
##  $ HomePlanet  : chr [1:8693] "Europa" "Earth" "Europa" "Europa" ...
##  $ CryoSleep   : logi [1:8693] FALSE FALSE FALSE FALSE FALSE FALSE ...
##  $ Cabin       : chr [1:8693] "B/0/P" "F/0/S" "A/0/S" "A/0/S" ...
##  $ Destination : chr [1:8693] "TRAPPIST-1e" "TRAPPIST-1e" "TRAPPIST-1e" "TRAPPIST-1e" ...
##  $ Age         : num [1:8693] 39 24 58 33 16 44 26 28 35 14 ...
##  $ VIP         : logi [1:8693] FALSE FALSE TRUE FALSE FALSE FALSE ...
##  $ RoomService : num [1:8693] 0 109 43 0 303 0 42 0 0 0 ...
##  $ FoodCourt   : num [1:8693] 0 9 3576 1283 70 ...
##  $ ShoppingMall: num [1:8693] 0 25 0 371 151 0 3 0 17 0 ...
##  $ Spa         : num [1:8693] 0 549 6715 3329 565 ...
##  $ VRDeck      : num [1:8693] 0 44 49 193 2 0 0 NA 0 0 ...
##  $ Name        : chr [1:8693] "Maham Ofracculy" "Juanna Vines" "Altark Susent" "Solam Susent" ...
##  $ Transported : logi [1:8693] FALSE TRUE FALSE FALSE TRUE TRUE ...
##  - attr(*, "spec")=
##   .. cols(
##   ..   PassengerId = col_character(),
##   ..   HomePlanet = col_character(),
##   ..   CryoSleep = col_logical(),
##   ..   Cabin = col_character(),
##   ..   Destination = col_character(),
##   ..   Age = col_double(),
##   ..   VIP = col_logical(),
##   ..   RoomService = col_double(),
##   ..   FoodCourt = col_double(),
##   ..   ShoppingMall = col_double(),
##   ..   Spa = col_double(),
##   ..   VRDeck = col_double(),
##   ..   Name = col_character(),
##   ..   Transported = col_logical()
##   .. )
##  - attr(*, "problems")=<externalptr>

Test datamızdakiveri türlerimizi incelemek için str paketinden yardım alıyoruz.

str(test)
## spc_tbl_ [4,277 × 13] (S3: spec_tbl_df/tbl_df/tbl/data.frame)
##  $ PassengerId : chr [1:4277] "0013_01" "0018_01" "0019_01" "0021_01" ...
##  $ HomePlanet  : chr [1:4277] "Earth" "Earth" "Europa" "Europa" ...
##  $ CryoSleep   : logi [1:4277] TRUE FALSE TRUE FALSE FALSE FALSE ...
##  $ Cabin       : chr [1:4277] "G/3/S" "F/4/S" "C/0/S" "C/1/S" ...
##  $ Destination : chr [1:4277] "TRAPPIST-1e" "TRAPPIST-1e" "55 Cancri e" "TRAPPIST-1e" ...
##  $ Age         : num [1:4277] 27 19 31 38 20 31 21 20 23 24 ...
##  $ VIP         : logi [1:4277] FALSE FALSE FALSE FALSE FALSE FALSE ...
##  $ RoomService : num [1:4277] 0 0 0 0 10 0 0 0 0 0 ...
##  $ FoodCourt   : num [1:4277] 0 9 0 6652 0 ...
##  $ ShoppingMall: num [1:4277] 0 0 0 0 635 263 0 0 0 0 ...
##  $ Spa         : num [1:4277] 0 2823 0 181 0 ...
##  $ VRDeck      : num [1:4277] 0 0 0 585 0 60 0 0 0 0 ...
##  $ Name        : chr [1:4277] "Nelly Carsoning" "Lerome Peckers" "Sabih Unhearfus" "Meratz Caltilter" ...
##  - attr(*, "spec")=
##   .. cols(
##   ..   PassengerId = col_character(),
##   ..   HomePlanet = col_character(),
##   ..   CryoSleep = col_logical(),
##   ..   Cabin = col_character(),
##   ..   Destination = col_character(),
##   ..   Age = col_double(),
##   ..   VIP = col_logical(),
##   ..   RoomService = col_double(),
##   ..   FoodCourt = col_double(),
##   ..   ShoppingMall = col_double(),
##   ..   Spa = col_double(),
##   ..   VRDeck = col_double(),
##   ..   Name = col_character()
##   .. )
##  - attr(*, "problems")=<externalptr>

Veri setlerimizi araştıralım.Veri setlerimiz araştırmak için dataexplorer paketini yükleyelim ve create_report ile rapor oluşturalım.

library(DataExplorer)

Train Sonuçlarımız

Train datamızı araştırmak için create_report ile rapor oluşturalım.

create_report(train)

Basic Statistics (Temel İstatistikler)

Raw Counts (Ham Sayımlar)

Name    (AD)                                           Value(Değer)
Rows (Satır)                                           8,693
Columns (Sütun)                                      14
Discrete columns (Ayrık Sütunlar-Kesikli Data)       8
Continuous columns (Sürekli Sütunlar)                6
All missing columns (Tüm Eksik Sütunlar)             0
Missing observations (Eksik Gözlemler)               2,324
Complete Rows    (Tam Sayılar)                         6,606
Total observations (Toplam Gözlem Sayısı)            121,702
Memory allocation   (Bellek Ayırma)                    2.2 Mb

Percentages (Yüzde)

Discrete columns (Ayrık Sütunlar-Kesikli Data)
Continuous columns (Sürekli Sütunlar)
All missing columns (Tüm Eksik Sütunlar)
Complete Rows    (Tam Sayılar)
Missing observations (Eksik Gözlemler)
Columns (Sütun)
observation(Gözlem)
Rows (Satır)

Data Structure (Veri Yapısı) (STR)

Missing Data Profile (Eksik Veri Profili)

Transported:    Verinin %0'ı kayıp
PassengerId:    Verinin %0'ı kayıp
Age:            Verinin %2.06'sı kayıp
RoomService:    Verinin %2.08'i kayıp
Destination:    Verinin %2.09'u kayıp
Spa:            Verinin %2.11'i kayıp
FoodCourt:      Verinin %2.11'i kayıp
VRDeck:         Verinin %2.16'sı kayıp
Cabin:          Verinin %2.29'u kayıp
Name:           Verinin %2.30'u kayıp
HomePlanet:     Verinin %2.31'i kayıp
VIP:            Verinin %2.34'ü kayıp
ShoppingMall:   Verinin %2.39'u kayıp
CryoSleep:      Verinin %2.50'si kayıp

Univariate Distribution (Tek Değişkenli Dağılım) (continuous-Sürekli)

Histogram

AGE
AGE
Age histogramında 0 ile 80 yaş aralığında en çok 20'li yaşlarda insanların olduğu gözlemleniyor.
FOODCOURT
FOODCOURT
Fodcourt histogramında 0-30.000 fiyat aralığında çoğu kişinin yemeklere para harcamadığı gözlemleniyor.
ROOMSERVİCE
ROOMSERVİCE
RoomService histogramında 0-15.000 fiyat aralığında çoğu kişinin oda servisine para harcamadığı gözlemleniyor.
SHOPPINGMALL
SHOPPINGMALL
ShoppingMall histogramında 0-25.000 fiyat aralığında kişilerin çoğu alışveriş yapmadığı gözlemleniyor.
SPA
SPA
Spa histogramında spa kullanmayanların sayısı kullananlara göre daha fazla olduğu gözlemleniyor.
VRDECK
VRDECK
VRdeck histogramında VRdeck'e insanlar neredeyse hiç para harcamadıkları gözlemleniyor. 

Bar Chart (with frequency) (Çubuk Grafik (sıklıkla)) (Discrete-Kesikli)

3 columns ignored with more than 50 categories.(50'den fazla kategoride 3 sütun göz ardı edildi.)
PassengerId: 8693 categories(Yolcu Kimliği: 8693 kategori)
Cabin: 6561 categories(Kabin: 6561 kategori)
Name: 8474 categories(Ad: 8474 kategori)
HOMEPLANET
HOMEPLANET
HomePlanet grafiğinde yolcular en çok Eart gezegeninden bindikleri gözlemleniyor.
CRYOSLEEP
CRYOSLEEP
CryoSleep yolcunun yolculuk süresince askıya alınmış animasyona alınmayı büyük oranda seçmediği gözlemleniyor.
DESTINATION
DESTINATION
Destination grafiğinde yolcular en çok TRAPPIST-1e durağında inecekleri gözlemleniyor.
VIP
VIP
VIP grafiğinde yolcunun yolculuk sırasında özel VIP hizmeti için ödeme yapmadığı gözlemleniyor.
TRANSPORTED
TRANSPORTED
Transported grafiğinde yolcuların yarısının yaşadığını yarısınında yaşamadığı tahmin edilmiştir.

QQ Plot (QQ Grafiği)

Warning: Removed 124 rows containing non-finite values (`stat_qq()`). (Uyarı: Sonlu olmayan değerler (`stat_qq()`) içeren 124 satır kaldırıldı.)
AGE-FOODCOURT-ROOMSERVICE-SHOPPINGMALL-SPA ve VRDECK
AGE-FOODCOURT-ROOMSERVICE-SHOPPINGMALL-SPA ve VRDECK
AGE-FOODCOURT-ROOMSERVICE-SHOPPINGMALL-SPA ve VRDECK grafikleri gelirle ilgili olduğu için normal dağılım göstermemektedir.

Datamızın verilerini okumak zor olduğu için train datamızı küçültüyoruz ve küçülttüğümüz datanın raporunu tekrar alıyoruz.

traindatasınıküçültme1 <-train [,c(1:6,14)]
library(DataExplorer) 
create_report(traindatasınıküçültme1)

Küçülttüğümüz Train datasındaki korelasyonu inceleyelim.

KORELASYON
KORELASYON

Transported True ile CroyeSleep True arasındaki doğrusal ilişki gücü 0.46 oranıyla en fazladır.

Test sonuçlarımız

Test datamızı araştırmak için create_report ile rapor oluşturalım.

create_report(test)

Datatest Basic Statistics (Temel İstatistikler)

Datatest Raw Counts (Ham Sayımlar)

Name(Ad)                                              Value(Değer)
Rows(Satır)                                         4,277
Columns(Sütun)                                      13
Discrete columns(Ayrık sütunlar)                      7
Continuous columns(Sürekli sütunlar)                  6
All missing columns(Tüm eksik sütunlar)             0
Missing observations(Eksik gözlemler)                 1,117
Complete Rows(Tam Satırlar)                         3,281
Total observations(Toplam gözlem sayısı)              55,601
Memory allocation(Bellek ayırma)                      1.1 Mb

Datatest Percentages (Yüzde)

Discrete columns (Ayrık Sütunlar-Kesikli Data)
Continuous columns (Sürekli Sütunlar)
All missing columns (Tüm Eksik Sütunlar)
Complete Rows    (Tam Sayılar)
Missing observations (Eksik Gözlemler)
Columns (Sütun)
observation(Gözlem)
Rows (Satır)

Datatest Data Structure (Veri Yapısı) (STR)

Datatest Missing Data Profile (Eksik Veri Profili)

PassengerId:    Verinin %0'ı kayıp
VRDeck:         Verinin %1.87'si kayıp
RoomService:    Verinin %1.92'si kayıp
HomePlanet:     Verinin %2.03'ü kayıp
Age:            Verinin %2.13'ü kayıp
Destination:    Verinin %2.15'i kayıp
VIP:            Verinin %2.17'si kayıp
CryoSleep:      Verinin %2.17'si kayıp
Name:           Verinin %2.2'si kayıp
ShoppingMall:   Verinin %2.29'u kayıp
Cabin:          Verinin %2.34'ü kayıp
Spa:            Verinin %2.36'sı kayıp
FoodCourt:      Verinin %2.48'i kayıp

Dataset Univariate Distribution (Tek Değişkenli Dağılım) (continuous-Sürekli)

Datatest Histogram

TEST AGE
TEST AGE
Age histogramında 0 ile 80 yaş aralığında en çok 20'li yaşlarda insanların olduğu gözlemleniyor.
TEST FOODCOURT
TEST FOODCOURT
Foodcourt histogramında 0-30.000 fiyat aralığında çok az kişinin yemeklere para harcadığı ve bunun gelirle ilgili olduğu  gözlemleniyor.
TEST ROOMSERVİCE
TEST ROOMSERVİCE
RoomService histogramında 0-15.000 fiyat aralığında çok az kişinin oda servisine para harcadığı gözlemleniyor.
TEST SHOPPINGMALL
TEST SHOPPINGMALL
ShoppingMall histogramında 0-25.000 fiyat aralığında kişilerin çoğu alışveriş yapmadığı gözlemleniyor.
TEST SPA
TEST SPA
Spa histogramında spaya ücret ödemek istemeyenlerin sayısı kullananlara göre daha fazla olduğu gözlemleniyor.
TEST VRDECK
TEST VRDECK
VRdeck histogramında VRdeck'e insanlar neredeyse hiç KİMSE para harcamayı tercih etmediği gözlemleniyor.

Datatest Bar Chat(with frequency) (Çubuk Grafik (sıklıkla)) (Discrete-Kesikli)

3 columns ignored with more than 50 categories.(50'den fazla kategoride 3 sütun göz ardı edildi.)
PassengerId: 4277 categories (Yolcu Kimliği: 4277 kategori)
Cabin: 3266 categories (Kabin: 3266 kategori)
Name: 4177 categories (Ad: 4177 kategori)
TEST HOMEPLANET
TEST HOMEPLANET
HomePlanet grafiğinde yolcular birinci olarak Eart gezegeninden, ikinci olarak Europa gezegeninden üçüncü olarak Mars dördüncü olarak ise hangi gezegenden bindikleri belli olmayan'dan bindikleri gözlemleniyor.
TEST CRYOSLEEP
TEST CRYOSLEEP
CryoSleep yolcunun yolculuk süresince askıya alınmış animasyona alınmayı büyük oranda seçmediği çok az bir oranda seçtiği gözlemleniyor.
TEST DESTINATION
TEST DESTINATION
Destination grafiğinde yolcular en çok TRAPPIST-1e durağında ikinci olarak 55 Cancri e durağında inecekleri gözlemleniyor.
TEST VIP
TEST VIP
VIP grafiğinde yolcunun yolculuk sırasında özel VIP hizmeti için ödeme yapmadığı VIP hizmeti alanların ve alıp almadığı belli olmayan kişierin sayılarının nerdeyse eşit olduğu  gözlemleniyor.

Datatest QQ Plot (QQ Grafiği)

Warning: Removed 138 rows containing non-finite values (`stat_qq()`).(Uyarı: Sonlu olmayan değerler (`stat_qq()`) içeren 138 satır kaldırıldı.)
TEST AGE-FOODCOURT-ROOMSERVICE-SHOPPINGMALL-SPA ve VRDECK
TEST AGE-FOODCOURT-ROOMSERVICE-SHOPPINGMALL-SPA ve VRDECK
AGE-FOODCOURT-ROOMSERVICE-SHOPPINGMALL-SPA ve VRDECK grafikleri gelirle ilgili olduğu için normal dağılım göstermemektedir.

Datamızın verilerini okumak zor olduğu için test datamızı küçültüyoruz ve küçülttüğümüz datanın raporunu tekrar alıyoruz.

testdatasınıküçültme1 <-test [,c(1:6,13)]
library(DataExplorer)
create_report(testdatasınıküçültme1)

Küçülttüğümüz Test datasındaki korelasyonu inceleyelim.

TEST KORELASYON
TEST KORELASYON
Destination _55.cancri.e ile HomePlanet_europa arasındaki doğrusal ilişki gücü 0.33 oranıyla en yüksek olandır.

Veri setlerimizin sayı değişkenlerinin istatiksel özetlerini alalım.

library(tidyverse)
## ── Attaching core tidyverse packages ──────────────────────── tidyverse 2.0.0 ──
## ✔ dplyr     1.1.4     ✔ purrr     1.0.2
## ✔ forcats   1.0.0     ✔ stringr   1.5.1
## ✔ ggplot2   3.4.4     ✔ tibble    3.2.1
## ✔ lubridate 1.9.3     ✔ tidyr     1.3.0
## ── Conflicts ────────────────────────────────────────── tidyverse_conflicts() ──
## ✖ dplyr::filter() masks stats::filter()
## ✖ dplyr::lag()    masks stats::lag()
## ℹ Use the conflicted package (<http://conflicted.r-lib.org/>) to force all conflicts to become errors
library(explore)

Train

Train veri çerçevesindeki sayısal değişkenlerin istatistik özetini alalım

summary(train)
##  PassengerId         HomePlanet        CryoSleep          Cabin          
##  Length:8693        Length:8693        Mode :logical   Length:8693       
##  Class :character   Class :character   FALSE:5439      Class :character  
##  Mode  :character   Mode  :character   TRUE :3037      Mode  :character  
##                                        NA's :217                         
##                                                                          
##                                                                          
##                                                                          
##  Destination             Age           VIP           RoomService     
##  Length:8693        Min.   : 0.00   Mode :logical   Min.   :    0.0  
##  Class :character   1st Qu.:19.00   FALSE:8291      1st Qu.:    0.0  
##  Mode  :character   Median :27.00   TRUE :199       Median :    0.0  
##                     Mean   :28.83   NA's :203       Mean   :  224.7  
##                     3rd Qu.:38.00                   3rd Qu.:   47.0  
##                     Max.   :79.00                   Max.   :14327.0  
##                     NA's   :179                     NA's   :181      
##    FoodCourt        ShoppingMall          Spa              VRDeck       
##  Min.   :    0.0   Min.   :    0.0   Min.   :    0.0   Min.   :    0.0  
##  1st Qu.:    0.0   1st Qu.:    0.0   1st Qu.:    0.0   1st Qu.:    0.0  
##  Median :    0.0   Median :    0.0   Median :    0.0   Median :    0.0  
##  Mean   :  458.1   Mean   :  173.7   Mean   :  311.1   Mean   :  304.9  
##  3rd Qu.:   76.0   3rd Qu.:   27.0   3rd Qu.:   59.0   3rd Qu.:   46.0  
##  Max.   :29813.0   Max.   :23492.0   Max.   :22408.0   Max.   :24133.0  
##  NA's   :183       NA's   :208       NA's   :183       NA's   :188      
##      Name           Transported    
##  Length:8693        Mode :logical  
##  Class :character   FALSE:4315     
##  Mode  :character   TRUE :4378     
##                                    
##                                    
##                                    
## 
head(train)
## # A tibble: 6 × 14
##   PassengerId HomePlanet CryoSleep Cabin Destination     Age VIP   RoomService
##   <chr>       <chr>      <lgl>     <chr> <chr>         <dbl> <lgl>       <dbl>
## 1 0001_01     Europa     FALSE     B/0/P TRAPPIST-1e      39 FALSE           0
## 2 0002_01     Earth      FALSE     F/0/S TRAPPIST-1e      24 FALSE         109
## 3 0003_01     Europa     FALSE     A/0/S TRAPPIST-1e      58 TRUE           43
## 4 0003_02     Europa     FALSE     A/0/S TRAPPIST-1e      33 FALSE           0
## 5 0004_01     Earth      FALSE     F/1/S TRAPPIST-1e      16 FALSE         303
## 6 0005_01     Earth      FALSE     F/0/P PSO J318.5-22    44 FALSE           0
## # ℹ 6 more variables: FoodCourt <dbl>, ShoppingMall <dbl>, Spa <dbl>,
## #   VRDeck <dbl>, Name <chr>, Transported <lgl>

Test

Test veri çerçevesindeki sayısal değişkenlerin istatistik özetini alalım.

test %>% describe_all()
## # A tibble: 13 × 8
##    variable     type     na na_pct unique   min   mean   max
##    <chr>        <chr> <int>  <dbl>  <int> <dbl>  <dbl> <dbl>
##  1 PassengerId  chr       0    0     4277    NA  NA       NA
##  2 HomePlanet   chr      87    2        4    NA  NA       NA
##  3 CryoSleep    lgl      93    2.2      3     0   0.37     1
##  4 Cabin        chr     100    2.3   3266    NA  NA       NA
##  5 Destination  chr      92    2.2      4    NA  NA       NA
##  6 Age          dbl      91    2.1     80     0  28.7     79
##  7 VIP          lgl      93    2.2      3     0   0.02     1
##  8 RoomService  dbl      82    1.9    843     0 219.   11567
##  9 FoodCourt    dbl     106    2.5    903     0 439.   25273
## 10 ShoppingMall dbl      98    2.3    716     0 177.    8292
## 11 Spa          dbl     101    2.4    834     0 303.   19844
## 12 VRDeck       dbl      80    1.9    797     0 311.   22272
## 13 Name         chr      94    2.2   4177    NA  NA       NA
head(test)
## # A tibble: 6 × 13
##   PassengerId HomePlanet CryoSleep Cabin Destination   Age VIP   RoomService
##   <chr>       <chr>      <lgl>     <chr> <chr>       <dbl> <lgl>       <dbl>
## 1 0013_01     Earth      TRUE      G/3/S TRAPPIST-1e    27 FALSE           0
## 2 0018_01     Earth      FALSE     F/4/S TRAPPIST-1e    19 FALSE           0
## 3 0019_01     Europa     TRUE      C/0/S 55 Cancri e    31 FALSE           0
## 4 0021_01     Europa     FALSE     C/1/S TRAPPIST-1e    38 FALSE           0
## 5 0023_01     Earth      FALSE     F/5/S TRAPPIST-1e    20 FALSE          10
## 6 0027_01     Earth      FALSE     F/7/P TRAPPIST-1e    31 FALSE           0
## # ℹ 5 more variables: FoodCourt <dbl>, ShoppingMall <dbl>, Spa <dbl>,
## #   VRDeck <dbl>, Name <chr>

Train veri setindeki PassengerId sütununu aile numarası ve aile sıraları olarak iki sütuna ayıralım.

library(stringr)
train[c('ailenumarası', 'ailesıra')] <- str_split_fixed(train$PassengerId, "_", 2)

Train datasındaki Ailenumarası ve ailesıra sütunlarını ön tarafa alalım.

train<-train[c(15:16,1:14)]

Train datasındaki Kabin sütununu kabinharfi, kabinnumarası ve iskelebölgesi olarak üçe ayıralım.

train[c('kabinharfi', 'kabinnumarası', 'iskelebölgesi')] <- str_split_fixed(train$Cabin, '/', 3)

Train datasındaki Kabinin sütununun yanına kabinharfi, kabinnumarası ve iskelebölgesi sütunlarını koyalım.

train<-train[c(1:6,17:19,7:16)]

Train datasındaki Cabin sütununu silelim.

train<- train %>% select(-Cabin)

Test Datasındaki PassengerId sütununu aile numarası ve aile sıraları olarak iki sütuna ayıralım.

library(stringr)
test[c('ailenumarası', 'ailesıra')] <- str_split_fixed(test$PassengerId, "_", 2)

Test Datasındaki Ailenumarası ve ailesıra sütunlarını ön tarafa alalım.

test<-test[c(14,15,1:13)]

Test Datasındaki Kabin sütununu kabinharfi, kabinnumarası ve iskelebölgesi olarak üçe ayıralım.

test[c('kabinharfi', 'kabinnumarası', 'iskelebölgesi')] <- str_split_fixed(test$Cabin, '/', 3)

Test Datasındaki Kabinin sütununun yanına kabinharfi, kabinnumarası ve iskelebölgesi sütunlarını koyalım.

test<-test[c(1:6,16,17,18,7:15)]

Test Datasındaki Cabin sütunlarını silelim.

test<- test %>% select(-Cabin)

Veri setlerimizdeki boşluk bulanan yerleri dolduralım.

Train

Train datasındaki Homeplanet değişkenindeki boşluk olan NA’ları dolduralım.

train$HomePlanet <- addNA(train$HomePlanet)
levels(train$HomePlanet)[is.na(levels(train$HomePlanet))] <- "NA"
train <- train %>%
  mutate(HomePlanet = case_when(
    CryoSleep & (kabinharfi %in% c("G", "E")) ~ "MARS",
    CryoSleep & kabinharfi %in% c("G", "E") ~ "EARTH",
    TRUE ~ "EUROPA"))

Homeplanet değişkenindeki boşluk olan NA’ların sıfırlandığını kontrol edelim.

train %>% describe_all()
## # A tibble: 18 × 8
##    variable      type     na na_pct unique   min   mean   max
##    <chr>         <chr> <int>  <dbl>  <int> <dbl>  <dbl> <dbl>
##  1 ailenumarası  chr       0    0     6217    NA  NA       NA
##  2 ailesıra      chr       0    0        8    NA  NA       NA
##  3 PassengerId   chr       0    0     8693    NA  NA       NA
##  4 HomePlanet    chr       0    0        2    NA  NA       NA
##  5 CryoSleep     lgl     217    2.5      3     0   0.36     1
##  6 kabinharfi    chr     199    2.3      9    NA  NA       NA
##  7 kabinnumarası chr       0    0     1818    NA  NA       NA
##  8 iskelebölgesi chr       0    0        3    NA  NA       NA
##  9 Destination   chr     182    2.1      4    NA  NA       NA
## 10 Age           dbl     179    2.1     81     0  28.8     79
## 11 VIP           lgl     203    2.3      3     0   0.02     1
## 12 RoomService   dbl     181    2.1   1274     0 225.   14327
## 13 FoodCourt     dbl     183    2.1   1508     0 458.   29813
## 14 ShoppingMall  dbl     208    2.4   1116     0 174.   23492
## 15 Spa           dbl     183    2.1   1328     0 311.   22408
## 16 VRDeck        dbl     188    2.2   1307     0 305.   24133
## 17 Name          chr     200    2.3   8474    NA  NA       NA
## 18 Transported   lgl       0    0        2     0   0.5      1

Train datasındaki Age değişkenindeki boşluk olan NA’ları HomePlanet değişkenine göre ortalama yaş ile dolduralım.

train <- train %>%
  group_by(HomePlanet,Destination) %>%
  mutate_at(vars(Age), ~replace_na(., mean(., na.rm = TRUE)))

Age değişkenindeki boşluk olan NA’ları ortalama yaş ile değiştiğini kontrol edelim.

train %>% describe_all()
## # A tibble: 18 × 8
##    variable      type     na na_pct unique   min   mean   max
##    <chr>         <chr> <int>  <dbl>  <int> <dbl>  <dbl> <dbl>
##  1 ailenumarası  chr       0    0     6217    NA  NA       NA
##  2 ailesıra      chr       0    0        8    NA  NA       NA
##  3 PassengerId   chr       0    0     8693    NA  NA       NA
##  4 HomePlanet    chr       0    0        2    NA  NA       NA
##  5 CryoSleep     lgl     217    2.5      3     0   0.36     1
##  6 kabinharfi    chr     199    2.3      9    NA  NA       NA
##  7 kabinnumarası chr       0    0     1818    NA  NA       NA
##  8 iskelebölgesi chr       0    0        3    NA  NA       NA
##  9 Destination   chr     182    2.1      4    NA  NA       NA
## 10 Age           dbl       0    0       87     0  28.8     79
## 11 VIP           lgl     203    2.3      3     0   0.02     1
## 12 RoomService   dbl     181    2.1   1274     0 225.   14327
## 13 FoodCourt     dbl     183    2.1   1508     0 458.   29813
## 14 ShoppingMall  dbl     208    2.4   1116     0 174.   23492
## 15 Spa           dbl     183    2.1   1328     0 311.   22408
## 16 VRDeck        dbl     188    2.2   1307     0 305.   24133
## 17 Name          chr     200    2.3   8474    NA  NA       NA
## 18 Transported   lgl       0    0        2     0   0.5      1

Train verimizdeki CryoSleep’in üç seçeneği var bunlar True False ve Na.Bunlara tek tek bakmak zor oldğu için üçe ayırıyoruz.

train$CryoSleep <- addNA(train$CryoSleep)
levels(train$CryoSleep)[is.na(levels(train$CryoSleep))] <- "NA"

CryoSleep için kontrolümüzü sağlıyoruz

train %>% describe_all()
## # A tibble: 18 × 8
##    variable      type     na na_pct unique   min   mean   max
##    <chr>         <chr> <int>  <dbl>  <int> <dbl>  <dbl> <dbl>
##  1 ailenumarası  chr       0    0     6217    NA  NA       NA
##  2 ailesıra      chr       0    0        8    NA  NA       NA
##  3 PassengerId   chr       0    0     8693    NA  NA       NA
##  4 HomePlanet    chr       0    0        2    NA  NA       NA
##  5 CryoSleep     fct       0    0        3    NA  NA       NA
##  6 kabinharfi    chr     199    2.3      9    NA  NA       NA
##  7 kabinnumarası chr       0    0     1818    NA  NA       NA
##  8 iskelebölgesi chr       0    0        3    NA  NA       NA
##  9 Destination   chr     182    2.1      4    NA  NA       NA
## 10 Age           dbl       0    0       87     0  28.8     79
## 11 VIP           lgl     203    2.3      3     0   0.02     1
## 12 RoomService   dbl     181    2.1   1274     0 225.   14327
## 13 FoodCourt     dbl     183    2.1   1508     0 458.   29813
## 14 ShoppingMall  dbl     208    2.4   1116     0 174.   23492
## 15 Spa           dbl     183    2.1   1328     0 311.   22408
## 16 VRDeck        dbl     188    2.2   1307     0 305.   24133
## 17 Name          chr     200    2.3   8474    NA  NA       NA
## 18 Transported   lgl       0    0        2     0   0.5      1

Train verimizdeki Destination üç seçeneği var bunlar True False ve Na.Bunlara tek tek bakmak zor olduğu için üçe ayırıyoruz.

train$Destination <- addNA(train$Destination)
levels(train$Destination)[is.na(levels(train$Destination))] <- "NA"

Destination için kontrolümüzü sağlıyoruz

train %>% describe_all()
## # A tibble: 18 × 8
##    variable      type     na na_pct unique   min   mean   max
##    <chr>         <chr> <int>  <dbl>  <int> <dbl>  <dbl> <dbl>
##  1 ailenumarası  chr       0    0     6217    NA  NA       NA
##  2 ailesıra      chr       0    0        8    NA  NA       NA
##  3 PassengerId   chr       0    0     8693    NA  NA       NA
##  4 HomePlanet    chr       0    0        2    NA  NA       NA
##  5 CryoSleep     fct       0    0        3    NA  NA       NA
##  6 kabinharfi    chr     199    2.3      9    NA  NA       NA
##  7 kabinnumarası chr       0    0     1818    NA  NA       NA
##  8 iskelebölgesi chr       0    0        3    NA  NA       NA
##  9 Destination   fct       0    0        4    NA  NA       NA
## 10 Age           dbl       0    0       87     0  28.8     79
## 11 VIP           lgl     203    2.3      3     0   0.02     1
## 12 RoomService   dbl     181    2.1   1274     0 225.   14327
## 13 FoodCourt     dbl     183    2.1   1508     0 458.   29813
## 14 ShoppingMall  dbl     208    2.4   1116     0 174.   23492
## 15 Spa           dbl     183    2.1   1328     0 311.   22408
## 16 VRDeck        dbl     188    2.2   1307     0 305.   24133
## 17 Name          chr     200    2.3   8474    NA  NA       NA
## 18 Transported   lgl       0    0        2     0   0.5      1

Train verimizdeki VIP üç seçeneği var bunlar True False ve Na.Bunlara tek tek bakmak zor oldğu için üçe ayırıyoruz.

train$VIP <- addNA(train$VIP)
levels(train$VIP)[is.na(levels(train$VIP))] <- "NA"

VIP için kontrolümüzü sağlıyoruz

train %>% describe_all()
## # A tibble: 18 × 8
##    variable      type     na na_pct unique   min  mean   max
##    <chr>         <chr> <int>  <dbl>  <int> <dbl> <dbl> <dbl>
##  1 ailenumarası  chr       0    0     6217    NA  NA      NA
##  2 ailesıra      chr       0    0        8    NA  NA      NA
##  3 PassengerId   chr       0    0     8693    NA  NA      NA
##  4 HomePlanet    chr       0    0        2    NA  NA      NA
##  5 CryoSleep     fct       0    0        3    NA  NA      NA
##  6 kabinharfi    chr     199    2.3      9    NA  NA      NA
##  7 kabinnumarası chr       0    0     1818    NA  NA      NA
##  8 iskelebölgesi chr       0    0        3    NA  NA      NA
##  9 Destination   fct       0    0        4    NA  NA      NA
## 10 Age           dbl       0    0       87     0  28.8    79
## 11 VIP           fct       0    0        3    NA  NA      NA
## 12 RoomService   dbl     181    2.1   1274     0 225.  14327
## 13 FoodCourt     dbl     183    2.1   1508     0 458.  29813
## 14 ShoppingMall  dbl     208    2.4   1116     0 174.  23492
## 15 Spa           dbl     183    2.1   1328     0 311.  22408
## 16 VRDeck        dbl     188    2.2   1307     0 305.  24133
## 17 Name          chr     200    2.3   8474    NA  NA      NA
## 18 Transported   lgl       0    0        2     0   0.5     1

Train verisindeki RoomServicelar rakamlardan oluştuğu için boşluk olan NA ları gidecekleri gezegenlere göre ortalama ile dolduracağız.

train <- train %>%
  group_by(Destination) %>%
  mutate_at(vars(RoomService), ~replace_na(., mean(., na.rm = TRUE)))

Roomservice için kontrolümüzü sağlıyoruz

train %>% describe_all()
## # A tibble: 18 × 8
##    variable      type     na na_pct unique   min  mean   max
##    <chr>         <chr> <int>  <dbl>  <int> <dbl> <dbl> <dbl>
##  1 ailenumarası  chr       0    0     6217    NA  NA      NA
##  2 ailesıra      chr       0    0        8    NA  NA      NA
##  3 PassengerId   chr       0    0     8693    NA  NA      NA
##  4 HomePlanet    chr       0    0        2    NA  NA      NA
##  5 CryoSleep     fct       0    0        3    NA  NA      NA
##  6 kabinharfi    chr     199    2.3      9    NA  NA      NA
##  7 kabinnumarası chr       0    0     1818    NA  NA      NA
##  8 iskelebölgesi chr       0    0        3    NA  NA      NA
##  9 Destination   fct       0    0        4    NA  NA      NA
## 10 Age           dbl       0    0       87     0  28.8    79
## 11 VIP           fct       0    0        3    NA  NA      NA
## 12 RoomService   dbl       0    0     1277     0 225.  14327
## 13 FoodCourt     dbl     183    2.1   1508     0 458.  29813
## 14 ShoppingMall  dbl     208    2.4   1116     0 174.  23492
## 15 Spa           dbl     183    2.1   1328     0 311.  22408
## 16 VRDeck        dbl     188    2.2   1307     0 305.  24133
## 17 Name          chr     200    2.3   8474    NA  NA      NA
## 18 Transported   lgl       0    0        2     0   0.5     1

Train verisindeki FoodCourt’ta rakam ama ilk önce histogramını çıkararak boşluklara koyulacak en uygun rakamları görelim.

hist(train$FoodCourt)

Histograma göre çok az kişi FoodCourt’a para harcadığını görünüyor.Bu yüzden boş olan yerlere sıfır koymak daha mantıklıdır.

train <- train %>% mutate(FoodCourt = coalesce(FoodCourt, 0))

FoodCourt için kontrolümüzü sağlıyoruz

train%>% describe_all()
## # A tibble: 18 × 8
##    variable      type     na na_pct unique   min  mean   max
##    <chr>         <chr> <int>  <dbl>  <int> <dbl> <dbl> <dbl>
##  1 ailenumarası  chr       0    0     6217    NA  NA      NA
##  2 ailesıra      chr       0    0        8    NA  NA      NA
##  3 PassengerId   chr       0    0     8693    NA  NA      NA
##  4 HomePlanet    chr       0    0        2    NA  NA      NA
##  5 CryoSleep     fct       0    0        3    NA  NA      NA
##  6 kabinharfi    chr     199    2.3      9    NA  NA      NA
##  7 kabinnumarası chr       0    0     1818    NA  NA      NA
##  8 iskelebölgesi chr       0    0        3    NA  NA      NA
##  9 Destination   fct       0    0        4    NA  NA      NA
## 10 Age           dbl       0    0       87     0  28.8    79
## 11 VIP           fct       0    0        3    NA  NA      NA
## 12 RoomService   dbl       0    0     1277     0 225.  14327
## 13 FoodCourt     dbl       0    0     1507     0 448.  29813
## 14 ShoppingMall  dbl     208    2.4   1116     0 174.  23492
## 15 Spa           dbl     183    2.1   1328     0 311.  22408
## 16 VRDeck        dbl     188    2.2   1307     0 305.  24133
## 17 Name          chr     200    2.3   8474    NA  NA      NA
## 18 Transported   lgl       0    0        2     0   0.5     1

Train verisindeki ShoppingMall, Spa ve VRDeck’i bir arada boşluklarını sıfırlayalım.

train <- train %>% mutate(ShoppingMall = coalesce(ShoppingMall, 0),
                          Spa = coalesce(Spa, 0),
                          VRDeck = coalesce(VRDeck, 0))

ShoppingMall, Spa ve VRDeck için boşlukların sıfırlandıklarını kontrol edelim.

train%>% describe_all()
## # A tibble: 18 × 8
##    variable      type     na na_pct unique   min  mean   max
##    <chr>         <chr> <int>  <dbl>  <int> <dbl> <dbl> <dbl>
##  1 ailenumarası  chr       0    0     6217    NA  NA      NA
##  2 ailesıra      chr       0    0        8    NA  NA      NA
##  3 PassengerId   chr       0    0     8693    NA  NA      NA
##  4 HomePlanet    chr       0    0        2    NA  NA      NA
##  5 CryoSleep     fct       0    0        3    NA  NA      NA
##  6 kabinharfi    chr     199    2.3      9    NA  NA      NA
##  7 kabinnumarası chr       0    0     1818    NA  NA      NA
##  8 iskelebölgesi chr       0    0        3    NA  NA      NA
##  9 Destination   fct       0    0        4    NA  NA      NA
## 10 Age           dbl       0    0       87     0  28.8    79
## 11 VIP           fct       0    0        3    NA  NA      NA
## 12 RoomService   dbl       0    0     1277     0 225.  14327
## 13 FoodCourt     dbl       0    0     1507     0 448.  29813
## 14 ShoppingMall  dbl       0    0     1115     0 170.  23492
## 15 Spa           dbl       0    0     1327     0 305.  22408
## 16 VRDeck        dbl       0    0     1306     0 298.  24133
## 17 Name          chr     200    2.3   8474    NA  NA      NA
## 18 Transported   lgl       0    0        2     0   0.5     1

Train verisindeki Name değişkeni bize herhangi bir bilgi vermediği için onu veriden çıkaralım.

train<- train %>% select(-Name)

Train verisindeki kabinharfi değişkeninde ki boşluk olan Na’ları da AddNa ile kategorileştirelim.

train$kabinharfi <- addNA(train$kabinharfi)
levels(train$kabinharfi)[is.na(levels(train$kabinharfi))] <- "NA"

Kabinharfini kontrol edelim.

train%>% describe_all()
## # A tibble: 17 × 8
##    variable      type     na na_pct unique   min  mean   max
##    <chr>         <chr> <int>  <dbl>  <int> <dbl> <dbl> <dbl>
##  1 ailenumarası  chr       0      0   6217    NA  NA      NA
##  2 ailesıra      chr       0      0      8    NA  NA      NA
##  3 PassengerId   chr       0      0   8693    NA  NA      NA
##  4 HomePlanet    chr       0      0      2    NA  NA      NA
##  5 CryoSleep     fct       0      0      3    NA  NA      NA
##  6 kabinharfi    fct       0      0      9    NA  NA      NA
##  7 kabinnumarası chr       0      0   1818    NA  NA      NA
##  8 iskelebölgesi chr       0      0      3    NA  NA      NA
##  9 Destination   fct       0      0      4    NA  NA      NA
## 10 Age           dbl       0      0     87     0  28.8    79
## 11 VIP           fct       0      0      3    NA  NA      NA
## 12 RoomService   dbl       0      0   1277     0 225.  14327
## 13 FoodCourt     dbl       0      0   1507     0 448.  29813
## 14 ShoppingMall  dbl       0      0   1115     0 170.  23492
## 15 Spa           dbl       0      0   1327     0 305.  22408
## 16 VRDeck        dbl       0      0   1306     0 298.  24133
## 17 Transported   lgl       0      0      2     0   0.5     1

Train verisindeki PassengerId’de aile numarası aynı olanlara 1 olmayanlara 0 verelim.

train$aile <- ifelse(duplicated(train$ailenumarası) | duplicated(train$ailenumarası, fromLast=TRUE), 1, 0)

Train verisinde PassengerId’de tekrarlanan aile numaralarının ilk 20 satırına bakalım.

head(train[, c("PassengerId","ailenumarası","ailesıra","aile")], 20)
## # A tibble: 20 × 4
##    PassengerId ailenumarası ailesıra  aile
##    <chr>       <chr>        <chr>    <dbl>
##  1 0001_01     0001         01           0
##  2 0002_01     0002         01           0
##  3 0003_01     0003         01           1
##  4 0003_02     0003         02           1
##  5 0004_01     0004         01           0
##  6 0005_01     0005         01           0
##  7 0006_01     0006         01           1
##  8 0006_02     0006         02           1
##  9 0007_01     0007         01           0
## 10 0008_01     0008         01           1
## 11 0008_02     0008         02           1
## 12 0008_03     0008         03           1
## 13 0009_01     0009         01           0
## 14 0010_01     0010         01           0
## 15 0011_01     0011         01           0
## 16 0012_01     0012         01           0
## 17 0014_01     0014         01           0
## 18 0015_01     0015         01           0
## 19 0016_01     0016         01           0
## 20 0017_01     0017         01           1

Train verisinde aile numarasına, aileırasına ve kabinnumarasına ihtiyacımız kalmadığı için sütunları silelim.

train<- train %>% select(-c(ailenumarası, ailesıra, kabinnumarası))

Train verisinde kalan son değişkenlerimizi kontrol edelim.

train %>% describe_all()
## # A tibble: 15 × 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       0      0      2    NA  NA       NA
##  3 CryoSleep     fct       0      0      3    NA  NA       NA
##  4 kabinharfi    fct       0      0      9    NA  NA       NA
##  5 iskelebölgesi chr       0      0      3    NA  NA       NA
##  6 Destination   fct       0      0      4    NA  NA       NA
##  7 Age           dbl       0      0     87     0  28.8     79
##  8 VIP           fct       0      0      3    NA  NA       NA
##  9 RoomService   dbl       0      0   1277     0 225.   14327
## 10 FoodCourt     dbl       0      0   1507     0 448.   29813
## 11 ShoppingMall  dbl       0      0   1115     0 170.   23492
## 12 Spa           dbl       0      0   1327     0 305.   22408
## 13 VRDeck        dbl       0      0   1306     0 298.   24133
## 14 Transported   lgl       0      0      2     0   0.5      1
## 15 aile          dbl       0      0      2     0   0.45     1

Test

Test datasındaki Homeplanet değişkenindeki boşluk olan NA’ları dolduralım.

test$HomePlanet <- addNA(test$HomePlanet)
levels(test$HomePlanet)[is.na(levels(test$HomePlanet))] <- "NA"
test <- test %>%
  mutate(HomePlanet = case_when(
    CryoSleep & (kabinharfi %in% c("G", "E")) ~ "MARS",
    CryoSleep & kabinharfi %in% c("G", "E") ~ "EARTH",
    TRUE ~ "EUROPA"))

Homeplanet değişkenindeki boşluk olan NA’ların sıfırlandığını kontrol edelim.

test %>% describe_all()
## # A tibble: 17 × 8
##    variable      type     na na_pct unique   min   mean   max
##    <chr>         <chr> <int>  <dbl>  <int> <dbl>  <dbl> <dbl>
##  1 ailenumarası  chr       0    0     3063    NA  NA       NA
##  2 ailesıra      chr       0    0        8    NA  NA       NA
##  3 PassengerId   chr       0    0     4277    NA  NA       NA
##  4 HomePlanet    chr       0    0        2    NA  NA       NA
##  5 CryoSleep     lgl      93    2.2      3     0   0.37     1
##  6 kabinharfi    chr     100    2.3      9    NA  NA       NA
##  7 kabinnumarası chr       0    0     1506    NA  NA       NA
##  8 iskelebölgesi chr       0    0        3    NA  NA       NA
##  9 Destination   chr      92    2.2      4    NA  NA       NA
## 10 Age           dbl      91    2.1     80     0  28.7     79
## 11 VIP           lgl      93    2.2      3     0   0.02     1
## 12 RoomService   dbl      82    1.9    843     0 219.   11567
## 13 FoodCourt     dbl     106    2.5    903     0 439.   25273
## 14 ShoppingMall  dbl      98    2.3    716     0 177.    8292
## 15 Spa           dbl     101    2.4    834     0 303.   19844
## 16 VRDeck        dbl      80    1.9    797     0 311.   22272
## 17 Name          chr      94    2.2   4177    NA  NA       NA

Test datasındaki Age değişkenindeki boşluk olan NA’ları HomePlanet ve Destination değişkenine göre ortalama yaş ile dolduralım.

test <- test %>%
  group_by(HomePlanet,Destination) %>%
  mutate_at(vars(Age), ~replace_na(., mean(., na.rm = TRUE)))

Age değişkenindeki boşluk olan NA’ları ortalama yaş ile değiştiğini kontrol edelim.

test %>% describe_all()
## # A tibble: 17 × 8
##    variable      type     na na_pct unique   min   mean   max
##    <chr>         <chr> <int>  <dbl>  <int> <dbl>  <dbl> <dbl>
##  1 ailenumarası  chr       0    0     3063    NA  NA       NA
##  2 ailesıra      chr       0    0        8    NA  NA       NA
##  3 PassengerId   chr       0    0     4277    NA  NA       NA
##  4 HomePlanet    chr       0    0        2    NA  NA       NA
##  5 CryoSleep     lgl      93    2.2      3     0   0.37     1
##  6 kabinharfi    chr     100    2.3      9    NA  NA       NA
##  7 kabinnumarası chr       0    0     1506    NA  NA       NA
##  8 iskelebölgesi chr       0    0        3    NA  NA       NA
##  9 Destination   chr      92    2.2      4    NA  NA       NA
## 10 Age           dbl       0    0       86     0  28.7     79
## 11 VIP           lgl      93    2.2      3     0   0.02     1
## 12 RoomService   dbl      82    1.9    843     0 219.   11567
## 13 FoodCourt     dbl     106    2.5    903     0 439.   25273
## 14 ShoppingMall  dbl      98    2.3    716     0 177.    8292
## 15 Spa           dbl     101    2.4    834     0 303.   19844
## 16 VRDeck        dbl      80    1.9    797     0 311.   22272
## 17 Name          chr      94    2.2   4177    NA  NA       NA

Test verimizdeki Cryosleep içinde aynısını yapıyoruz.

test$CryoSleep <- addNA(test$CryoSleep)
levels(test$CryoSleep)[is.na(levels(test$CryoSleep))] <- "NA"

Cryosleep için kontrolümüzü sağlıyoruz

test %>% describe_all()
## # A tibble: 17 × 8
##    variable      type     na na_pct unique   min   mean   max
##    <chr>         <chr> <int>  <dbl>  <int> <dbl>  <dbl> <dbl>
##  1 ailenumarası  chr       0    0     3063    NA  NA       NA
##  2 ailesıra      chr       0    0        8    NA  NA       NA
##  3 PassengerId   chr       0    0     4277    NA  NA       NA
##  4 HomePlanet    chr       0    0        2    NA  NA       NA
##  5 CryoSleep     fct       0    0        3    NA  NA       NA
##  6 kabinharfi    chr     100    2.3      9    NA  NA       NA
##  7 kabinnumarası chr       0    0     1506    NA  NA       NA
##  8 iskelebölgesi chr       0    0        3    NA  NA       NA
##  9 Destination   chr      92    2.2      4    NA  NA       NA
## 10 Age           dbl       0    0       86     0  28.7     79
## 11 VIP           lgl      93    2.2      3     0   0.02     1
## 12 RoomService   dbl      82    1.9    843     0 219.   11567
## 13 FoodCourt     dbl     106    2.5    903     0 439.   25273
## 14 ShoppingMall  dbl      98    2.3    716     0 177.    8292
## 15 Spa           dbl     101    2.4    834     0 303.   19844
## 16 VRDeck        dbl      80    1.9    797     0 311.   22272
## 17 Name          chr      94    2.2   4177    NA  NA       NA

Test verimizdeki Destination içinde aynısını yapıyoruz.

test$Destination <- addNA(test$Destination)
levels(test$Destination)[is.na(levels(test$Destination))] <- "NA"

Destination için kontrolümüzü sağlıyoruz

test %>% describe_all()
## # A tibble: 17 × 8
##    variable      type     na na_pct unique   min   mean   max
##    <chr>         <chr> <int>  <dbl>  <int> <dbl>  <dbl> <dbl>
##  1 ailenumarası  chr       0    0     3063    NA  NA       NA
##  2 ailesıra      chr       0    0        8    NA  NA       NA
##  3 PassengerId   chr       0    0     4277    NA  NA       NA
##  4 HomePlanet    chr       0    0        2    NA  NA       NA
##  5 CryoSleep     fct       0    0        3    NA  NA       NA
##  6 kabinharfi    chr     100    2.3      9    NA  NA       NA
##  7 kabinnumarası chr       0    0     1506    NA  NA       NA
##  8 iskelebölgesi chr       0    0        3    NA  NA       NA
##  9 Destination   fct       0    0        4    NA  NA       NA
## 10 Age           dbl       0    0       86     0  28.7     79
## 11 VIP           lgl      93    2.2      3     0   0.02     1
## 12 RoomService   dbl      82    1.9    843     0 219.   11567
## 13 FoodCourt     dbl     106    2.5    903     0 439.   25273
## 14 ShoppingMall  dbl      98    2.3    716     0 177.    8292
## 15 Spa           dbl     101    2.4    834     0 303.   19844
## 16 VRDeck        dbl      80    1.9    797     0 311.   22272
## 17 Name          chr      94    2.2   4177    NA  NA       NA

Test verimizdeki VIP üç seçeneği var bunlar True False ve Na.Bunlara tek tek bakmak zor oldğu için üçe ayırıyoruz.

test$VIP <- addNA(test$VIP)
levels(test$VIP)[is.na(levels(test$VIP))] <- "NA"

VIP için kontrolümüzü sağlıyoruz

test %>% describe_all()
## # A tibble: 17 × 8
##    variable      type     na na_pct unique   min  mean   max
##    <chr>         <chr> <int>  <dbl>  <int> <dbl> <dbl> <dbl>
##  1 ailenumarası  chr       0    0     3063    NA  NA      NA
##  2 ailesıra      chr       0    0        8    NA  NA      NA
##  3 PassengerId   chr       0    0     4277    NA  NA      NA
##  4 HomePlanet    chr       0    0        2    NA  NA      NA
##  5 CryoSleep     fct       0    0        3    NA  NA      NA
##  6 kabinharfi    chr     100    2.3      9    NA  NA      NA
##  7 kabinnumarası chr       0    0     1506    NA  NA      NA
##  8 iskelebölgesi chr       0    0        3    NA  NA      NA
##  9 Destination   fct       0    0        4    NA  NA      NA
## 10 Age           dbl       0    0       86     0  28.7    79
## 11 VIP           fct       0    0        3    NA  NA      NA
## 12 RoomService   dbl      82    1.9    843     0 219.  11567
## 13 FoodCourt     dbl     106    2.5    903     0 439.  25273
## 14 ShoppingMall  dbl      98    2.3    716     0 177.   8292
## 15 Spa           dbl     101    2.4    834     0 303.  19844
## 16 VRDeck        dbl      80    1.9    797     0 311.  22272
## 17 Name          chr      94    2.2   4177    NA  NA      NA

Test verisindeki RoomServicelar rakamlardan oluştuğu için boşluk olan NA ları gidecekleri gezegenlere göre ortalama ile dolduracağız.

test <- test %>%
  group_by(Destination) %>%
  mutate_at(vars(RoomService), ~replace_na(., mean(., na.rm = TRUE)))

Roomservice için kontrolümüzü sağlıyoruz

test%>% describe_all()
## # A tibble: 17 × 8
##    variable      type     na na_pct unique   min  mean   max
##    <chr>         <chr> <int>  <dbl>  <int> <dbl> <dbl> <dbl>
##  1 ailenumarası  chr       0    0     3063    NA  NA      NA
##  2 ailesıra      chr       0    0        8    NA  NA      NA
##  3 PassengerId   chr       0    0     4277    NA  NA      NA
##  4 HomePlanet    chr       0    0        2    NA  NA      NA
##  5 CryoSleep     fct       0    0        3    NA  NA      NA
##  6 kabinharfi    chr     100    2.3      9    NA  NA      NA
##  7 kabinnumarası chr       0    0     1506    NA  NA      NA
##  8 iskelebölgesi chr       0    0        3    NA  NA      NA
##  9 Destination   fct       0    0        4    NA  NA      NA
## 10 Age           dbl       0    0       86     0  28.7    79
## 11 VIP           fct       0    0        3    NA  NA      NA
## 12 RoomService   dbl       0    0      846     0 219.  11567
## 13 FoodCourt     dbl     106    2.5    903     0 439.  25273
## 14 ShoppingMall  dbl      98    2.3    716     0 177.   8292
## 15 Spa           dbl     101    2.4    834     0 303.  19844
## 16 VRDeck        dbl      80    1.9    797     0 311.  22272
## 17 Name          chr      94    2.2   4177    NA  NA      NA

Test verisindeki FoodCourt içinde boşluk olanları sıfır olarak değiştirelim.

test <- test %>% mutate(FoodCourt = coalesce(FoodCourt, 0))

Test verisindeki FoodCourt’ta rakam ama ilk önce histogramını çıkararak boşluklara koyulacak en uygun rakamları görelim.

hist(test$FoodCourt)

FoodCourt için kontrolümüzü sağlıyoruz

test%>% describe_all()
## # A tibble: 17 × 8
##    variable      type     na na_pct unique   min  mean   max
##    <chr>         <chr> <int>  <dbl>  <int> <dbl> <dbl> <dbl>
##  1 ailenumarası  chr       0    0     3063    NA  NA      NA
##  2 ailesıra      chr       0    0        8    NA  NA      NA
##  3 PassengerId   chr       0    0     4277    NA  NA      NA
##  4 HomePlanet    chr       0    0        2    NA  NA      NA
##  5 CryoSleep     fct       0    0        3    NA  NA      NA
##  6 kabinharfi    chr     100    2.3      9    NA  NA      NA
##  7 kabinnumarası chr       0    0     1506    NA  NA      NA
##  8 iskelebölgesi chr       0    0        3    NA  NA      NA
##  9 Destination   fct       0    0        4    NA  NA      NA
## 10 Age           dbl       0    0       86     0  28.7    79
## 11 VIP           fct       0    0        3    NA  NA      NA
## 12 RoomService   dbl       0    0      846     0 219.  11567
## 13 FoodCourt     dbl       0    0      902     0 429.  25273
## 14 ShoppingMall  dbl      98    2.3    716     0 177.   8292
## 15 Spa           dbl     101    2.4    834     0 303.  19844
## 16 VRDeck        dbl      80    1.9    797     0 311.  22272
## 17 Name          chr      94    2.2   4177    NA  NA      NA

Test verisindeki ShoppingMall, Spa ve VRDeck’i bir arada boşluklarını sıfırlayalım.

test <- test %>% mutate(ShoppingMall = coalesce(ShoppingMall, 0),
                          Spa = coalesce(Spa, 0),
                          VRDeck = coalesce(VRDeck, 0))

ShoppingMall, Spa ve VRDeck için boşlukların sıfırlandıklarını kontrol edelim.

test%>% describe_all()
## # A tibble: 17 × 8
##    variable      type     na na_pct unique   min  mean   max
##    <chr>         <chr> <int>  <dbl>  <int> <dbl> <dbl> <dbl>
##  1 ailenumarası  chr       0    0     3063    NA  NA      NA
##  2 ailesıra      chr       0    0        8    NA  NA      NA
##  3 PassengerId   chr       0    0     4277    NA  NA      NA
##  4 HomePlanet    chr       0    0        2    NA  NA      NA
##  5 CryoSleep     fct       0    0        3    NA  NA      NA
##  6 kabinharfi    chr     100    2.3      9    NA  NA      NA
##  7 kabinnumarası chr       0    0     1506    NA  NA      NA
##  8 iskelebölgesi chr       0    0        3    NA  NA      NA
##  9 Destination   fct       0    0        4    NA  NA      NA
## 10 Age           dbl       0    0       86     0  28.7    79
## 11 VIP           fct       0    0        3    NA  NA      NA
## 12 RoomService   dbl       0    0      846     0 219.  11567
## 13 FoodCourt     dbl       0    0      902     0 429.  25273
## 14 ShoppingMall  dbl       0    0      715     0 173.   8292
## 15 Spa           dbl       0    0      833     0 296.  19844
## 16 VRDeck        dbl       0    0      796     0 305.  22272
## 17 Name          chr      94    2.2   4177    NA  NA      NA

Test verisindeki Name değişkeni de bize herhangi bir bilgi vermediği için onu veriden çıkaralım.

test<- test %>% select(-Name)

Test verisindeki kabinharfi değişkeninde ki boşluk olan Na’ları da AddNa ile kategorileştirelim

test$kabinharfi <- addNA(test$kabinharfi)
levels(test$kabinharfi)[is.na(levels(test$kabinharfi))] <- "NA"

Kabinharfini kontrol edelim.

test%>% describe_all()
## # A tibble: 16 × 8
##    variable      type     na na_pct unique   min  mean   max
##    <chr>         <chr> <int>  <dbl>  <int> <dbl> <dbl> <dbl>
##  1 ailenumarası  chr       0      0   3063    NA  NA      NA
##  2 ailesıra      chr       0      0      8    NA  NA      NA
##  3 PassengerId   chr       0      0   4277    NA  NA      NA
##  4 HomePlanet    chr       0      0      2    NA  NA      NA
##  5 CryoSleep     fct       0      0      3    NA  NA      NA
##  6 kabinharfi    fct       0      0      9    NA  NA      NA
##  7 kabinnumarası chr       0      0   1506    NA  NA      NA
##  8 iskelebölgesi chr       0      0      3    NA  NA      NA
##  9 Destination   fct       0      0      4    NA  NA      NA
## 10 Age           dbl       0      0     86     0  28.7    79
## 11 VIP           fct       0      0      3    NA  NA      NA
## 12 RoomService   dbl       0      0    846     0 219.  11567
## 13 FoodCourt     dbl       0      0    902     0 429.  25273
## 14 ShoppingMall  dbl       0      0    715     0 173.   8292
## 15 Spa           dbl       0      0    833     0 296.  19844
## 16 VRDeck        dbl       0      0    796     0 305.  22272

Test verisindeki PassengerId’de aile numarası aynı olanlara 1 olmayanlara 0 verelim.

test$aile <- ifelse(duplicated(test$ailenumarası) | duplicated(test$ailenumarası, fromLast=TRUE), 1, 0)

Test verisinde PassengerId’de tekrarlanan aile numaralarının ilk 20 satırına bakalım.

head(test[, c("PassengerId","ailenumarası","ailesıra","aile")], 20)
## # A tibble: 20 × 4
##    PassengerId ailenumarası ailesıra  aile
##    <chr>       <chr>        <chr>    <dbl>
##  1 0013_01     0013         01           0
##  2 0018_01     0018         01           0
##  3 0019_01     0019         01           0
##  4 0021_01     0021         01           0
##  5 0023_01     0023         01           0
##  6 0027_01     0027         01           0
##  7 0029_01     0029         01           0
##  8 0032_01     0032         01           1
##  9 0032_02     0032         02           1
## 10 0033_01     0033         01           0
## 11 0037_01     0037         01           0
## 12 0040_01     0040         01           1
## 13 0040_02     0040         02           1
## 14 0042_01     0042         01           0
## 15 0046_01     0046         01           1
## 16 0046_02     0046         02           1
## 17 0046_03     0046         03           1
## 18 0047_01     0047         01           1
## 19 0047_02     0047         02           1
## 20 0047_03     0047         03           1

Test verisinde aile numarasına, aileırasına ve kabinnumarasına ihtiyacımız kalmadığı için sütunları silelim.

test<- test %>% select(-c(ailenumarası, ailesıra, kabinnumarası))

Test verisinde kalan son değişkenlerimizi kontrol edelim.

test %>% describe_all()
## # 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   4277    NA  NA       NA
##  2 HomePlanet    chr       0      0      2    NA  NA       NA
##  3 CryoSleep     fct       0      0      3    NA  NA       NA
##  4 kabinharfi    fct       0      0      9    NA  NA       NA
##  5 iskelebölgesi chr       0      0      3    NA  NA       NA
##  6 Destination   fct       0      0      4    NA  NA       NA
##  7 Age           dbl       0      0     86     0  28.7     79
##  8 VIP           fct       0      0      3    NA  NA       NA
##  9 RoomService   dbl       0      0    846     0 219.   11567
## 10 FoodCourt     dbl       0      0    902     0 429.   25273
## 11 ShoppingMall  dbl       0      0    715     0 173.    8292
## 12 Spa           dbl       0      0    833     0 296.   19844
## 13 VRDeck        dbl       0      0    796     0 305.   22272
## 14 aile          dbl       0      0      2     0   0.45     1

TAHMİNLERİMİZE BAŞLAYALIM

1. LOJİSTİK (LOGISTIC) REGRESYON NEDİR?

Lojistik regresyon, bağımlı değişkenin kategorik bir değişken olduğu regresyon problemi gibidir. Doğrusal sınıflandırma problemlerinde yaygın bir biçimde kullanılır. Regresyon denilmesine rağmen burada bir sınıflandırma söz konusudur.Lojistik regresyon, bir sonucu belirleyen bir veya daha fazla bağımsız değişken bulunan bir veri kümesini analiz etmek için kullanılan istatistiksel bir yöntemdir. Sonuç, ikili bir değişkenle ölçülür (yalnızca iki olası sonuç vardır).Lojistik regresyonun amacı, iki yönlü karakteristiği (bağımlı değişken = yanıt veya sonuç değişkeni) ile ilgili bir dizi bağımsız (öngörücü veya açıklayıcı) değişken arasındaki ilişkiyi tanımlamak için en uygun modeli bulmaktır. Videodan Anladığım Notlar: Örnek olarak genelde boy kilo verilir. Bağımlı değişken evet- hayır yada 1-0 gibi kategorik tiptedir. Bağımlı değişken kategorik gruplardan oluşuyorsa kullanılır.Kategorik bağımlı değişken ile bağımsız değişken arasındaki ilişkiyi inceler. Çeşitleri: ikili Lojistik Regresyon:Örnek olarak bağımlı değişken kadın-erkek yada kazandı-kaybetti gibi ikili sınıflardan oluşur. Çoklu Lojistik Regresyon:Bağımlı değişken üç ve daha fazla sınıftan oluşuyorsa kullanılır. Sıralı Lojistik regresyon:Bağımlı değişken sıralı kategorilerden oluşur.Örneğin insan değişkeninin bebek, çocuk, genç, yaşlı şeklinde bir sıraya göre sınıflara ayrılması.

LOGISTIC REGRESYON
LOGISTIC REGRESYON

Yazı Kaynakçası:https://medium.com/@rmys.nzl/r-i%CC%87le-lojistik-regresyon-analizi-600e188d2f1e

Video Kaynakçalarım: 1.https://www.youtube.com/watch?v=K4arTc6DYGs 2.https://www.youtube.com/watch?v=0KKnqRdYDBc

Bu analizimizde Lojistik Regresyon çeşitlerinden “İkili Lojistik Regresyon” çeşidini kullanıyoruz.Çünkü insanların hayatta kalıp kalmadığını öğrenmeye çalııyoruz.

Train veri setindeki PassengerId bize sonucu vereceği için o hariç bütün değişkenleri regresyonumuzda kullanıcağız.Bu yüzden PassengerId değişkenini Train setimizden çıkaralım.

train_set <- train[2:15]

Test veri setindeki PassengerId bize sonucu vereceği için o hariç bütün değişkenleri regresyonumuzda kullanıcağız.Bu yüzden PassengerId değişkenini Test setimizden çıkaralım.

test_set <- test[2:14]

Modelin gerçek sonuçları elimizde olmadığı için Train versini 0.83 olarak traning_set ve 0.17’sini de testing_set olarak ikiye ayıralım.Daha sonra traning_set verisini testing_set üzerinde kullanarak tahminlerimizin gerçekle ne kadar uyumlu olup olmadığını gözlemleyeceğiz.

library(caTools)
set.seed(179)
split= sample.split(train_set$Transported, SplitRatio = 0.83)
training_set =subset (train_set, split ==TRUE)
testing_set =subset (train_set, split ==FALSE)

Lojistik regresyon modelini tanımlayalım ve oluşturalım.Modelin bağımlı değişkenini “Transported” ve bağımsız değişkenlerin hepsini almak için “.” koyalım.Bağımlı değişkenimiz iki kategorili olduğu için binomial ile modelin olasılık dağılımını belirleyelim.Tahminlerimizi yapmak için Training_set’i kullanalım.

logistic =glm(formula = Transported~ .,
              family = binomial,
              data = training_set)
## Warning: glm.fit: fitted probabilities numerically 0 or 1 occurred

Oluşturduğumuz lojistik regresyon üzerindeki tahminlerimizi Testing_set’ten Transported’ı çıkararak Testing_set üzerinde tahinimizi yapalım.

tahmin= predict(logistic, type= 'response', newdata = testing_set[-13])
## Warning in predict.lm(object, newdata, se.fit, scale = 1, type = if (type == :
## prediction from rank-deficient fit; attr(*, "non-estim") has doubtful cases

Tahmin değerimizin 0.5’ten büyük olup olmadığını kontrol edelim.Eğer tahmin değeri 0.5’ten büyükse 1 değilse 0 değeri atasın

tahminim= ifelse(tahmin>0.5, 1 ,0)

gerçekdegerlerim eğer Testing_set’indeki Tansported değerlerimiz True ise 1 False ise 0 olarak atasın.

gercekdegerlerim<- ifelse (testing_set[13]== TRUE, 1,0)

Modelimizin geçerliliğini test edelim.Yani gercek değelerimle tahminizi karşılaştıralım.

cm = table(gercekdegerlerim, tahminim)
cm
##                 tahminim
## gercekdegerlerim   0   1
##                0 548 186
##                1 127 617

Kurduğum regresyona göre gerçekdegerlerim 0 olduğunda tahminim 548 kere insanların ölmediğini doğru 186 kere de yanlış tahmin etmişim.gerçekdegerlerim 1 olduğunda 617 kere insanların öldüğünü doğru 127 kere yanlış tahmin etmişim. Bulduğum tahmini oranım şu şekilde

(548+617)/(548+617+186+127)
## [1] 0.7882273

Tahminime göre yolcuların ~%79’u ölmüştür.

Lojistik regresyonumuzu Train_set için oluşturalım ve bağımlı modelimiz Transported ile bağımsız değişkenler arasındaki ilişkiyi bulalım.

logistic_son<-glm(formula = Transported~ .,
              family = binomial,
              data = train_set)
## Warning: glm.fit: fitted probabilities numerically 0 or 1 occurred

Bulduğumuz lojistik regresyonumuzu test_set adında yeni bir veri setinde gözlemleyelim.

tahmin= predict(logistic_son, type= 'response', newdata = test_set)

Test_set verisindeki tahmin değerimizin 0.5’ten büyük olup olmadığını kontrol edelim.Eğer tahmin değeri 0.5’ten büyükse True değilse False değeri atasın.

tahminim= ifelse(tahmin>0.5, TRUE, FALSE)

tahminim’i karaktere çevirelim ve adını Transported olarak değiştirelim.Test setimizin içindeki PassengerId’i de alalım ve Passenger Id olarak adını değiştirelim.

Transported <- as.character(tahminim)
PassengerId <- test$PassengerId

Transported’ımızı vektör olarak değiştirelim.

Transported<-as.vector(Transported)

İki değişkeni birleştirelim.

submission <- cbind(PassengerId, Transported)

Submission verilerimizi tabloya dönüştürelim.

submission <- as.data.frame(submission)

Raporlama yapabilmek için stringr paketini yükleyelim.

library(stringr)

Submission verilerimizi raporlayalım.

submission$Transported <- str_to_title(submission$Transported)

Raporladığımız Submission verilerimizi excel dosyasına aktaralım.

write.csv(submission, "submission_logistic.csv", row.names =FALSE, quote=FALSE)

Kaggle Logistic Regresyon sonucum

Kaggle Logistic Regresyon Sonucum
Kaggle Logistic Regresyon Sonucum

Bu sonuca göre yaptığım tahmin %80 oranında doğrudur.

2. NAIVE BAYES REGRESYON?

Bu teorem bir rassal değişken için olasılık dağılımı içinde koşullu olasılıklar ile marjinal olasılıklar arasındaki ilişkiyi gösterir.girdi değişkenlerinin bağımsız olduğunu ve her birinin sonucu etkilemediğini varsayar. Bu “naive” (saf) varsayım, modelin hesaplamalarını basitleştirir ve hesaplama karmaşıklığını azaltır.Girdi değişkenlerinin bir dizi kategorik değer olmasına dayanır. Bu kategorik değerler, bağımlı değişkenin tahminlenmesinde kullanılır. Model, verilerdeki desenleri öğrenir ve bu desenleri kullanarak yeni girdi değerleri için bir tahmin yapar.Kullanım alanlarına örnek olarak gerçek zamanlı tahmin, çok sınıflı tahmin, metin sınıflandırması, spam filtreleme, duyarlılık analizi ve öneri sistemleri verilebilir.

NAIVE BAYES REGRESYONU
NAIVE BAYES REGRESYONU
P ( A | B ) = B olayı gerçekleştiğinde A olayının gerçekleşme olasılığı
P ( A ) = A olayının gerçekleşme olasılığı
P ( B | A ) = A olayı gerçekleştiğinde B olayının gerçekleşme olasılığı
P ( B ) = B olayının gerçekleşme olasılığı

Video Notlarım: Naive Bayes genel olarak koşullu olasılıklar üzerine kurulmuş bir algoritmadır.Genel olarak bir sınıflandırma olarak kullanılması ve sayılabilir veriler üzerinde kullanılması daha kolaydır. Örnek olarak bir kişinin grip olup olmadığını anlamak için kullanabiliriz.Bir kişinin burun akıntısı, üşüme, ateş ve baş ağrısı verilerine bakarak grip olup olmadığını tahmin etmeye çalırız. Burun akıntısı, üşüme, ateş ve baş ağrısı bizim eğitim setimiz, tahmin ettiğimiz yer ise test setimiz olur.

Yazı Kaynakçam:https://medium.com/@batubilgili1907.bb/naive-bayes-s%C4%B1n%C4%B1fland%C4%B1rma-6dad0795f825

Video Kaynakçalarım: https://www.youtube.com/watch?v=uJ0eDLx4zr0 https://www.youtube.com/watch?v=5zIK_h9GhFk

Naive Bayes modelimizi oluşturalım.Transported değişkenini diğer tüm bağımsız değişkenlere göre tahmin edelim.Tahminlerimizi yapmak için Training_set’i kullanalım.Oluşturduğumuz lojistik regresyon üzerindeki tahminlerimizi Testing_set’ten Transported’ı çıkararak Testing_set üzerinde tahinimizi yapalım.

library(e1071)
nb_modelim<- naiveBayes(Transported~ ., data= training_set )

preds<-predict(nb_modelim, newdata= testing_set[-13], type = "raw") %>% data.frame()

y_pred değerimizin 0.5’ten büyük olup olmadığını kontrol edelim.Eğer tahmin değeri 0.5’ten büyükse 1 değilse 0 değeri atasın.

y_pred= ifelse(preds$TRUE. > 0.5,1, 0)

Modelimizin geçerliliğini test edelim.gercekdeğerlerim’le y_pred’i karşılaştıralım.

cm = table (gercekdegerlerim, y_pred)
cm
##                 y_pred
## gercekdegerlerim   0   1
##                0 338 396
##                1  56 688

Kurduğum regresyona göre gerçekdegerlerim 0 olduğunda tahminim 338 kere insanların ölmediğini doğru 396 kere de yanlış tahmin etmişim.gerçekdegerlerim 1 olduğunda 688 kere insanların öldüğünü doğru 56 kere yanlış tahmin etmişim.

Bulduğum tahmini oranım şu şekilde

(338+688)/ (338+688+396+56)
## [1] 0.6941813

Tahminime göre yolcuların ~%70’i ölmüştür.

Naive Bayes regresyonumuzu Train_set için oluşturalım ve bağımlı modelimiz Transported ile bağımsız değişkenler arasındaki ilişkiyi bulalım.

nb_son = naiveBayes(Transported~ ., data= train_set )

Bulduğumuz lojistik regresyonumuzu test_set adında yeni bir veri setinde gözlemleyelim.

preds<- predict(nb_son, newdata = test_set, type = "raw") %>% data.frame()

Test_set verisindeki tahmin değerimizin 0.5’ten büyük olup olmadığını kontrol edelim.Eğer tahmin değeri 0.5’ten büyükse True değilse False değeri atasın.

y_pred= ifelse(preds$TRUE. > 0.5,TRUE, FALSE)

y_pred’i karaktere çevirelim ve adını Transported olarak değiştirelim.Test setimizin içindeki PassengerId’i de alalım ve PassengerId olarak adını değiştirelim.

Transported <- as.character(y_pred)
PassengerId <- test$PassengerId

Transported’ımızı vektör olarak değiştirelim.

Transported<-as.vector(Transported)

İki değişkeni birleştirelim.

submission <- cbind(PassengerId, Transported)

Submission verilerimizi tabloya dönüştürelim.

submission <- as.data.frame(submission)

Submission verilerimizi raporlayalım.

submission$Transported <- str_to_title(submission$Transported)

Raporladığımız Submission verilerimizi excel dosyasına aktaralım.

write.csv(submission, "submission_nb.csv", row.names =FALSE, quote=FALSE)

Kaggle Naıve Bayes Regresyon sonucum

Kaggle Naıve Bayes Sonucum Bu sonuca göre yaptığım regresyon tahminim ~%72 oranında doğrudur.

3. SVM REGRESYON NEDİR?

Destek Vektör Makineleri (SVM), düzlem üzerindeki noktaların bir doğru veya hiper düzlem ile ayrıştırılması ve sınıflandırılmasıdır.Küçük veya orta büyüklükteki veri setleri için uygundur. Ölçeğe duyarlıdır. Ölçek edilmesi gerekir.Hard Margin (kesin kenar) ve Soft Margin (yumuşak kenar) arasındaki dengeyi C ile kontrol edebiliriz. C büyüdükçe marj(kenar) daralır.Modelde aşırı uyum olursa C’nin azlatılması gerekir.2 boyutta açıklanamayan değişimleri boyut arttırarak çözüyormuş gibi yapılan hilelere Kernel Trick denir.2 boyutta açıklayamadığımız veri setimizi daha fazla boyutta açıklamak için kullanılan Kernel Trick metoduna Polynomial Kernel denir.Her bir noktanın belirli bir noktaya ne kadar benzediğini normal dağılım ile hesaplayan, ona göre sınıflandıran Kernel Trick metoduna RBF Kernel denir.Dağılım genişliğini kontrol ettiğimiz gamma değeri ne kadar küçükse dağılım o kadar geniş olur. Model aşırı uyumlu olmuşsa gamma değerini düşürmemiz, model yetersiz uyumlu olmuşsa gamma değerini yükseltmemiz gerekir.

Video Notlarım:

Bu yöntem sınıflandırmayı doğrusal ve doğrusal olmayan bir fonksiyon yardımıyla yerine getirir.Veriyi birbirinden ayırmak için en uygun fonksiyonun tahmin edilmesi esasına dayanır.Problemi ilk öBir doğru yardımıyla iki sınıf birbirinden ayrılır.İki sınıf arasındaki en fazla aralığı olan çizgiyi tercih eder.Bu da bize daha doğru bir sonuç elde etmemize olanak sağlıyor..Bu sınıflardan birincisine evet ikincisine hayır diye ikiye ayır.Karar değişkeni ilk başta evet ise o kararı ver eğer hayırsa o değişkeni tekrar evet hayır şeklinde ikiye böl diye devam eder.Yani böl parçala yönet taktiğini kullanır.Regresyonlarda kullanırken elimizdeki verilerden yola çıkarak sonraki veriyi tahmin etmeye çalışıyoruz.

SVM REGRESYON:
SVM REGRESYON:

Yazı Kaynakçam:https://medium.com/deep-learning-turkiye/nedir-bu-destek-vekt%C3%B6r-makineleri-makine-%C3%B6%C4%9Frenmesi-serisi-2-94e576e4223e

Video Kaynakçalarım: https://www.youtube.com/watch?v=SIU_GWaEiIs https://www.youtube.com/watch?v=yGQatyHIusA https://www.youtube.com/watch?v=kHDPVC3WsTg

SVM Lineer

Video Notlarım: Bağımlı değişken ile bağımsız değişken arasında doğrusal bir ilişki vardır. Bir sabit ve birden fazla katsayı bağımsız değişkenlerinden oluşur.Katsayılar en küçük kareler yöntem ile bulunur.Bu yöntemle tahmin edilen bağımlı değişkendeki hatalar minimize edilir.

Svm Lineer modelimizi oluşturalım.Transported değişkenini diğer tüm bağımsız değişkenlere göre tahmin edelim.Tahminlerimizi yapmak için Training_set’i kullanalım.Oluşturduğumuz lojistik regresyon üzerindeki tahminlerimizi Testing_set’ten Transported’ı çıkararak Testing_set üzerinde tahinimizi yapalım.Burada biz doğrusal regresonda doğru mu yanlış mı modelini oluşturuyoruz.

library(e1071)
fit_svm <- svm(Transported ~ ., data = training_set, 
               type = "C-classification",
               kernel = "linear")
preds <-predict(fit_svm, newdata = testing_set[-13], type = "raw")%>% 
  data.frame()

Preds’imiz tek değişken verdiği için “.” kullanıyoruz.True ise 1 False ise 0 olsun.

y_pred = ifelse(preds$.== TRUE, 1, 0)

Modelimizin geçerliliğini test edelim.gercekdeğerlerim’le y_pred’i karşılaştıralım.

cm = table (gercekdegerlerim, y_pred)
cm
##                 y_pred
## gercekdegerlerim   0   1
##                0 535 199
##                1 116 628

Kurduğum regresyona göre gerçekdegerlerim 0 olduğunda tahminim 53 kere insanların ölmediğini doğru 199 kere de yanlış tahmin etmişim.gerçekdegerlerim 1 olduğunda 628 kere insanların öldüğünü doğru 116 kere yanlış tahmin etmişim.

Bulduğum tahmini oranım şu şekilde

(535+628)/(535+628+199+116)
## [1] 0.7868742

Regresyon tahminime göre yolcuların ~%79’u ölmüş, ~%21’i yaşamaktadır.

SVM Linear regresyonumuzu Train_set için oluşturalım ve bağımlı modelimiz olan Transported ile bağımsız değişkenler arasındaki ilişkiyi bulalım.

svm_son = svm(Transported ~ ., data = train_set,
              type = "C-classification", 
              kernel = "linear")

Bulduğumuz lojistik regresyonumuzu test_set adında yeni bir veri setinde gözlemleyelim.

preds <- predict(svm_son, newdata =test_set,type = "raw") %>%data.frame()

Test_set verisindeki tahmin değerimizi karşılaştıralım.

y_pred = preds$.

y_pred’i karaktere çevirelim ve adını Transported olarak değiştirelim.Test setimizin içindeki PassengerId’i de alalım ve PassengerId olarak adını değiştirelim.

Transported <- as.character(y_pred)
PassengerId <- test$PassengerId

Transported’ımızı vektör olarak değiştirelim.

Transported<-as.vector(Transported)

İki değişkeni birleştirelim.

submission <- cbind(PassengerId, Transported)

Submission verilerimizi tabloya dönüştürelim.

submission <- as.data.frame(submission)

Submission’ı tablo haline getirelim.

submission$Transported <- str_to_title(submission$Transported)

Submission’ı Excel dosyasına çevirelim.

write.csv(submission, "submission_smv_linear.csv", row.names =FALSE, quote=FALSE)

Kaggle SVM Linear Regresyon sonucum

Kaggle SVM LINEAR Sonucum
Kaggle SVM LINEAR Sonucum

Tahmin ettiğim oran % 0.786 iken Kaggle’da % 0.794 olması modelimin geçerliliğin varsayılabileceğini gösteriyor.

Svm Radial

Svm Radial regresyonumuzu kuralım.

library(e1071)
svm_ker_son = svm(Transported ~ ., data = training_set, 
               type = "C-classification",
               kernel = "radial")
preds <-predict(svm_ker_son, newdata = testing_set [-13], type = "raw")%>% 
  data.frame()
y_pred = preds$.
y_pred = ifelse(preds$.== TRUE, 1, 0)

Modelimizin geçerliliğini test edelim.

cm = table (gercekdegerlerim, y_pred)
cm
##                 y_pred
## gercekdegerlerim   0   1
##                0 540 194
##                1 129 615

Bulduğum tahmini oranım şu şekilde

(540+615)/(540+615+129+194)
## [1] 0.7814614

Regresyon tahminime göre yolcuların ~%79’u ölmüş, ~%21’i yaşamaktadır.

Transported <- as.character(y_pred)
PassengerId <- test$PassengerId
Transported<-as.vector(Transported)
submission <- cbind(PassengerId, Transported)
## Warning in cbind(PassengerId, Transported): number of rows of result is not a
## multiple of vector length (arg 2)
submission <- as.data.frame(submission)
submission$Transported <- str_to_title(submission$Transported)

Submission’ımızı excel olarak kaydedilelim ve Kaggle gönderelim.

write.csv(submission, "submission_smv_radial.csv", row.names =FALSE, quote=FALSE)

Kaggle SVM Radial Regresyon sonucum

Kaggle SVM Radial Sonucum
Kaggle SVM Radial Sonucum

Kaggle sonucuna göre yaptığım regresyon %80 oranında doğru sonuç vermiştir.

4.DECISION TREES NEDİR?

Karar ağacı algoritması, veri madenciliği sınıflandırma algoritmalarından biridir.Önceden tanımlanmış bir hedef değişkene sahiplerdir. Yapıları itibariyle en tepeden en aşağı inen bir strateji sunmaktadırlar.Bir karar ağacı, çok sayıda kayıt içeren bir veri kümesini, bir dizi karar kuralları uygulayarak daha küçük kümelere bölmek için kullanılan bir yapıdır. Yani basit karar verme adımları uygulanarak, büyük miktarlardaki kayıtları, çok küçük kayıt gruplarına bölerek kullanılan bir yapıdır.

Karar Ağaçlarının Avantajları:

-Anlaması ve yorumlaması kolaydır. Kullanılan ağaç yapılar görselleştirilebilir.
-Az oranda bir veri hazırlığına ihtiyaç duyar. Fakat unutulmamalıdır ki bu model kayıp değerleri desteklememektedir.
-Kullanılan ağacın maliyeti, ağacı eğitmek için kullanılan veri noktalarının sayısıyla logaritmiktir.
-Hem sayısal hem de kategorik verileri işleyebilir.
-Çok çıktılı problemleri ele alabilmektedirler.
-İstatistiksel testler kullanılarak bir modelin doğrulanması mümkündür.
-Karar ağaçları, parametrik olmayan bir yöntem olarak düşünülebilir. Yani uzay dağılımı ve sınıflandırma yapısı hakkında bir yaklaşıma sahip değilledir.
Karar Ağaçlarının Dezavantajları:

-Veriyi iyi bir şekilde açıklamayan aşırı karmaşık ağaçlar üretilebilir. Bu durumda ağaç dallanması takip edilemeyebilir.
-Ezbere öğrenme yaşanabilir (“over-fitting”). Bu problemin çözümü için model parametrelere kısıtlamalar ve budama gibi yöntemler kullanılabilir. Budama işlemi, az sayıda nesneyi barındıran yaprak düğümlerin karar ağacı grafiğinden atılmasını ifade etmektedir 

Video Notlarım: Karar ağaçları genellikle yukarıdan aşağıya doğru okunur.İfelse kuralı yani birşey olduğunda diğeri oluyor mu gibi kuralları işleterek aşağı doğru ulaşmaya çalışırız.Her nitelik bir düğüm tarafından temsil ediliyor.Şekil itibariyle ağaca benzediği için ağaç tabanlı algoritma denir.Sınıflandırmalarda kullanımı yaygındır.Kök düğümünün belirlenmesi karar ağacının verimliliğini etkiler.Yani karar ağacının ne kadar iyi tahmin etiğini doğrudan kök düğümü etkiler.Kök düğümü dalları dallarda yaprakları oluşturur.

DECISION TREES REGRESYON
DECISION TREES REGRESYON

Örneğin bir miktar paramız var ya bunula bakkal açıcaz ya da bankaya yatırıcaz.İlk durumda 100 tl kazırken ikinci durumda 10 tl kazandığımızı varsayalım.Bu durumda herkes bakkal açmak isteyecektir çünkü bankanın getirisinden daha fazla getirisi vardır.Bakkal açanların her on tane kişiden 3’ü kazanıyor 7 tanesi ise iflas ediyor.Bankaya yatıranların ise 9 kişisi başarılı bir kişi başarısız oluyor.Bakkal açıldığında iflas edenler anaparalarını da kaybetikleri için zararları büyük oluyor.Bunun gösterimini karar ağaçları kullanarak yapabiliriz.

Yazı Kaynakçam:https://medium.com/@k.ulgen90/makine-%C3%B6%C4%9Frenimi-b%C3%B6l%C3%BCm-5-karar-a%C4%9Fa%C3%A7lar%C4%B1-c90bd7593010

Video Kaynakçalarım: https://www.youtube.com/watch?v=fxHeEWRY9P8 https://www.youtube.com/watch?v=t0Qw4Fm6yeM

library(rpart)
library(rpart.plot)
library(randomForest)
## randomForest 4.7-1.1
## Type rfNews() to see new features/changes/bug fixes.
## 
## Attaching package: 'randomForest'
## The following object is masked from 'package:dplyr':
## 
##     combine
## The following object is masked from 'package:ggplot2':
## 
##     margin
library(caret)
## Zorunlu paket yükleniyor: lattice
## 
## Attaching package: 'caret'
## The following object is masked from 'package:purrr':
## 
##     lift

Bu analizde Transported’ın faktör olmasını istediği için Transported’ı faktöre çevirelim.

training_set$Transported <- as.factor(training_set$Transported)
testing_set$Transported <- as.factor(testing_set$Transported)
train_set$Transported <- as.factor(train_set$Transported)

Traininig_setteki tahminimize göre karar ağacımızı yorumlayalım.

fit_tree <- rpart::rpart(Transported ~ ., data = training_set)
summary(fit_tree)
## Call:
## rpart::rpart(formula = Transported ~ ., data = training_set)
##   n= 7215 
## 
##           CP nsplit rel error    xerror        xstd
## 1 0.43004747      0 1.0000000 1.0000000 0.011859657
## 2 0.03946756      1 0.5699525 0.5699525 0.010683467
## 3 0.01061156      4 0.4515498 0.4607651 0.009962127
## 4 0.01000000      5 0.4409383 0.4537839 0.009908550
## 
## Variable importance
##   CryoSleep  HomePlanet         Spa      VRDeck RoomService   FoodCourt 
##          37          18          14          13           9           8 
## 
## Node number 1: 7215 observations,    complexity param=0.4300475
##   predicted class=TRUE   expected loss=0.4963271  P(node) =1
##     class counts:  3581  3634
##    probabilities: 0.496 0.504 
##   left son=2 (4698 obs) right son=3 (2517 obs)
##   Primary splits:
##       CryoSleep    splits as  LRL,        improve=756.3125, (0 missing)
##       Spa          < 0.5    to the right, improve=428.8224, (0 missing)
##       RoomService  < 0.5    to the right, improve=425.8342, (0 missing)
##       VRDeck       < 0.5    to the right, improve=402.2598, (0 missing)
##       ShoppingMall < 0.5    to the right, improve=243.2345, (0 missing)
##   Surrogate splits:
##       HomePlanet  splits as  LR,         agree=0.827, adj=0.504, (0 split)
##       Spa         < 0.5    to the right, agree=0.718, adj=0.192, (0 split)
##       FoodCourt   < 0.5    to the right, agree=0.699, adj=0.138, (0 split)
##       VRDeck      < 0.5    to the right, agree=0.697, adj=0.130, (0 split)
##       RoomService < 0.5    to the right, agree=0.688, adj=0.107, (0 split)
## 
## Node number 2: 4698 observations,    complexity param=0.03946756
##   predicted class=FALSE  expected loss=0.3361005  P(node) =0.6511435
##     class counts:  3119  1579
##    probabilities: 0.664 0.336 
##   left son=4 (1184 obs) right son=5 (3514 obs)
##   Primary splits:
##       RoomService < 346.5  to the right, improve=106.28710, (0 missing)
##       Spa         < 266.5  to the right, improve=102.95560, (0 missing)
##       Age         < 12.5   to the right, improve= 99.37744, (0 missing)
##       FoodCourt   < 668    to the left,  improve= 78.79837, (0 missing)
##       VRDeck      < 122.5  to the right, improve= 71.85152, (0 missing)
##   Surrogate splits:
##       kabinharfi splits as  RRRLRRRRR,  agree=0.749, adj=0.004, (0 split)
##       Age        < 78     to the right, agree=0.748, adj=0.002, (0 split)
## 
## Node number 3: 2517 observations
##   predicted class=TRUE   expected loss=0.1835518  P(node) =0.3488565
##     class counts:   462  2055
##    probabilities: 0.184 0.816 
## 
## Node number 4: 1184 observations
##   predicted class=FALSE  expected loss=0.1528716  P(node) =0.1641026
##     class counts:  1003   181
##    probabilities: 0.847 0.153 
## 
## Node number 5: 3514 observations,    complexity param=0.03946756
##   predicted class=FALSE  expected loss=0.3978372  P(node) =0.4870409
##     class counts:  2116  1398
##    probabilities: 0.602 0.398 
##   left son=10 (1094 obs) right son=11 (2420 obs)
##   Primary splits:
##       Spa          < 266.5  to the right, improve=153.20320, (0 missing)
##       VRDeck       < 135.5  to the right, improve=125.33670, (0 missing)
##       Age          < 12.5   to the right, improve= 70.35434, (0 missing)
##       ShoppingMall < 627    to the left,  improve= 57.46630, (0 missing)
##       FoodCourt    < 1383.5 to the left,  improve= 45.17312, (0 missing)
##   Surrogate splits:
##       kabinharfi   splits as  LRLRRRRRR,  agree=0.696, adj=0.024, (0 split)
##       FoodCourt    < 3197.5 to the right, agree=0.692, adj=0.009, (0 split)
##       VRDeck       < 9049   to the right, agree=0.691, adj=0.007, (0 split)
##       ShoppingMall < 7126   to the right, agree=0.689, adj=0.002, (0 split)
##       VIP          splits as  RLR,        agree=0.689, adj=0.001, (0 split)
## 
## Node number 10: 1094 observations
##   predicted class=FALSE  expected loss=0.178245  P(node) =0.1516286
##     class counts:   899   195
##    probabilities: 0.822 0.178 
## 
## Node number 11: 2420 observations,    complexity param=0.03946756
##   predicted class=FALSE  expected loss=0.4971074  P(node) =0.3354123
##     class counts:  1217  1203
##    probabilities: 0.503 0.497 
##   left son=22 (780 obs) right son=23 (1640 obs)
##   Primary splits:
##       VRDeck       < 233.5  to the right, improve=177.74620, (0 missing)
##       FoodCourt    < 2068.5 to the left,  improve= 50.61732, (0 missing)
##       ShoppingMall < 1540.5 to the left,  improve= 34.70316, (0 missing)
##       Age          < 7.5    to the right, improve= 34.32618, (0 missing)
##       kabinharfi   splits as  RRRRLLLRR,  improve= 20.58745, (0 missing)
##   Surrogate splits:
##       FoodCourt   < 6922.5 to the right, agree=0.682, adj=0.014, (0 split)
##       kabinharfi  splits as  RRLRRRRRR,  agree=0.681, adj=0.009, (0 split)
##       Age         < 67.5   to the right, agree=0.679, adj=0.004, (0 split)
##       RoomService < 343    to the right, agree=0.679, adj=0.003, (0 split)
##       Spa         < 261.5  to the right, agree=0.679, adj=0.003, (0 split)
## 
## Node number 22: 780 observations,    complexity param=0.01061156
##   predicted class=FALSE  expected loss=0.2192308  P(node) =0.1081081
##     class counts:   609   171
##    probabilities: 0.781 0.219 
##   left son=44 (710 obs) right son=45 (70 obs)
##   Primary splits:
##       FoodCourt    < 3183.5 to the left,  improve=46.897930, (0 missing)
##       kabinharfi   splits as  RRRLRLL-R,  improve=17.488260, (0 missing)
##       VIP          splits as  LRR,        improve= 5.894872, (0 missing)
##       VRDeck       < 1678.5 to the right, improve= 5.828403, (0 missing)
##       ShoppingMall < 2037   to the left,  improve= 5.681097, (0 missing)
## 
## Node number 23: 1640 observations
##   predicted class=TRUE   expected loss=0.3707317  P(node) =0.2273042
##     class counts:   608  1032
##    probabilities: 0.371 0.629 
## 
## Node number 44: 710 observations
##   predicted class=FALSE  expected loss=0.1647887  P(node) =0.0984061
##     class counts:   593   117
##    probabilities: 0.835 0.165 
## 
## Node number 45: 70 observations
##   predicted class=TRUE   expected loss=0.2285714  P(node) =0.00970201
##     class counts:    16    54
##    probabilities: 0.229 0.771
rpart.plot(fit_tree)

Ağacın en üst kısmı yolcuların CryoSleep’te yakalanıp yakalanmadığını gösteriyor.Eğer yolcular CryoSleep’te yakalanmışlarsa yani No yolundan devam edersek %35 oranında ölmüşler demektir.Eğer CryoSelep’te yakalanmamışlarsa yani Yes yolundan devam edersek RoomService almışlarsa ve bu tutar 347den fazla veya eşitse yolcuların %16sı ölmemişerdir.Eğer bu tutardan daha az almışlarsa %49 oranında ölmemişlerdir.Yolcular Spa almışlarsa ve bu tutar 267’den fazla veya eşitse %15 oranında ölmemişler, bu tutardan daha az alanlar ise %34 olasılıkla ölmemişlerdir.VrDeck almış ve bu tutar 234’ten fazla veya eşitse %11 oranında ölmüş ama almamışlarsa ölmüşler demektir.Aldığını varsaydığımızda Foodcourt alanlar %10 oranında ölmemişler almayanlar ise %1 oranında ölmüşlerdir.

preds= predict(fit_tree, newdata = testing_set[-13], type="class")
y_pred = ifelse(preds == TRUE, 1, 0)

Modelimizin geçerliliğini tahminimiz ve gercekdeğerlerimizle karşılaştıralım.

cm= table(gercekdegerlerim,y_pred)
cm
##                 y_pred
## gercekdegerlerim   0   1
##                0 477 257
##                1 114 630

Bulduğum tahmini oranım şu şekilde

(477+630)/(477+630+257+114)
## [1] 0.7489851

Kurduğumuz regresyon tahminine göre ~%75 oranında yolcuların öldüğü görülüyor.

Train_sete göre karar ağacımızı yorumlayalım.

fit_tree <- rpart::rpart(Transported ~ ., data = train_set)
summary(fit_tree)
## Call:
## rpart::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.03406721      1 0.5675550 0.5675550 0.009719864
## 3 0.01000000      4 0.4653534 0.4725377 0.009155549
## 
## Variable importance
##   CryoSleep  HomePlanet         Spa      VRDeck RoomService   FoodCourt 
##          38          19          14          13          10           6 
## 
## 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.5     to the right, improve=523.3930, (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:
##       HomePlanet  splits as  LR,          agree=0.825, adj=0.500, (0 split)
##       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.5     to the right, agree=0.692, adj=0.119, (0 split)
## 
## Node number 2: 5656 observations,    complexity param=0.03406721
##   predicted class=FALSE  expected loss=0.3350424  P(node) =0.6506384
##     class counts:  3761  1895
##    probabilities: 0.665 0.335 
##   left son=4 (1432 obs) right son=5 (4224 obs)
##   Primary splits:
##       RoomService < 346.5   to the right, improve=121.39640, (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:
##       kabinharfi splits as  RRRLRRRRR,   agree=0.749, adj=0.007, (0 split)
##       Age        < 78.5    to the right, agree=0.747, 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: 1432 observations
##   predicted class=FALSE  expected loss=0.1571229  P(node) =0.1647302
##     class counts:  1207   225
##    probabilities: 0.843 0.157 
## 
## Node number 5: 4224 observations,    complexity param=0.03406721
##   predicted class=FALSE  expected loss=0.3953598  P(node) =0.4859082
##     class counts:  2554  1670
##    probabilities: 0.605 0.395 
##   left son=10 (1391 obs) right son=11 (2833 obs)
##   Primary splits:
##       Spa          < 205     to the right, improve=168.00700, (0 missing)
##       VRDeck       < 135.5   to the right, improve=129.77700, (0 missing)
##       Age          < 12.5    to the right, improve= 76.46367, (0 missing)
##       FoodCourt    < 2507.5  to the left,  improve= 63.32833, (0 missing)
##       ShoppingMall < 627     to the left,  improve= 59.33765, (0 missing)
##   Surrogate splits:
##       kabinharfi   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.673, adj=0.006, (0 split)
##       Age          < 75.5    to the right, agree=0.672, adj=0.003, (0 split)
##       ShoppingMall < 7126    to the right, agree=0.671, adj=0.001, (0 split)
## 
## Node number 10: 1391 observations
##   predicted class=FALSE  expected loss=0.194105  P(node) =0.1600138
##     class counts:  1121   270
##    probabilities: 0.806 0.194 
## 
## Node number 11: 2833 observations,    complexity param=0.03406721
##   predicted class=FALSE  expected loss=0.4941758  P(node) =0.3258944
##     class counts:  1433  1400
##    probabilities: 0.506 0.494 
##   left son=22 (814 obs) right son=23 (2019 obs)
##   Primary splits:
##       VRDeck       < 355     to the right, improve=185.97790, (0 missing)
##       FoodCourt    < 2069.5  to the left,  improve= 64.45210, (0 missing)
##       ShoppingMall < 1540.5  to the left,  improve= 38.47446, (0 missing)
##       Age          < 7.5     to the right, improve= 36.46439, (0 missing)
##       kabinharfi   splits as  LRRRLLLRR,   improve= 27.25812, (0 missing)
##   Surrogate splits:
##       FoodCourt   < 10134.5 to the right, agree=0.715, adj=0.007, (0 split)
##       kabinharfi  splits as  RRLRRRRRR,   agree=0.714, adj=0.004, (0 split)
##       Age         < 68.5    to the right, agree=0.714, adj=0.004, (0 split)
##       RoomService < 343     to the right, agree=0.713, adj=0.001, (0 split)
## 
## Node number 22: 814 observations
##   predicted class=FALSE  expected loss=0.2088452  P(node) =0.09363856
##     class counts:   644   170
##    probabilities: 0.791 0.209 
## 
## Node number 23: 2019 observations
##   predicted class=TRUE   expected loss=0.3907875  P(node) =0.2322558
##     class counts:   789  1230
##    probabilities: 0.391 0.609
rpart.plot(fit_tree)

CryoSleep almamış olanların %35’i ölmüşler alanlar ise %65 oranla ölmemişlerdir.Roomservice alanların %16’sı ölmemiş almanyanların ise %49 u ölmemişlerdir.Spa alanların %16’sı ölmemiş almayanların ise %33’ü ölmemişlerdir.VrDeck alanların ise %9 ölmemiş almayanların %23’ü ölmüşlerdir.

preds= predict(fit_tree, newdata = test_set, type="class")
y_pred = ifelse(preds == TRUE,TRUE,FALSE)
Transported <- as.character(y_pred)
PassengerId<- test$PassengerId
Transported<- as.vector(Transported)
submission <- cbind(PassengerId, Transported)
submission <- as.data.frame(submission)
submission$Transported <- str_to_title(submission$Transported)

Dosyamızı Excel olarak kaydedelim ve Kaggle tahminimizi yükleyelim.

write.csv(submission, "submission_dt.csv", row.names =FALSE, quote=FALSE)

Kaggle Decision Trees Regresyon sonucum

Kaggle Decision Trees Sonucum
Kaggle Decision Trees Sonucum

Tahminimizde ki oranımız ~%75 iken Kaggle göre doğru tahminimiz %80 olduğu görülmektedir.

5.RANDOM FOREST NEDİR?

Birden çok karar ağacı üzerinden her bir karar ağacını farklı bir gözlem örneği üzerinde eğiterek çeşitli modeller üretip, sınıflandırma oluşturmanızı sağlamaktadır.Kullanım kolaylığı ve esnekliği; hem sınıflandırma hem de regresyon problemlerini ele aldığı için benimsenmesini ve kullanımının yaygınlaşmasını hızlandırdı.Algoritmaya yönelik en beğenilen nokta ise; veri kümeniz üzerinde çeşitli modellerin oluşturulması ile kümenizi yeniden ve daha derin keşfetme imkanı sunmasıdır.

Algoritma;

-Analiz edilecek veri seti hazırlanır,
(Analiz edilecek küme oluşturulur, gerekli görülürse veri temizlemesi gerçekleştirilir.)
-Algoritma her bir örnek için karar ağacı oluşturur ve her bir karar ağacının tahmini değer sonucu oluşur,
-Tahmin sonucu oluşan her değer için oylama gerçekleştirilir,
*(Sınıflandırma problemi için Modu (Mode), Regresyon problemi için Ortalamayı (Mean))
-Son olarak algoritma son tahmin için en çok oylanan değeri seçerek sonuç oluşturur.
 adımları ile analiz gerçekleştirmektedir. 

Video Notlarım: Karar ağaçlarını geliştirilmiş bir versiyonudur.Karar ağaçlarından farkı eğitim modelini oluştururken tek bir ağaç oluşturulur.Burada ise öznitelikler arasındanb rastgele seçerek farklı farklı dallanma alternatifleri ile birden fazla ağaç oluşturur.Burada ağaçların çokluğu en yüksek ve eğitim test doğruluğunu sağlayan ağaç tahmin probleminin çözümünde kullanılıyor. Dolayısıyla tek bir ağaç içinde yapılan tahminlere göre birden fazla ağaç arasında yapılan tahmin daha yüksek doğruluk oranı verdiği için Random Frest tercih ediliyor.

Random Forest Yazı Kaynakçam:https://medium.com/data-science-tr/makine-%C3%B6%C4%9Frenmesi-dersleri-5-bagging-ve-random-forest-2f803cf21e07

Video Kaynakçalarım: https://www.youtube.com/watch?v=Vley2U8cE94 https://www.youtube.com/watch?v=cdIDcPeOwg8

Random Forest regresyonumzu kuralım.

fit_rf<- randomForest(Transported~ ., 
                      data = training_set)

Kuduğumuz regresyona göre en önemli değişkenimizin hangisi olduğunu görelim.

fit_rf$importance
##               MeanDecreaseGini
## HomePlanet            39.83407
## CryoSleep            345.36529
## kabinharfi           225.27041
## iskelebölgesi         58.70838
## Destination           74.62152
## Age                  251.70692
## VIP                   22.36184
## RoomService          382.74795
## FoodCourt            308.18095
## ShoppingMall         262.69947
## Spa                  400.14327
## VRDeck               361.47966
## aile                  40.91830

Sonucumuza göre en önemli değerler Spa,RoomService ve Vrdeck olduğu görülmektedir.

En önemli değişkenleri bir de grafik olarak görelim.

varImpPlot(fit_rf)

preds= predict(fit_rf, newdata = testing_set[-13], type = "class")
y_pred= ifelse(preds== TRUE,1,0)
cm = table (gercekdegerlerim, y_pred)
cm
##                 y_pred
## gercekdegerlerim   0   1
##                0 552 182
##                1 125 619

Bulduğum tahmini oranım şu şekilde

(552+619)/(552+619+182+125)
## [1] 0.7922869

Random Forest regresyonumuza göre yaşayanlar ~%20 oranında ölenler ~%80 oranındadır.

fit_rf<- randomForest(Transported~ ., 
                      data = train_set)
preds= predict(fit_rf, newdata = test_set, type = "class")
y_pred= ifelse(preds== TRUE,TRUE,FALSE)
Transported <- as.character(y_pred)
PassengerId<- test$PassengerId
Transported<- as.vector(Transported)
submission <- cbind(PassengerId, Transported)
submission <- as.data.frame(submission)
submission$Transported <- str_to_title(submission$Transported)
write.csv(submission, "submission_rf.csv", row.names =FALSE, quote=FALSE)

Kaggle Random Forest Regresyon sonucum

Kaggle Random Forest Sonucum
Kaggle Random Forest Sonucum

Kaggle sonucum ve benim tahmin ettiğim oran birbirine çok yakın olduğu görülüyor.

KAGGLE TÜM GÖNDERİM SONUÇLARIM

Kaggle Tüm Gönderim Sonuçlarım
Kaggle Tüm Gönderim Sonuçlarım

Yüklediğim regresyonlardan Kaggleda elde ettiğimiz ; En iyi sonucumuzu veren modelimiz 0.80056(Kaggle sonucu) ile Lojistik Regresyon modelimiz en kötü sonucu ise 0.71451 (Kaggle sonucu) ile Naive Bayes Regresyon modelimiz vermiştir.Bu da bize geçerli modelimizi Lojistik Regresyon ile yapmanın daha iyi olacağını göstermektedir.