Final

Yiğit Arda DİZDAR

2024-01-16


Uzay Gemisi Titanik

Tanım:

Hangi yolcuların alternatif bir boyuta taşınacağını tahmin edinKozmik bir gizemi çözmek için veri bilimi becerilerinize ihtiyaç duyulan 2912 yılına hoş geldiniz. Dört ışık yılı öteden bir sinyal aldık ve işler pek iyi görünmüyor.

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

Dikkatsiz Uzay Gemisi Titanic , ilk varış noktası olan kavurucu 55 Cancri E’ye giderken Alpha Centauri’yi dönerken, bir toz bulutunun içine gizlenmiş bir uzay-zaman anormalliğiyle çarpıştı. Ne yazık ki 1000 yıl öncesindeki adaşı ile benzer bir kaderle karşılaştı. Gemi sağlam kalmasına rağmen yolcuların neredeyse yarısı alternatif bir boyuta taşındı!

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.

1. Sorunun tanımı ve ölçümleri

Öncelikle sorunu anlamamız gerekiyor. Yıl 2912 ve yıldızlararası yolcu gemisi Uzay Gemisi Titanik, bir toz bulutunun içine gizlenmiş bir uzay-zaman anormalliğiyle çarpıştı. Ne yazık ki 1000 yıl öncesindeki adaşı ile benzer bir kaderle karşılaştı. Gemi sağlam kalmasına rağmen yolcuların neredeyse yarısı alternatif bir boyuta taşındı! Kurtarma ekiplerinin kayıp yolcuları almasına yardımcı olmak için, hangi yolcuların başka bir boyuta taşındığını tahmin etmek amacıyla uzay gemisinin hasarlı bilgisayar sisteminden elde edilen kayıtları kullanmamız gerekiyor.

2. Veriler hakkında

2 CSV dosyası kullanacağız:

tren dosyası (spaceship_titanic_train.csv) — makine öğrenimi modelini oluşturmak için kullanılacak yolcuların kişisel kayıtlarını içerir. test dosyası (spaceship_titanic_test.csv) — yolcuların kalan üçte birinin (~4300) kişisel kayıtlarını içerir, ancak hedef değişkeni (yani yolcular için Taşınan değerini) içermez. Modelimizin görünmeyen veriler üzerinde ne kadar iyi performans gösterdiğini görmek için kullanılacaktır.

train_df <- read.csv("train.csv")
test_df <- read.csv("test.csv")
# Orijinal veri kümelerinde değişiklik yapılmasını önlemek için eğitim ve test verilerinin kopyasını oluşturmak için kullanılan kodlar
train_df_1 <- train_df
test_df_1 <- test_df
# Train verilerinin sütunları
names(train_df_1)
##  [1] "PassengerId"  "HomePlanet"   "CryoSleep"    "Cabin"        "Destination" 
##  [6] "Age"          "VIP"          "RoomService"  "FoodCourt"    "ShoppingMall"
## [11] "Spa"          "VRDeck"       "Name"         "Transported"
# Test verilerinin sütunları
names(test_df_1)
##  [1] "PassengerId"  "HomePlanet"   "CryoSleep"    "Cabin"        "Destination" 
##  [6] "Age"          "VIP"          "RoomService"  "FoodCourt"    "ShoppingMall"
## [11] "Spa"          "VRDeck"       "Name"
# Train verilerinin veri türleri
sapply(train_df_1, class)
##  PassengerId   HomePlanet    CryoSleep        Cabin  Destination          Age 
##  "character"  "character"  "character"  "character"  "character"    "numeric" 
##          VIP  RoomService    FoodCourt ShoppingMall          Spa       VRDeck 
##  "character"    "numeric"    "numeric"    "numeric"    "numeric"    "numeric" 
##         Name  Transported 
##  "character"  "character"
cat("The shape of the train dataset is: ", dim(train_df_1), "\n")
## The shape of the train dataset is:  8693 14
cat("The shape of the test dataset is: ", dim(test_df_1), "\n")
## The shape of the test dataset is:  4277 13

Train veri setimizde 8693 satır ve 14 sütun, test veri setimizde ise 4277 satır ve 13 sütun bulunmaktadır.

Keşif Amaçlı Veri Analizi Tek Değişkenli Analiz

Tek değişkenli analiz, değerlerinin dağılımını anlamak için her bir veriyi ayrı ayrı incelediğimiz veri analizinin en basit şeklidir.

Hedef Değişken

İlk önce Transported yani hedef değişkene bakacağız. Kategorik bir değişken olduğu için yüzde dağılımına ve çubuk grafiğine bakalım.

Tek Değişkenli Analiz

Hedef Değişken

prop.table(table(train_df_1$Transported))
## 
##     False      True 
## 0.4963764 0.5036236
library(ggplot2)

ggplot(train_df_1, aes(x = Transported, fill = Transported)) +
  geom_bar() +
  labs(x = "Transported", y = "Transported Count") +
  theme_minimal()

Train veri setindeki 8693 yolcudan 4378’i (yaklaşık %50’si) başka bir boyuta eklendi.

Bağımsız kategorik özellikleri görselleştirelim.

Bağımsız Değişken (Kategorik)

par(mfrow=c(2, 2))

# HomePlanet
barplot(table(train_df_1$HomePlanet) / nrow(train_df_1), main="HomePlanet", col="lightblue")

# CryoSleep
barplot(table(train_df_1$CryoSleep) / nrow(train_df_1), main="CryoSleep", col="lightblue")

# Destination
barplot(table(train_df_1$Destination) / nrow(train_df_1), main="Destination", col="lightblue")

# VIP
barplot(table(train_df_1$VIP) / nrow(train_df_1), main="VIP", col="lightblue")

Yukarıdaki çubuk grafiklerinden şu sonuç çıkarılabilir:

Train setindeki yolcuların yaklaşık %50’si Dünya’dan ayrıldı. Train veri setindeki yolcuların yaklaşık %30’u CryoSleep kullanıyordu (yani kabinlerinde kalmışlardı). Train veri setindeki yolcuların yaklaşık %69’u TRAPPIST-1e’i kullanıyor VIP hizmetler için Train veri setindeki yolcuların %1’i ödeme yapmaz.

library(tidyr)
library(dplyr)
## 
## Attaching package: 'dplyr'
## The following objects are masked from 'package:stats':
## 
##     filter, lag
## The following objects are masked from 'package:base':
## 
##     intersect, setdiff, setequal, union
train_df_1 <- train_df_1 %>%
  separate(Cabin, into = c("CabinDeck", "CabinNo.", "CabinSide"), sep = "/")
## Warning: Expected 3 pieces. Missing pieces filled with `NA` in 199 rows [16, 94, 104,
## 223, 228, 252, 261, 273, 281, 296, 315, 318, 345, 416, 437, 457, 463, 488, 666,
## 680, ...].
multiplot <- function(..., plotlist=NULL, cols) {
  require(grid)
  
  plots <- c(list(...), plotlist)

  numPlots = length(plots)

  numCols = cols
  numRows = ceiling(numPlots/numCols)

  grid.newpage()
  pushViewport(viewport(layout = grid.layout(numRows, numCols)))

  for (i in 1:numPlots) {
    matchidx <- i %% numCols
    if (matchidx == 0) matchidx <- numCols
    print(plots[[i]], vp = viewport(layout.pos.row = ceiling(i/numCols), layout.pos.col = matchidx))
  }
}
library(ggplot2)

# CabinDeck
p1 <- ggplot(train_df_1, aes(x = CabinDeck)) +
  geom_bar(stat = "count", fill = "blue") +
  labs(title = "CabinDeck") +
  theme_minimal()

