# Bu kod bloğunu sadece paketler yüklü değilse bir kere çalıştırın
install.packages("DataExplorer")
install.packages("summarytools")
install.packages("dlookr")
# Temel kütüphanemiz
library(tidyverse)

# Yeni Otomatik EDA kütüphanelerimiz
library(DataExplorer)
library(summarytools)
library(dlookr)

# Analiz edeceğimiz veri setini yükleyelim
insurance_df <- read_csv("insurance.csv")

4. Adım: dlookr ile Veri Teşhisi ve Aykırı Değer Avı

Şimdiye kadar veri setimizin genel yapısını ve değişkenlerin dağılımlarını inceledik. Artık bir adım daha derine inerek, veri setimizin “sağlık kontrolünü” yapma zamanı. Bir kaşifin, keşfettiği adadaki su kaynaklarının temizliğini veya toprağın verimliliğini test etmesi gibi, biz de veri setimizdeki potansiyel sorunları (aykırı değerler, sıfırlar vb.) teşhis edeceğiz.

Bu görev için alet çantamızdaki en iyi araçlardan biri dlookr paketidir. Bu paket, sadece veriyi keşfetmekle kalmaz, aynı zamanda onu bir doktor gibi “teşhis” eder.

4.1: diagnose() ile Genel Sağlık Raporu

dlookr paketinin amiral gemisi fonksiyonu olan diagnose(), veri setimizdeki her bir değişken için kapsamlı bir sağlık raporu sunar.

# insurance_df veri setimiz için bir teşhis raporu oluşturalım
# Bu fonksiyon genellikle .Rmd içinde güvenle çalışır çünkü basit bir tablo döndürür.
diagnose(insurance_df)
## # A tibble: 7 × 6
##   variables types     missing_count missing_percent unique_count unique_rate
##   <chr>     <chr>             <int>           <dbl>        <int>       <dbl>
## 1 age       numeric               0               0           47     0.0351 
## 2 sex       character             0               0            2     0.00149
## 3 bmi       numeric               0               0          548     0.410  
## 4 children  numeric               0               0            6     0.00448
## 5 smoker    character             0               0            2     0.00149
## 6 region    character             0               0            4     0.00299
## 7 charges   numeric               0               0         1337     0.999

Gördüklerimiz ve Yorumumuz:

Bu tablo, her bir değişkenimiz (satırlar) için farklı sağlık metriklerini (sütunlar) gösterir. Gelin bu temel teşhis raporunu yorumlayalım:

  • variables & types: Değişkenlerimizi ve tiplerini (numeric, character) listeler. Bu, glimpse() ile elde ettiğimiz bilginin bir tekrarıdır.
  • missing_count & missing_percent: Her iki sütunun da 0 olması, veri setimizde hiç eksik değer olmadığını bir kez daha, farklı bir araçla teyit etmemizi sağlar. Bu harika bir haber.
  • unique_count & unique_rate: Bu sütunlar bize her bir değişkende kaç adet “eşsiz” veya “tekil” değer olduğunu gösterir.
    • Örneğin, sex için 2, smoker için 2 ve region için 4 eşsiz değer olduğunu görmek, bu kategorik değişkenlerin seviyelerini anlamamızı sağlar.
    • charges için 1337 eşsiz değer olması ve unique_rate’in 0.999 (yani %99.9) olması, bu değişkendeki neredeyse her bir değerin birbirinden farklı olduğunu, yani sürekli bir yapıya sahip olduğunu gösterir.

Bu diagnose() çıktısı, bize veri setimizin temel yapısı ve eksik veri durumu hakkında hızlı bir özet sunar. dlookr paketinin aykırı değerleri nasıl tespit ettiğini ve raporladığını ise bir sonraki adımda, plot_outlier() fonksiyonunu incelerken göreceğiz.

4.2: plot_outlier() ile Aykırı Değerleri Görselleştirme

diagnose() fonksiyonu bize aykırı değerlerin sayısını verdi. Peki bu değerler nasıl görünüyor? dlookr paketinin plot_outlier() fonksiyonu, bu aykırı değerleri bizim için görselleştirir.

Ustalık Notu: Raporları Ayrı Çalıştırma Pratiği