# CabinSide
train_df_1_no_na <- train_df_1[complete.cases(train_df_1$CabinSide), ]
p2_no_na <- ggplot(train_df_1_no_na, aes(x = CabinSide)) +
  geom_bar(stat = "count", fill = "blue") +
  labs(title = "CabinSide (NA'sız)") +
  theme_minimal()
p2 <- ggplot(train_df_1, aes(x = CabinSide)) +
  geom_bar(stat = "count", fill = "blue") +
  labs(title = "CabinSide") +
  theme_minimal()


# Çift panel oluştur
multiplot(p1, p2_no_na, cols = 2)
## Zorunlu paket yükleniyor: grid

library(readr)
train <- read_csv("train.csv")

Veri Kümesi Açıklaması:

Bu yarışmada göreviniz , Uzay Gemisi Titanik’in uzay-zaman anomalisiyle çarpışması sırasında bir yolcunun alternatif bir boyuta taşınıp taşınmadığını tahmin etmektir . Bu tahminleri yapmanıza yardımcı olmak için size geminin hasarlı bilgisayar sisteminden kurtarılan bir dizi kişisel kayıt veriliyor.

Dosya ve Veri Alanı Açıklamaları

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

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

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

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

5- Cabin- Yolcunun kaldığı kabin numarası. deck/num/sideİskele sideveya PSancak formunu alır.

6- Destination- Yolcunun ineceği gezegen.

7- Age- Yolcunun yaşı.

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

9- RoomService, FoodCourt, ShoppingMall, Spa, VRDeck- Yolcunun Uzay Gemisi Titanic’in birçok lüks olanağının her birinde fatura ettiği tuta.

10- Name- Yolcunun adı ve soyad.

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

12- test.csv - Yolcuların geri kalan üçte birinin (~4300) kişisel kayıtları, test verisi olarak kullanılacak. TransportedGöreviniz bu setteki yolcular için değerini tahmin etmektir.

library(DataExplorer)

DataExplorer kodu:

Paketi genellikle veri setinizdeki temel istatistikleri görüntülemenize, eksik veri analizi yapmanıza, değişkenler arasındaki ilişkileri incelemenize ve daha birçok veri keşfi işlemi yapmanıza yardımcı olur.

Create_report kodu

Veri setinin genel özelliklerini, temel istatistikleri, eksik veri analizini, değişkenler arasındaki ilişkileri, ve belki de grafikleri içeren bir rapor oluşturur. Veri setinin yapısını daha iyi anlamanıza ve analiz sürecini hızlandırmayı sağlar.

Temel İstatistikler

Ham Sayımlar

İsim Değer Satırlar 8,693 Sütunlar 14 Ayrık sütunlar 8 Sürekli sütunlar 6 Tüm eksik sütunlar 0 Eksik gözlemler 2,324 Satırları Tamamla 6,606 Toplam gözlemler 121,702

Yüzdeler

Grafiği solunda yer alan ölçülerin adlarını ifade etmektedir.

Ölçülerde ilk olarak karşımıza ayrık sütunlar yüzdesi bizi karşımakta Ayrık sütunlar yüzdesi %57.1 olarak karşımıza çıkmaktadır.

Sütunların ikinci kısmını oluşturan sürekli sütunların ise oranının %42.9 olarak gözlemlenmektedir.

Burada arık sütunlarının sürekli sütunlara göre daha fazla olduğu gözlemlenmektedir.

Eksik sütunların değerinin %0 olmasını anlamı ise eksik sütun olmadığını gösterir.

“Complete rows” ifadesi genellikle veri setindeki satırların tam ve eksiksiz olarak doldurulmuş olup olmadığını belirtir. Yani, bir satırın tüm değişkenleri için bilgi içerdiği durumları ifade eder. Toplam satırların içinde hangi yüzde oranında tam ve eksiksiz bilgi içeren satırların bulunduğunu gösterir.

Complete row yüzdesi %76.0’dır. %76 yüksek bir yüzdeliktir.veri setinde çoğu satırın eksiksiz bilgiye sahiptir.

“Missing observations” ifadesi, bir yüzde grafiğinde genellikle eksik değerlere sahip olan gözlemlerin yüzde oranını ifade eder. Yani, veri setindeki herhangi bir değişkenin eksik (NaN veya NA) değerlere sahip olan gözlemleri temsil eder.

Bu ifade, eksik değerlerin veri setinde ne kadar yaygın olduğunu gösterir. Eksik gözlemler, veri analizi ve modelleme süreçlerinde dikkate alınması gereken önemli bir konudur. Eksik değerlere sahip gözlemler, analiz sonuçlarını etkileyebilir ve eksik veri yönetimi, doğru sonuçlar elde etmek için önemlidir.

“missing observations” yüzde grafiği, herhangi bir değişkenin eksik gözlemlerinin toplam gözlem sayısı içindeki yüzde oranını gösterir. Bu oranın yüksek olması, eksik veri sorunlarının önemli olabileceğini gösterir.

Bizim yüzdelik oranımız ise %1.9’dur.

Eksik Veri Profili

Eksik veri profili grafiği genellikle eksik değerlerin değişkenlere göre dağılımını görsel olarak temsil eden bir grafiktir. Bu grafikte, her bir değişken için eksik değerlerin yüzdesini gösteren bir çubuk veya çizgi grafiği kullanılır. Bu, her değişkenin eksik değerlerinin oranını görmemize olanak tanır.

Eksik veri profili grafiğinde eksik değerlerin yüzdesini incelediğinizde, her bir değişkenin eksik değer oranının belirli bir aralıkta (band) olduğunu gözlemleyebiliriz.

Bu, veri setindeki değişkenler arasında eksik veri durumlarının benzer bir şekilde dağıldığını veya farklılık gösterdiğini anlamak için kullanılabilir. Bu bilgi, eksik veri yönetimi stratejilerini belirlemede ve eksik değerlerin etkisini değerlendirmede yardımcı olabilir.

1.Tranported yüzdelik oranı %0’dır.Transported üzerinde eksik bilgi bulunmamaktadır.

2.PassengerId yüzdelik oranı %0’dır. PassengerId üzerinde transported’da görüldüğü gibi eksik bilgi yoktur.

3.Age yüzdelik oranı %2.06’dır. Yolcuların yaşına bakıldığında eksik bilgiler bulunmaktadır.

4.RoomService yüzdelik oranı %2.08’dir. Yolcuların Uzay Gemisi Titanic’in birçok lüks olanağının her birinde fatura ettiği tutarda da eksik bilgiler bulunmaktadır

5.Destination yüzdelik oranı %2.09’dur. Yolcuların ineceği gezegenlerde de eksik bilgiler bulunmaktadır.

6.Spa yüzdelik oranı %2.11’dir.

7.FoodCourt yüzdelik oranı %2.11’dir.

8.VRDeck yüzdelik oranı %2.16’dır.

9.Cabin yüzdelik oranı %2.29’dur.Yolcuların kaldığı kabin numaralarında da eksik bilgilere rastlanmaktadır.

10.Name yüzdelik oranı %2.3’tür.Yolcuların adı ve soyadında da eksik bilgiler bulunmaktadır.

11.HomePlanet yüzdelik oranı %2.31’dir.Yolcuların ayrıldığı gezegen, genellikle daimi ikamet ettikleri gezegenlerdede eksik bilgiler bulunmaktadır.

12.VIP yüzdelik oranı %2.34’tür.Yolcuların yolculuk sırasında özel VIP hizmeti için ödeme yapıp yapmadığı hakkında eksik bilgiler vardır.

13.ShoppingMall yüzdelik oranı %2.39’dur.

  1. CryoSleep yüzdelik oranı %2.5’tir.Yolcuların yolculuk süresince askıya alınmış animasyona alınmayı seçip seçmediği hakkında en fazla eksik bilgie sahip oldumuz veridir.

Tek Değişkenli Dağılım

Histogram, bir değişkenin dağılımını görsel olarak temsil eden bir grafik türüdür. “Age” değişkeninin histogram grafiği, yaş değişkeninin farklı yaş gruplarındaki dağılımını gösterir.

Histogram grafiği, yaş değişkeninin belirli aralıklardaki frekansını gösterir. Her bir çubuk (bar), belirli bir yaş aralığındaki gözlemlerinin sayısını temsil eder. Bu sayede, yaş değişkeninin genel dağılım özellikleri, merkezi eğilimi ve yayılımı hakkında bilgi edinilir.

1.Grafiğe bakıldığında genç ve orta yaş gurbunun (20 ile 40) çoğunluğu oluşturduğu dikkatimizi çekmektedir. 0 ile 20 aş grubu arasında bir artış görülmektedir, 20 ile 40 yaş aralığı en oğun yaş grubun u göstermektedir. 40 ile 80 arası yaş grubunun ise giderek düştüğünü gözlemleyebiliriz.

RoomService, FoodCourt, ShoppingMall, Spa, VRDeck grafiklerine bakıldığında çok az yolcunun bunlardan birini veya bir kaçını kullandığı gözlemlenebilir.Genellikle kullanılmadığı söylenebilir.

Yolcular Uzay Gemisi Titanic’in birçok lüks olanağından faydalanmak istememiştir.

Çubuk Grafik (frekanslı)

Çubuk grafik (bar plot veya bar chart), kategorik verilerin frekanslarını veya oranlarını görsel olarak temsil etmek için kullanılan bir grafik türüdür. Bu grafik, belirli kategorik değerlerin sıklığını veya dağılımını anlamak amacıyla kullanılır. Özellikle, bir değişkenin kategorik olduğu durumlarda sıkça tercih edilen bir görselleştirme aracıdır.

Çubuk grafikte her bir çubuk, belirli bir kategoriye ait gözlemlerin sayısını veya oranını temsil eder. Yatay eksende kategorik değerler bulunurken, dikey eksende bu kategorik değerlere ait frekanslar veya oranlar yer alır.

Çubuk grafik, verilerin karşılaştırılması, dağılımlarının görüntülenmesi ve genelde kategorik verilerin analizi için kullanılır. Bu tür grafikler, veri setindeki desenleri ve eğilimleri hızlı bir şekilde anlamak için etkili araçlardır.

1.Grafik:HomePlanet:Birinci grafiğe bakıldığında Yolcuların çoğunun 4500’den fazla yolcunun ayrıldığı gezegen Eart olarak gözükmektedir. İkibin yüze akın yolcunun Europa da indiği a da ikamet ettiği anlaşılıyor.Mars’ta inen yolcu sayısı ise 1500’dür.Geriye Kalan 200 yolcunun ise nerede ikamet ettikleri bilinmiyor.Bu grafiğe bakıldığı yolcuların genellikle daimi ikamet ettikleri gezegen yarıdan fazla bir oranla earth’dır.

2.Grafik:CryoSleep:CryoSleep grafiğine bakıldığında 4800 kişilik bir grubun yolculuk süresince askıya alınmış animasyona alınmayı seçmediğini yorumlanmaktadır.2500 yolcunun ise yolculuk süresince askıya alınmış animasyona alınmayı seçtiği görülmektedir. Geriye kalan yolcuların ise seçip seçmediği bilinmemektedir.

3.Grafik:Destination:Destination grafiğine bakıldığında 6000 bine yakın yolcunun çoğunluk kesimin TRAPPIST-1e gezegeninde inecektir.1800 yolcunun 55 cancri e gezegeninde ineceği gözlenmektedir.900 yolcunun PSO J318.5-22 gezegeninde inecektir.Gerie kalan azınlığın nerede ineceği belli değildir.

4.Grafik:VIP:VIP grafiğine bakıldığında çok yüksek bir oranın yaklaşık 8200 yolcunun yolculuk sırasında özel VIP hizmeti için ödeme yapmadığı gözlenmektedir. Ödeme yapan ve ödeme yapıp yapmadığı bilinmeyen yolcuların oranı oldukça düşüktür.

5.Grafik:Transported:Transported grafiğine bakıldığında yarı yarıya bir oran gözükmektedir.Yolcuların 4400 kişisi başka bir boyuta taşındığını diğer 4400 yolcunun başka bir boyuta taşınmadığı gözlemlenmektedir.

QQ Grafiği

QQ plot (Quantile-Quantile plot), bir teorik dağılım ile veri setindeki gözlemler arasındaki benzerlikleri değerlendirmek için kullanılan bir grafik türüdür. Bu grafik, iki veri kümesi arasındaki quantile (sıralı değer) ilişkilerini görselleştirir.

Teorik ve Gözlemlenen Quantile Değerleri:

X ekseni: Teorik bir dağılıma ait quantile değerleri (genellikle standart normal dağılım quantile’ları). Y ekseni: Gözlemlenen veri setinin quantile değerleri.

Diyagonal Referans Çizgisi:Çoğu zaman, bir DIYAGONAL çizgi çizilir. Eğer her iki veri kümesi birbirine tamamen uysaydı, noktalar bu çizgi üzerinde olurdu.

QQ plot, özellikle normal dağılım kontrolü için sıklıkla kullanılır. Eğer bir veri seti normal dağılıma sahipse, QQ plot üzerindeki noktalar genellikle diyagonal çizginin etrafında simetrik olarak düzenlenir. Eğer veri seti normal dağılıma uymuyorsa, QQ plot üzerinde belirgin bir eğilim veya sapma gözlemlenebilir.

QQ pilot normal dağılımda olduğunu gösterir.

Korelasyon analizi

Korelasyon analizi, iki değişken arasındaki ilişkiyi ölçen bir istatistiksel yöntemdir. Bu analiz, değişkenler arasındaki ilişkinin gücünü ve yönünü belirlemek için kullanılır.

Korelasyon analizi, iki değişken arasındaki ilişkiyi ölçen bir korelasyon katsayısı üretir. Korelasyon katsayısı genellikle -1 ile 1 arasında bir değer alır:

1: Tam pozitif korelasyon (bir değişken arttığında diğer değişken de artar). 0: Korelasyon yok (değişkenler arasında herhangi bir ilişki yok). -1: Tam negatif korelasyon (bir değişken arttığında diğer değişken azalır).

Korelasyon analizi, veri setindeki ilişkileri anlamak, değişkenler arasındaki bağlantıları incelemek ve tahmin modelleri oluşturmak için yaygın olarak kullanılır. İki sürekli değişken arasındaki ilişkinin doğrusal olup olmadığını değerlendirmek için Pearson korelasyon katsayısı sıkça kullanılır. Ancak, veri normal dağılıma uymuyorsa veya ilişki doğrusal değilse, diğer korelasyon yöntemleri de kullanılabilir

Korelasyon Katsayısı Değerleri:

1’e Yaklaşan Pozitif Korelasyon (0.8 - 1): İki değişken arasında güçlü bir pozitif ilişki olduğunu gösterir. Bir değişken arttığında diğer değişken de artar. 0’a Yaklaşan Korelasyon (0.1 - 0.2): İki değişken arasında çok zayıf veya hafif bir ilişki olduğunu gösterir. İki değişken arasında bir ilişki olduğunu söylemek zor olabilir. -1’e Yaklaşan Negatif Korelasyon (-0.8 - -1): İki değişken arasında güçlü bir negatif ilişki olduğunu gösterir. Bir değişken arttığında diğer değişken azalır.

Dağılım ve Aykırı Değerler:

Korelasyon analizi, değişkenler arasındaki doğrusal ilişkiyi ölçer. Eğer veri setiniz doğrusal bir ilişki içermiyorsa, korelasyon katsayısı düşük olabilir. Ayrıca, aykırı değerler de analizi etkileyebilir.

Korelasyon İstatistiksel Anlamlılık:

Korelasyon katsayısının istatistiksel olarak anlamlı olup olmadığını kontrol etmek önemlidir. Bunun için genellikle p değeri kullanılır. Anlamsız bir korelasyon, rastgele olasılık sonucu ortaya çıkmış olabilir.

Sıklıkla Karıştırılan İle Nedensellik Arasındaki Fark:

Korelasyon, iki değişken arasındaki ilişkiyi ölçer, ancak bu ilişkinin nedensel olduğu anlamına gelmez. İki değişken arasındaki korelasyon, bir değişkenin diğerini sebep olduğu anlamına gelmez.

Temel Bileşenler Analizi

Temel Bileşen Analizi (Principal Component Analysis veya kısaca PCA), çok değişkenli veri setlerinin boyutsal azaltma amacıyla kullanılan bir istatistiksel yöntemdir. PCA, veri setindeki değişkenler arasındaki ilişkileri anlamak ve ana değişkenlere (temel bileşenlere) dönüştürmek için kullanılır.

library(tidyverse)

Tidyverse kodu

library(tidyverse) kodu, R programında tidyverse adlı bir paket koleksiyonunu yüklemeye yöneliktir. tidyverse, veri manipülasyonu, görselleştirme ve analiz için kullanılan bir dizi paketi bir araya getirir ve bu nedenle geniş bir veri bilimi aracıdır.

tidyverse’ın içinde birçok farklı paket bulunmaktadır, ancak en bilinenleri arasında dplyr, ggplot2, tidyr, ve readr yer almaktadır.

library(explore)

Explore kodu

“explore” paketi, veri keşfi (data exploration) işlemleri için tasarlanmış bir R paketidir. Bu paket, veri setinin genel özelliklerini, temel istatistikleri, eksik veri analizini, değişkenler arasındaki ilişkileri ve diğer çeşitli özellikleri keşfetmek için kullanılan bir dizi fonksiyon içerir.

library(explore) komutu, “explore” paketini yükleyerek ve kullanıma hazır hale getirerek bu paketi R ortamında kullanılabilir hale getirir. Bir kez yüklendikten sonra, “explore” paketinin içindeki fonksiyonları çağırabilir ve veri setiniz üzerinde çeşitli keşif analizleri yapılabilmektedir.

train %>% 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     8693    NA  NA       NA
##  2 HomePlanet   chr     201    2.3      4    NA  NA       NA
##  3 CryoSleep    lgl     217    2.5      3     0   0.36     1
##  4 Cabin        chr     199    2.3   6561    NA  NA       NA
##  5 Destination  chr     182    2.1      4    NA  NA       NA
##  6 Age          dbl     179    2.1     81     0  28.8     79
##  7 VIP          lgl     203    2.3      3     0   0.02     1
##  8 RoomService  dbl     181    2.1   1274     0 225.   14327
##  9 FoodCourt    dbl     183    2.1   1508     0 458.   29813
## 10 ShoppingMall dbl     208    2.4   1116     0 174.   23492
## 11 Spa          dbl     183    2.1   1328     0 311.   22408
## 12 VRDeck       dbl     188    2.2   1307     0 305.   24133
## 13 Name         chr     200    2.3   8474    NA  NA       NA
## 14 Transported  lgl       0    0        2     0   0.5      1

Describle_all kodu

Bu R kodu, train adlı bir veri çerçevesinin tüm değişkenlerine (sütunlara) ait temel istatistiksel özet bilgileri sağlamak için kullanılır. Bu tür bir kod, dplyr paketinin describe_all() fonksiyonu ile gerçekleştirilir.Bu kodun çalıştırılmasıyla, “train” veri çerçevesindeki tüm değişkenlere ait istatistiksel özet bilgileri görsel olarak veya ekrana basılarak elde edilir. Bu tür bir özet, veri setinin genel yapısı, merkezi eğilim, dağılım ve diğer temel özellikleri hakkında hızlı bir bakış sağlar.

library(readr)
test <- read_csv("test.csv")

test.csv - Yolcuların geri kalan üçte birinin (~4300) kişisel kayıtları, test verisi olarak kullanılacak. TransportedGöreviniz bu setteki yolcular için değerini tahmin etmektir.

library(DataExplorer)

Test Datası İçin Temel İstatistikler

Ham Sayımlar

İsim Değer Satırlar 4.277 Sütunlar 13 Ayrık sütunlar 7 Sürekli sütunlar 6 Tüm eksik sütunlar 0 Eksik gözlemler 1.117 Satırları Tamamla 3.281 Toplam gözlemler 55.601

Yüzdeler

Ölçülerde ilk olarak karşımıza ayrık sütunlar yüzdesi bizi karşımakta Ayrık sütunlar yüzdesi %53.8 olarak karşımıza çıkmaktadır.

Sütunların ikinci kısmını oluşturan sürekli sütunların ise oranının %46.2 olarak gözlemlenmektedir.

Burada arık sütunlarının sürekli sütunlara göre daha fazla olduğu gözlemlenmektedir.

Eksik sütunların değerinin %0 olmasını anlamı ise eksik sütun olmadığını gösterir.

Complete row yüzdesi %76.7’dır. %76.7 yüksek bir yüzdeliktir.veri setinde çoğu satırın eksiksiz bilgiye sahiptir.

Missing observations yüzdesi %2.0’dır.Bu oranın yüksek olması, eksik veri sorunlarının önemli olabileceğini gösterir.

Eksik Veri Profili

1.PassengerId yüzdelik oranı %0’dır.PassengerId üzerinde transported’da görüldüğü gibi eksik bilgi yoktur.

2.VRDeck yüzdelik oranı %1.87’dir.

3.RoomService yüzdelik oranı %1.92’dir.Yolcuların Uzay Gemisi Titanic’in birçok lüks olanağının her birinde fatura ettiği tutarda da eksik bilgiler bulunmaktadır.

4.HomePlanet yüzdelik oranı %2.03’tür.Yolcuların ayrıldığı gezegen, genellikle daimi ikamet ettikleri gezegenlerdede eksik bilgiler bulunmaktadır.

5.Age yüzdelik oranı %2.13’tür.Yolcuların yaşına bakıldığında eksik bilgiler bulunmaktadır.

6.Destination yüzdelik oranı %2.15’dir.Yolcuların ineceği gezegenlerde de eksik bilgiler bulunmaktadır.

7.VIP yüzdelik oranı %2.17’dir.Yolcuların yolculuk sırasında özel VIP hizmeti için ödeme yapıp yapmadığı hakkında eksik bilgiler vardır.

8.CryoSleep yüzdelik oranı %2.17’dir.Yolcuların yolculuk süresince askıya alınmış animasyona alınmayı seçip seçmediği hakkında en fazla eksik bilgie sahip oldumuz veridir.

9.Name yüzdelik oranı %2.2’tür.Yolcuların adı ve soyadında da eksik bilgiler bulunmaktadır.

10.ShoppingMall yüzdelik oranı %2.29’dur.

11.Cabin yüzdelik oranı %2.34’tür.Yolcuların kaldığı kabin numaralarında da eksik bilgilere rastlanmaktadır.

12.Spa yüzdelik oranı %2.36’dır.

13.FoodCourt yüzdelik oranı %2.48’dir.

Tek Değişkenli Dağılım

Histogram