Tıpkı create_report() ve view(dfSummary()) gibi, dlookr’un plot_*() ailesindeki fonksiyonları da karmaşık görsel çıktılar üretir. .Rmd dosyamızın derlenmesi sırasında, özellikle PDF çıktısı alırken, sorun yaşamamak adına bu tür görsel raporlama fonksiyonlarını da önce Konsol’da çalıştırıp sonucunu görmek ve ardından ekran görüntüsünü .Rmd dosyasına eklemek daha güvenli bir yöntemdir.

Bu yüzden, aşağıdaki kod bloğunu da eval=FALSE seçeneği ile “çalışmayacak” şekilde ayarlıyoruz.

Ancak size hangi komutu kullanacağınızı göstermek için burada bırakıyoruz.

# Bu kodu RStudio Konsolu'nda çalıştırarak aykırı değer grafiğini görüntüleyin!
plot_outlier(insurance_df)

plot_outlier Çıktısını Yorumlama: Aykırı Değerlerin Teşhisi

Bu komutu konsolda çalıştırdığımızda, dlookr her bir sayısal değişken için son derece bilgilendirici bir “Teşhis Grafiği” oluşturur. Bu grafikler, aykırı değerlerin hem kutu grafiğindeki yerini hem de histogram üzerindeki etkisini karşılaştırmalı olarak gösterir.

age (Yaş) ve children (Çocuk Sayısı)

Gördüklerimiz ve Yorumumuz:

  • age ve children değişkenleri için dlookr herhangi bir aykırı değer tespit etmemiştir. Bu nedenle, “With outliers” (Aykırı değerlerle) ve “Without outliers” (Aykırı değerler olmadan) grafikleri tamamen aynıdır. Bu, bu iki değişkenin dağılımının “temiz” olduğunu gösterir.
bmi (Vücut Kitle İndeksi)

Gördüklerimiz ve Yorumumuz:

  • “With outliers” Kutu Grafiği: diagnose() fonksiyonunun raporladığı gibi, kutu grafiğinin üst “bıyığının” (whisker) ötesinde birkaç tane aykırı değer (siyah noktalar) olduğunu net bir şekilde görüyoruz. Bu değerler yaklaşık olarak 47’nin üzerindeki BMI değerleridir.
  • “Without outliers” Grafikleri: Alt kısımdaki grafikler, bu aykırı değerler çıkarıldığında dağılımın nasıl görüneceğini simüle eder. Gördüğümüz gibi, aykırı değerler çıkarıldığında kutu grafiğinin dikey ekseni daralır ve histogram daha simetrik bir hal alır. Ancak bmi için aykırı değer sayısı az olduğu için, dağılımın genel şeklinde dramatik bir değişiklik olmaz.
charges (Masraflar)

Gördüklerimiz ve Yorumumuz:

  • “With outliers” Kutu Grafiği: İşte hikayenin en can alıcı kısmı! charges değişkeni için kutu grafiğinin üzerinde devasa bir aykırı değer yığını olduğunu görüyoruz.
  • Histogram Karşılaştırması: Üstteki histogram (aykırı değerlerle birlikte) sağa doğru çok uzun bir kuyruğa sahiptir ve 60,000’e kadar uzanır. Alttaki histogramda ise (aykırı değerler çıkarıldığında) x ekseninin yaklaşık 35,000’de bittiğini ve dağılımın çok daha az çarpık, daha “toplu” bir hale geldiğini görüyoruz.
  • Sonuç: Bu karşılaştırma, charges değişkeninin sağa çarpık yapısının ana nedeninin bu yüksek değerli aykırı noktalar olduğunu kesin olarak kanıtlamaktadır. Bu aykırı değerler bir “hata” mıdır? Hayır! Bu durumda, bu değerler sigorta masraflarının doğasını yansıtan gerçek verilerdir. Ancak bu değerlerin varlığını bilmek, ileride bir model kurmaya karar verirsek, modelimizin bu uç değerlerden ne kadar etkileneceğini anlamamız açısından hayati önem taşır.

4. Adım Özeti ve Sonraki Adım:

dlookr paketi, veri setimizin “sağlık taramasını” hızlı ve etkili bir şekilde yapmamızı sağladı. Özellikle charges değişkenindeki yüksek aykırı değerlerini görsel (plot_outlier) olarak görmüş olduk.

Artık alet çantamıza üç yeni ve güçlü otomatik EDA aracı ekledik. Peki, hangisini ne zaman kullanmalıyız? Bir sonraki ve son adımımız, bu araçları karşılaştırarak bir “Kaşifin Pusula Seçimi” rehberi oluşturmak!