1.Grafiğe bakıldığında Train datasında olduğu gibi genç ve orta yaş gurbunun (20 ile 40) çoğunluğu oluşturduğu dikkatimizi çekmektedir. 0 ile 20 aş grubu arasında bir artış görülmektedir, 20 ile 40 yaş aralığı en oğun yaş grubun u göstermektedir. 40 ile 80 arası yaş grubunun ise giderek düştüğünü gözlemleyebiliriz.

RoomService, FoodCourt, ShoppingMall, Spa, VRDeck grafiklerine bakıldığında çok az yolcunun bunlardan birini veya bir kaçını kullandığı gözlemlenebilir.Genellikle kullanılmadığı söylenebilir.

Yolcular Uzay Gemisi Titanic’in birçok lüks olanağından faydalanmak istememiştir.

Çubuk Grafik (frekanslı)

50’den fazla kategori içeren 3 sütun göz ardı edildi. PassengerId: 4277 kategori Cabin: 3266 kategori Name: 4177 kategori

1.Grafik:HomePlanet:Birinci grafiğe bakıldığında Yolcuların çoğunun 2500’den fazla yolcunun ayrıldığı gezegen Eart olarak gözükmektedir. 1000 yolcunun Europa da indiği a da ikamet ettiği anlaşılıyor.Mars’ta inen yolcu sayısı ise 575’dir.Geriye Kalan yolcunun ise nerede ikamet ettikleri bilinmiyor.Bu grafiğe bakıldığı yolcuların genellikle daimi ikamet ettikleri gezegen yarıdan fazla bir oranla earth’dır.

2.Grafik:CryoSleep:CryoSleep grafiğine bakıldığında 2600 kişilik bir grubun yolculuk süresince askıya alınmış animasyona alınmayı seçmediğini yorumlanmaktadır.1550 yolcunun ise yolculuk süresince askıya alınmış animasyona alınmayı seçtiği görülmektedir. Geriye kalan yolcuların ise seçip seçmediği bilinmemektedir.

3.Grafik:Destination:Destination grafiğine bakıldığında 2900 yolcunun çoğunluk kesimin TRAPPIST-1e gezegeninde inecektir.750 yolcunun 55 cancri e gezegeninde ineceği gözlenmektedir.400 yolcunun PSO J318.5-22 gezegeninde inecektir.Gerie kalan azınlığın nerede ineceği belli değildir.

4.Grafik:VIP:VIP grafiğine bakıldığında çok yüksek bir oranın yaklaşık 4100 yolcunun yolculuk sırasında özel VIP hizmeti için ödeme yapmadığı gözlenmektedir. Ödeme yapan ve ödeme yapıp yapmadığı bilinmeyen yolcuların oranı oldukça düşüktür.

QQ Grafiği

Uyarı: stat_qq() fonksiyonu içeren 151 satırda geçerli olmayan değerler içeren satırlar kaldırıldı. Uyarı: stat_qq_line() fonksiyonu içeren 151 satırda geçerli olmayan değerler içeren satırlar kaldırıldı.

Korelasyon analizi

20’den fazla kategori içeren 3 özellik yok sayıldı! PassengerId: 3281 kategori Cabin: 2673 kategori Name: 3277 kategori

Temel bileşenler Analizi

50’den fazla kategori içeren 3 özellik göz ardı edildi! PassengerId: 3281 kategori Cabin: 2673 kategori Name: 3277 kategori

library(tidyverse)
library(explore)
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

Error in str_split_fixed(train$PassengerId, “_“, 2) :”str_split_fixed” fonksiyonu bulunamadı

Bu hatayı verdiği için stringr paketini yükledik ve Daha sonra library(stringr) komutu ile entegre ettik.,

PassengerId’den ailesıra ve ailenumaraları olarak iki ayrı değişken oluşturma:

train[c('ailenum','ailesıra')] <- str_split_fixed(train$PassengerId,'_',2)

Bu R kodu, train veri çerçevesindeki PassengerId sütununu kullanarak yeni ailenum ve ailesıra adlı iki sütun oluşturur. str_split_fixed fonksiyonu, bir karakter dizisini belirtilen bir ayırıcıya göre bölen ve belirtilen sayıda parçaya ayıran bir fonksiyondur. Bu durumda, PassengerId sütunu içindeki değerlerin ’_’ (alt çizgi) karakterine göre bölünmesi bekleniyor ve en fazla 2 parçaya ayrılması sağlanıyor.

Bu kodun sonucunda, train veri çerçevesine eklenen ‘ailenum’ ve ‘ailesıra’ sütunları, ‘PassengerId’ sütunundaki değerlerin ’_’ karakterine göre bölünmüş hallerini içerecektir. Bu tür bir ayrıştırma genellikle veri çerçevelerinde belirli bilgileri çıkarmak veya yeni değişkenler oluşturmak için kullanılır.

test[c('ailenum','ailesıra')] <- str_split_fixed(test$PassengerId,'_',2)

Aynı kodu test içinde yaptık.

Böylece iki datada da tabloda sıraysıyla ailenum ve ailesıra sütunlarını gösteren paneller oluşturduk .

iki datada da 8 tane aile sıra olduğunu ve 9280 tane ailenum verisini gözlemledik.

DECK , NUM , SİDE birleşik verilerini ayrı ayrı sütunlara ayırıyoruz

train[c('deck', 'num', 'side')] <- str_split_fixed(train$Cabin,'/',3)

Bu R kodu, train veri çerçevesindeki Cabin sütununu kullanarak yeni deck, num ve side adlı üç sütun oluşturur. Bu sütunlar, str_split_fixed fonksiyonu kullanılarak Cabin sütunundaki değerlerin ‘/’ (eğik çizgi) karakterine göre bölünmesiyle elde edilir.

str_split_fixed(train$Cabin, ‘/’, 3): Bu ifade, Cabin sütunundaki her bir değeri ‘/’ karakterine göre böler ve en fazla 3 parçaya ayırır. Sonuç, bir matris olacaktır.

train[c(‘deck’, ‘num’, ‘side’)] <- …: Bu ifade, train veri çerçevesine üç yeni sütun eklemek için kullanılır. Yeni sütunlara isim olarak ‘deck’, ‘num’ ve ‘side’ verilir.

…: Bu kısımda, önceki adımda oluşturulan matrisin değerleri atanır. Yani, ‘deck’ sütunu oluşturulan matrisin ilk sütunu, ‘num’ sütunu ikinci sütunu, ‘side’ sütunu ise üçüncü sütunu olacaktır.

test[c('deck', 'num', 'side')] <- str_split_fixed(test$Cabin,'/',3)

Bu işlem sonucunda, test veri çerçevesine eklenen ‘deck’, ‘num’, ve ‘side’ sütunları, ‘Cabin’ sütunundaki değerlerin ‘/’ karakterine göre bölünmüş hallerini içerecektir. Bu tür bir ayrıştırma, veri içindeki bilgileri daha ayrıntılı bir şekilde ele almak ve analiz etmek için kullanılabilir.

train[train == ''] <- NA
test[test == ''] <- NA
train%>%describe_all()
## # A tibble: 19 × 8
##    variable     type     na na_pct unique   min   mean   max
##    <chr>        <chr> <int>  <dbl>  <int> <dbl>  <dbl> <dbl>
##  1 PassengerId  chr       0    0     8693    NA  NA       NA
##  2 HomePlanet   chr     201    2.3      4    NA  NA       NA
##  3 CryoSleep    lgl     217    2.5      3     0   0.36     1
##  4 Cabin        chr     199    2.3   6561    NA  NA       NA
##  5 Destination  chr     182    2.1      4    NA  NA       NA
##  6 Age          dbl     179    2.1     81     0  28.8     79
##  7 VIP          lgl     203    2.3      3     0   0.02     1
##  8 RoomService  dbl     181    2.1   1274     0 225.   14327
##  9 FoodCourt    dbl     183    2.1   1508     0 458.   29813
## 10 ShoppingMall dbl     208    2.4   1116     0 174.   23492
## 11 Spa          dbl     183    2.1   1328     0 311.   22408
## 12 VRDeck       dbl     188    2.2   1307     0 305.   24133
## 13 Name         chr     200    2.3   8474    NA  NA       NA
## 14 Transported  lgl       0    0        2     0   0.5      1
## 15 ailenum      chr       0    0     6217    NA  NA       NA
## 16 ailesıra     chr       0    0        8    NA  NA       NA
## 17 deck         chr     199    2.3      9    NA  NA       NA
## 18 num          chr     199    2.3   1818    NA  NA       NA
## 19 side         chr     199    2.3      3    NA  NA       NA
test%>%describe_all()
## # A tibble: 18 × 8
##    variable     type     na na_pct unique   min   mean   max
##    <chr>        <chr> <int>  <dbl>  <int> <dbl>  <dbl> <dbl>
##  1 PassengerId  chr       0    0     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
## 14 ailenum      chr       0    0     3063    NA  NA       NA
## 15 ailesıra     chr       0    0        8    NA  NA       NA
## 16 deck         chr     100    2.3      9    NA  NA       NA
## 17 num          chr     100    2.3   1506    NA  NA       NA
## 18 side         chr     100    2.3      3    NA  NA       NA

Train ve Test Datalarını Temizleme (NA=Boşluk , not available)

NA’LARI TEST VE TRAİN SETİNDEN KALDIRMAMIZ GEREKİYOR. Passengerıd,homeplanet,cryosleep,destination,vıp gibi satırlar katogori olduğu için farklı bir kod ile ortalamaları alınıp 0 ’ a eşitlenir.

Roomservice,foodcourt,shoppingmall,spa,vrdeck ve age gibi satırlarda saı olduğu için addNA yapılır.

train <- train %>% select(-Cabin)
test <- test %>% select(-Cabin)
levels(train$HomePlanet)
## NULL
train$HomePlanet <- addNA(train$HomePlanet)
levels(train$HomePlanet)[is.na(levels(train$HomePlanet))] <- 'NA' 

addNA fonksiyonu, bir vektördeki eksik değerleri (NA olarak temsil edilen değerleri) içeren yeni bir vektör oluşturur. Eğer orijinal vektörde eksik değerler varsa, addNA bu eksik değerlere sahip olan yerleri korur ve eksik değeri olmayan yerlere “NA” etiketi ekler.

test$HomePlanet <- addNA(test$HomePlanet)
levels(test$HomePlanet)[is.na(levels(test$HomePlanet))] <- 'NA' 

TRAİN VE TEST VERİ SETİNDE YAŞINI BİLMEDİKLERİMİZİ ORTALAMA YAŞ İLE DEĞİŞTİRELİM

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

DESTİNATİON BOŞLUKLARINI NA İLE DOLDURMAK

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


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


levels(train$Destination)
## [1] "55 Cancri e"   "PSO J318.5-22" "TRAPPIST-1e"   "NA"

CryoSleep BOŞLUKLARINI NA İLE DOLDURMAK

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


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


levels(train$HomePlanet)
## [1] "Earth"  "Europa" "Mars"   "NA"

VRDeck BOŞLUKLARINI NA İLE DOLDURMAK

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

ShoppingMall BOŞLUKLARINI NA İLE DOLDURMAK

hist(train$ShoppingMall)

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


test <- test %>% mutate(ShoppingMall = coalesce(ShoppingMall, 0))
hist(train$Spa)

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


test <- test %>% mutate(Spa= coalesce(Spa, 0))
test$deck <- addNA (test$deck)
train$deck <- addNA (train$deck)
levels(train$deck)[is.na(levels(train$deck))] <- "NA"


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


levels(train$deck)
## [1] "A"  "B"  "C"  "D"  "E"  "F"  "G"  "T"  "NA"
train <- train %>% select(-Name)

test <- test %>% select(-Name)
levels(train$deck)[is.na(levels(train$deck))] <- "NA"


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


levels(train$deck)
## [1] "A"  "B"  "C"  "D"  "E"  "F"  "G"  "T"  "NA"
test$num <- addNA (test$num)
train$num <- addNA (train$num)
levels(train$num)[is.na(levels(train$num))] <- "NA"

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

levels(train$deck)
## [1] "A"  "B"  "C"  "D"  "E"  "F"  "G"  "T"  "NA"
test$side <- addNA (test$side)
train$side <- addNA (train$side)
levels(train$side)[is.na(levels(train$side))] <- "NA"


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


levels(train$side)
## [1] "P"  "S"  "NA"

bu kod, “side” faktör değişkenindeki NA olan seviyeleri “NA” ile değiştirir. Bu tür bir dönüşüm, eksik verilerle başa çıkmak veya faktör değişkenlerdeki eksik değerlere karşı bir önlem olarak kullanılabilir.

Name ve Cabin çok fazla oldukları için ve bize bir bilgi vermediği için train ve testlerden sileriz.Bunların yerine Passenger_Id kullanacağız.

VIP BOŞLUKLARINI NA İLE DOLDURMAK

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


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


levels(train$VIP)
## [1] "FALSE" "TRUE"  "NA"
train <- train %>%
  group_by(HomePlanet) %>%
  mutate_at(vars(RoomService), ~replace_na(., mean(., na.rm = TRUE)))

Bu kod train grubunda homeplanetlere göre gruplanıp yaş değişkeninin NA’lerini replace eder yani değiştirir.Homeplanetteki gruplarına göre yaşların ortamalarını alıp boşluklara ortalamaları yazması için yapılan koddur.

Aynı işlemi Test datası içinde yapmamız gerekiyor.

Train datasını alıp HomePlanet’e göre gruplarız.Grupladıktan sonra RoomService’nin boş olanlarını ortalamaları ile dolduracaktır.

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

Test datasını alıp HomePlanet’e göre gruplarız.Grupladıktan sonra RoomService’nin boş olanlarını ortalamaları ile dolduracaktır.

FoodCourt ’un histogram grafiğine bakılarak Na’ları doldurmak

hist(train$FoodCourt)

ÇOĞUNLUK 0 TL HARCADIĞI İÇİN DİĞERLERİNİDE 0 TL HARCAMIŞTIR DİYE TAHMİN EDİLİR

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

COALESCE KODU : FOODCOURTU ALIP İSTEDİĞİMİZ RAKAMLA DEĞİŞTİREBİLİRİZ DEMEKTİR. TRAİN DATASINDA FOODCOURT’U MUTATE EDİP FOODCOURT’UN İÇİNDEKİLER BOŞ İSE 0’I YAZ DEMEKTİR.

test$FoodCourt <- as.numeric(as.character(test$FoodCourt))
test <- test %>% mutate(FoodCourt = coalesce(FoodCourt, 0))
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 PassengerId  chr       0      0   8693    NA  NA      NA
##  2 HomePlanet   fct       0      0      4    NA  NA      NA
##  3 CryoSleep    fct       0      0      3    NA  NA      NA
##  4 Destination  fct       0      0      4    NA  NA      NA
##  5 Age          dbl       0      0     84     0  28.8    79
##  6 VIP          fct       0      0      3    NA  NA      NA
##  7 RoomService  dbl       0      0   1277     0 225.  14327
##  8 FoodCourt    dbl       0      0   1507     0 448.  29813
##  9 ShoppingMall dbl       0      0   1115     0 170.  23492
## 10 Spa          dbl       0      0   1327     0 305.  22408
## 11 VRDeck       dbl       0      0   1327     0 305.  22408
## 12 Transported  lgl       0      0      2     0   0.5     1
## 13 ailenum      chr       0      0   6217    NA  NA      NA
## 14 ailesıra     chr       0      0      8    NA  NA      NA
## 15 deck         fct       0      0      9    NA  NA      NA
## 16 num          fct       0      0   1818    NA  NA      NA
## 17 side         fct       0      0      3    NA  NA      NA
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 PassengerId  chr       0      0   4277    NA  NA      NA
##  2 HomePlanet   fct       0      0      4    NA  NA      NA
##  3 CryoSleep    fct       0      0      3    NA  NA      NA
##  4 Destination  fct       0      0      4    NA  NA      NA
##  5 Age          dbl       0      0     83     0  28.7    79
##  6 VIP          fct       0      0      3    NA  NA      NA
##  7 RoomService  dbl       0      0    845     0 219.  11567
##  8 FoodCourt    dbl       0      0    902     0 429.  25273
##  9 ShoppingMall dbl       0      0    715     0 173.   8292
## 10 Spa          dbl       0      0    833     0 296.  19844
## 11 VRDeck       dbl       0      0    833     0 296.  19844
## 12 ailenum      chr       0      0   3063    NA  NA      NA
## 13 ailesıra     chr       0      0      8    NA  NA      NA
## 14 deck         fct       0      0      9    NA  NA      NA
## 15 num          fct       0      0   1506    NA  NA      NA
## 16 side         fct       0      0      3    NA  NA      NA

train ve test için describe_all yapıp NA’larda boşluk kalmış mı kalmamış mı kontrol ederiz.

train$aile <- ifelse(duplicated(train$ailenum) | duplicated(train$ailenum,fromLast = TRUE), 1, 0)
test$aile <- ifelse(duplicated(test$ailenum) | duplicated(test$ailenum,fromLast = TRUE), 1, 0)
head(train[, c("PassengerId", "ailenum", "ailesıra", "aile")], 20)
## # A tibble: 20 × 4
##    PassengerId ailenum 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 <- train %>% select(-c(ailenum, ailesıra, num))
test <- test %>% select(-c(ailenum, ailesıra, num))

TEST VE TRAİN DATALARININ TAHMİNİ

Train veri setini Testing ve Trainig gruplarına ayırmak

library(rsample)

rsample paketi; Random sample : Rastgele örneklem demek. Rastgele örneklem almayı sağlayan paket.

Veri Bölme (Data Splitting): initial_split fonksiyonu, veri setini eğitim ve test alt kümelerine bölmenizi sağlar.

set.seed(3741)

Grupları her seferinde farklı farklı ayırmaması ama rastgele çalıştırması için uyguanır. Rastgele sayılar verilir 3741 numarasına göre rastgeleleştirmeyi sağlar.

set.seed fonksiyonu, rastgele sayı üretiminde kullanılan tohum değerini (seed) ayarlamak için kullanılır. Bu işlem, rastgelelik içeren algoritmaların çalışmasını kontrol eder ve aynı tohum değeri kullanıldığında, aynı “rastgele” sonuçların elde edilmesini sağlar.

ayrıstırmaörn <- initial_split(train, prop = 0.75)

Bu kod ilk ayırmada kullanılır. Testing ve traning setlerini ayırmak için.

Yeni bir data oluşturulur.

initial_split fonksiyonu, veri setini iki alt kümeye (training ve testing) bölme işlemi için kullanılır. Bu fonksiyon, belirtilen oranda veriyi eğitim setine (training set) ve kalan oranda veriyi test setine (testing set) bölerek iki ayrı veri çerçevesi oluşturur.

prop parametresi, bölme oranını belirtir.

training <- training(ayrıstırmaörn)
testing <- testing(ayrıstırmaörn)

tesnting ve training train ve test setinden ayrılmış iki tane parça oluşturur. Testing test’in %25’i Trainin ise %75’idir.Bunları rastgele ayırdık.

İLK TAHMİN’im

Logistic Resgresyon

Lojistik Regresyon Nedir?

Doğrusal regresyon sürekli Y değişkenlerini tahmin etmeye hizmet ediyorsa, ikili sınıflandırma için lojistik regresyon kullanılır.

ikili sonuçları tahmin etmek için basit ama güçlü bir modeldir. Yani bir şeyin olup olmayacağı. Denetimli makine öğrenimine yönelik bir tür sınıflandırma modelidir.

Lojistik Regresyona Genel Bakış Diyelim ki bugünün güneşli bir gün olup olmayacağını tahmin etmek istiyorsunuz. İki olası sonuç vardır: “güneşli” veya “güneşli değil”. Sonuç değişkeni aynı zamanda “hedef değişken” veya “bağımlı değişken” olarak da bilinir.Sonucu etkileyebilecek ‘önceki gün sıcaklık’, ‘hava basıncı’ vb. gibi birçok değişken vardır. Etkileyen değişkenler özellikler, bağımsız değişkenler veya yordayıcılar olarak bilinir; tüm bu terimler aynı anlama gelir.

Diğer örnekler arasında bir müşterinin ürününüzü satın alıp almayacağı, bir e-postanın spam olup olmadığı, bir işlemin hileli olup olmadığı ve bir ilacın hastayı iyileştirip iyileştirmeyeceği yer alır.

Lojistik regresyon nasıl çalışır? Lojistik regresyon, hedef değişkenin etiketli bir sınıfa/kategoriye ait olma olasılığını tahmin etmek için yordayıcı ve hedef değişkenler arasındaki mümkün olan en iyi uyumu bulur.

Doğrusal regresyon, özelliklerin sonucunu tahmin eden en iyi sonucu bulmaya çalışır ve bir denklem oluşturur, mümkün olan en iyi kesişme ve eğim değerlerini bulmaya çalışmak için optimizasyonu kullanır.

Logistik Regresyon, bağımlı değişkenin ikili (dichotomous) olduğu durumlar için kullanılan bir regresyon analizi yöntemidir. Örneğin, cinsiyet (erkek veya kadın) gibi ikili bir çıktıya sahip durumlar üzerinde çalışmak için sıkça kullanılır. Tüm regresyon analizleri gibi, lojistik regresyon da bir tahmin analizidir.

Bir bağımlı ikili değişken ile bir veya daha fazla nominal, sıralı, aralıklı veya oran düzeyinde bağımsız değişken arasındaki ilişkidir. Not: İkili sınıflandırma için Doğrusal Regresyon’u kullanmayız çünkü doğrusal fonksiyonu [0,1] aralığının dışında olasılıklara neden olur ve bu da onları geçersiz tahminler haline getirir.

İkili lojistik regresyonun inceleyebileceği soru türleri:

Bir kişinin fazla kilolu olduğu her kilo ve günde içilen her paket sigara için akciğer kanserine yakalanma olasılığı (evet veya hayır) nasıl değişir? Vücut ağırlığı, kalori alımı, yağ alımı ve yaşın kalp krizi geçirme olasılığı üzerinde etkisi var mı (evet mi hayır mı)?

Lojistik Regresyon Türleri

  1. Çok Terimli Lojistik Regresyon: Resresyonumuzda 4 değişken olduğunu varsayalım 2 lojistik sınıflandırıcı modeli uygulaarak 4 değişkenli problemleri çözmeye çalışır. Bunu yapmak için rastgele bir hedef sınıfı referans sınıfı olarak seçer ve geri kalan sınıfların her birini referans sınıfıyla karşılaştırır. set seed 123 kodunda olduğu gibi. Lojistik Regresyon yapısı nedeniyle çok sayıda veri seti varlığında çok iyi ölçeklenemediğinden yaygın olarak kullanılmaz. Daha doğru sonuçlara ulaşmak için ise veri setinin büyük olması gerekmektedir.

  2. Sıralı Lojistik Regresyon: Bu teknik, hedef değişken sıralı olduğunda kullanılır.Sıralı regresonu tahmin etmek istersek kullanabileceğimiz regresondur. Diyelim ki, iş deneyimini (1,2,3,4,5, vb.) tahmin etmek istiyoruz. Yani, değerler arasında bir sıra mevcut, yani 5>4>3>2>1. Çoklu model oluşturmak yerine, Ordinal Logistic Regresyon, tek bir model oluşturur ve birden çok eşik değeri içerir.

Eğer K sınıfımız varsa, model K -1 eşik veya kesim noktasına ihtiyaç duyacaktır. Ayrıca, bu model, oranların orantılı olduğu önemli bir varsayım yapar. Bu varsayım, logit (S şeklinde) ölçeğinde tüm eşiklerin düz bir çizgi üzerinde olduğunu söyler.

Not: Lojistik Regresyon, çok sınıflı (multi-class) problemleri çözmek için iyi bir tercih değildir. Ancak, türlerini bilmek işe yaramaktadır.

train_set<-train[2:15]
test_set<-test[2:14]

Bu R kodları, bir veri setinden belirli sütunları seçmek için kullanılır. Veri çerçevesi train içerisinde bulunan tüm satırları ve 2. sütundan başlayarak 15. sütuna kadar olan sütunları train_set adlı yeni bir veri çerçevesine kopyalar. Benzer şekilde, test veri çerçevesindeki tüm satırları ve 2. sütundan başlayarak 14. sütuna kadar olan sütunları seçerek test_set adlı bir başka veri çerçevesi oluşturur.

Bu tür bir sütun seçimi, genellikle veri setinin kullanılacak özellikleri veya bağımsız değişkenleri belirleme amacıyla yapılır. Bu durumda, train_set ve test_set veri çerçeveleri, her biri 2. sütundan 15. sütuna kadar olan sütunları içerir.

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

Bu R kod bloğu, veri setini eğitim ve test setlerine bölmek için kullanılır.

logistic = glm(formula = Transported ~ .,
               family = binomial,
               data = training_set)

Bu R kod bloğu, bir lojistik regresyon modeli oluşturmak için kullanılır.

logistic = glm(…): glm fonksiyonu (Generalized Linear Model), genelleştirilmiş doğrusal modelleri oluşturmak için kullanılır. Bu durumda, lojistik regresyon modeli oluşturulur.

Bu kod bloğu, eğitim seti üzerinde lojistik regresyon modelini oluşturur. Oluşturulan model, bağımlı değişkenin diğer bağımsız değişkenlere göre nasıl değiştiğini anlamak ve gelecekteki gözlemleri tahmin etmek için kullanılabilir.

prob_pred = predict(logistic, type = 'response', newdata = testing_set[-11])
y_pred = ifelse(prob_pred > 0.5, 1, 0)

Bu R kod bloğu, eğitilmiş bir lojistik regresyon modeli üzerinde test seti için tahminler yapmak için kullanılır. y_pred değişkeni, test setindeki her bir gözlemin lojistik regresyon modeline göre tahmin edilen sınıfını içerir. Bu tahminler daha sonra modelin performansını değerlendirmek için gerçek sınıflarla karşılaştırılabilir veya başka analizlerde kullanılabilir.

y_pred = ifelse(prob_pred > 0.5, 1, 0)

Bu R kodu, bir olasılık tahminini 0.5 ile 1 değeri üzerinden sınıflandırmak için kullanılır. y_pred değişkeni, her bir gözlemin lojistik regresyon modeli tarafından tahmin edilen olasılığının 0.5 eşik değeri üzerinden sınıflandırılması sonucu elde edilen sınıfları içerir. Bu sınıflar genellikle 0 ve 1 olarak temsil edilir ve bir sınıflandırma probleminde hangi sınıfa ait olduğunu belirtir.

y_true <- ifelse(testing_set[11] == TRUE, 1, 0)

Bu R kodu, testing_set veri çerçevesindeki “Transported” değişkeninin (hedef değişkenin) TRUE ve FALSE değerlerini kullanarak bir gerçek (true) sınıf vektörü oluşturur. y_true değişkeni, “testing_set” veri çerçevesindeki “Transported” değişkeninin TRUE ve FALSE değerlerini 1 ve 0 olarak kodlayarak oluşturulan gerçek sınıf vektörünü içerir. Bu vektör, test veri setindeki her bir gözlemin gerçek sınıfını temsil eder.

cm = table(y_true, y_pred )

Bu R kodu, gerçek (y_true) ve tahmini (y_pred) sınıflar arasında bir karışıklık matrisi (confusion matrix) oluşturur

Karışıklık matrisi, özellikle sınıflandırma modellerinin performansını değerlendirmek için kullanılır. Matrisin satırları gerçek sınıfları, sütunları ise tahmin edilen sınıfları temsil eder. Bu matris, doğru ve yanlış sınıflandırmaları görselleştirmeye ve performans ölçütlerini hesaplamaya yardımcı olur.

cm 
##       y_pred
## y_true   0   1
##      0 836 243
##      1 260 834

Bu ifade, karışıklık matrisini ekrana yazdırır. Yani, oluşturulan karışıklık matrisini görmek için kullanılır.

(836+834)/(836+834+260+243)
## [1] 0.7685228

Bu R kodu, bir karışıklık matrisindeki doğru tahminlerin toplam sayısını toplam gözlem sayısına bölerek doğruluk oranını hesaplar. 0.7685228 Bu oran, doğru tahmin edilen gözlemlerin toplam gözlem sayısına oranını temsil eder.

logistic_son = glm(formula = Transported ~ .,
                   family = binomial,
                   data = train_set)

Bu R kodu, lojistik regresyon modelini oluşturan bir örnek içerir. Transported değişkenini diğer bağımsız değişkenlere göre açıklamaya çalışan bir lojistik regresyon modeli kurar

Bu model, binomial ailesini kullanarak bir lojistik regresyon modeli oluşturur. Bu, hedef değişkenin ikili olduğunu ve bağımsız değişkenlerin etkilerini log-odds cinsinden ifade eden bir model olduğunu belirtir. Oluşturulan model, train_set veri çerçevesindeki verileri kullanarak eğitilir.

prob_pred = predict(logistic_son, type = 'response', newdata = test_set)
y_pred = ifelse(prob_pred > 0.5, TRUE , FALSE)

Bu R kodu, eğitilmiş bir lojistik regresyon modelini kullanarak yeni veri seti (test_set) üzerinde tahminler yapar. y_pred vektöründe tutulur ve bu vektör, lojistik regresyon modelinin test seti üzerindeki tahminlerini içerir.

Transported <- as.character(y_pred)
PassengerId <- test$PassengerId
Transported <- as.vector(Transported)
submission <- cbind(PassengerId, Transported)
submission <- as.data.frame(submission)
library(stringr)
submission$Transported <- str_to_title(submission$Transported)
write.csv(submission, "submission_logistic.csv", row.names = FALSE,quote = FALSE)

SWM

library(e1071)
fit_svm <- svm(Transported ~ ., data = training_set,type = 'C-classification' , kernel= 'linear')

preds <- predict(fit_svm, newdata = testing_set, type = "raw") %>%
  data.frame()
y_pred = ifelse(preds$. == TRUE, 1,0)
cm = table(y_true, y_pred)
cm
##       y_pred
## y_true   0   1
##      0 894 185
##      1 343 751
(894+751) / (894+751+343+185)
## [1] 0.7570179
svm_son = svm(Transported ~ ., data = train_set, type = 'C-classification' , kernel = 'linear')
preds <- predict(svm_son, newdata = test_set,type = "raw") %>%
  data.frame()
y_pred =preds$.
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, "sub_svm.csv", row.names = FALSE, quote = FALSE)

KAGGLE LEADERBOARD SIRALAMAM