Merhaba Dostlar,
Bölüm 8.1’de, bir modelin “gerçekten öğrenip öğrenmediğini” (genelleme yeteneği) anlamak için gereken Bias-Variance Dengesi ve Eğitim/Test Veri Seti mantığı gibi temel mühendislik prensiplerini zihnimize kazıdık. Felsefi dersler bitti. Artık, “veri mimarı” şapkalarımızı takıp, bu kuralları uygulayacağımız ilk atölye çalışmasına başlıyoruz.
İlk projemiz, mimarinin en temel, en sağlam ve en saygın yapılarından biri olan Lineer Regresyon. Amacımız, mtcars veri setindeki basit ama güçlü ilişkileri kullanarak, bu yapının ideal koşullar altında nasıl inşa edildiğini göstermek.
Makine öğrenmesinde sağlam bir yapı inşa etmek, doğru araçlarla başlar.
Geleneksel programlamada olduğu gibi, makine öğrenmesinde de birçok farklı “el aleti” ve “yapı iskelesi” vardır. Ancak, Machine Learning Academy’de biz, projelerimizin modüler, okunabilir ve endüstri standardında olmasını sağlayan tek bir resmi araç setini benimsiyoruz: tidymodels çatısı.
tidymodels, R’ın temiz ve düzenli (tidy) veri felsefesini makine öğrenmesine taşıyan, modern mimarların tercih ettiği “Altın Standart” araç kutusudur.
| Kavram (Teknik) | Metafor (Mimarlık) | Açıklama |
|---|---|---|
| Yapısal Tutarlılık (Consistency) | Evrensel Bağlantı Plakası | Geleneksel R’da Lineer Regresyon (lm()),
Karar Ağacı (rpart::rpart()) gibi her modelin kendine özgü
komutları vardır. tidymodels ise tüm modellere aynı
sözdizimini (fit(), predict(),
tune()) uygular. Tıpkı tüm yapı elemanlarını aynı standart
cıvata ile birleştirmek gibi; kafa karışıklığı sıfırdır. |
| Modüler İş Akışı (Tidy Workflow) | Mimari Şablonlar ve Katmanlama | tidymodels, veri bölme, ön işleme, model
seçimi ve değerlendirme gibi projenin her aşamasını ayrı, bağımsız ve
tekrar kullanılabilir “katmanlar” olarak tanımlamamızı sağlar. Bu,
projenin okunabilirliğini ve yönetilebilirliğini, tıpkı iyi katmanlanmış
bir mimari çizim gibi en üst seviyeye çıkarır. |
| Geleceğe Dönüklük (Future-Proofing) | Altyapı Standartı (API) | Bu çatı altında öğrendikleriniz, en basit Lineer Regresyon’dan en karmaşık Yapay Sinir Ağlarına kadar tüm makine öğrenmesi algoritmalarını kullanmanız için bir “arayüz” görevi görür. Yarın daha güçlü bir model denemek istediğinizde, tüm iş akışınızı değil, sadece modelin adını değiştirmeniz yeterlidir. |
Hadi, bu altın standardın temel paketlerini (tidyverse ve tidymodels) çağırarak, ilk model inşaatımızın temellerini atmaya başlayalım!
Lineer Regresyon gibi temel bir yapıyı inşa ederken, malzemelerimizin (verimizin) temiz ve güvenilir olması önemlidir. Bu bölümde, tüm varsayımları en net şekilde görebilmek için R’ın meşhur mtcars veri setini kullanacağız. Bu veri seti, 1970’lerin otomobil modellerinin yakıt tüketimine göre menzil (galon başına mil - mpg) ve 10 farklı tasarım ve performans özelliğini içerir.
Bu projemizde, bir aracın beygir gücünün (hp) yakıt tüketimine göre mil (mpg) üzerindeki etkisini inceleyerek basit bir regresyon modelinin nasıl inşa edileceğini öğreneceğiz.
# Gerekli kütüphaneleri ve tidymodels çatısını yüklüyoruz.
library(tidyverse)
library(tidymodels)
# mtcars veri setini çağırıp, daha temiz bir analiz için tibble formatına dönüştürüyoruz.
data_tbl <- mtcars %>%
as_tibble()
# Veri setinin ilk satırlarına kısa bir bakış (Malzememizin İlk Örnekleri)
head(data_tbl)
Machine Learning Academy’de, en basit yapı olan Lineer Regresyon’un bile ayakta kalması için uyması gereken katı fizik kuralları (statik ve malzeme bilimi) vardır. Bir mimar için bu kurallar çelik-beton standartları neyse, Lineer Regresyon için de bu kurallar istatistiksel varsayımlardır.
Eğer bu varsayımlar ihlal edilirse, modelimiz hala ayakta durabilir; ancak temeli çürük bir yapı gibi, tahminleri güvenilir olmaktan çıkar ve katsayıları anlamsızlaşır.
Bu kritik denetim sürecinde bize, Machine Learning Academy’nin Yapı Denetimi uzmanımız Şanslı eşlik edecek ve her varsayımı, holografik birer Yapı Denetim Kartı ile kontrol edeceğiz. Bu kartlar, ilerleyen adımlarda olsrr paketi ile yapacağımız pratik testlerin teorik temelini oluşturur.
A) Doğrusallık (Linearity) - Büyüteçli Kart: Düz Hat Zorunluluğu
-Şanslı’nın Notu: “Lineer Regresyon, öngördürücü değişken (hp) ile hedef (mpg) arasındaki ilişkinin düz bir çizgi (doğrusal) olduğunu varsayar. Eğer ilişki bir yay (parabolik) veya S-şeklinde ise, bu varsayım ihlal edilmiştir ve modelin yapısı eğilir.”
-Mimari Karşılığı: Bir kolonun taşıma gücünün, kalınlığındaki her birim artışla hep aynı oranda artmasını beklemek gibidir. Bu ilişkiyi saçılım grafiği üzerinde test ederiz.
B) Hataların Bağımsızlığı (Independence of Errors) - Bağımsız Yumaklar Kartı: Etkileşimsiz Rastgelelik
-Şanslı’nın Notu: “Modelin yaptığı tahmin hataları (artıklar), birbirini etkilememelidir. Her bir gözlemin hatası, diğer gözlemlerden tamamen bağımsız olmalıdır.”
-Mimari Karşılığı: Bir binanın ilk katındaki bir mühendislik hatasının, otomatik olarak hemen üstündeki katı da etkilememesi (kendi hatasıyla kalması) beklenir. Özellikle zaman serisi (ardışık olaylar) verilerinde kritik olan bu durum, Durbin-Watson (DW) testi ile kontrol edilir.
C) Hataların Eşit Varyansı (Homoscedasticity) - Holografik Boru Kartı: Güvenilir Yayılım
-Şanslı’nın Notu: “Modelin tahmin hatalarının yayılımı (varyansı), tahmin edilen değere bakılmaksızın sabit kalmalıdır. Hatalar, bir boru gibi eşit kalınlıkta dağılmalıdır (Homoscedasticity).”
-Mimari Karşılığı: Bir mimarın, binanın düşük katlarında yaptığı tahmin hatası ile yüksek katlarında yaptığı tahmin hatasının yayılımının aynı olmasını beklemesi gibidir. Eğer tahmin edilen değer arttıkça hatalar koni şeklinde büyüyorsa (Heteroscedasticity), modelin yüksek değerli tahminlere olan güveni azalır. Breusch-Pagan testi ve artık grafikleri bu denetimi yapar.
D) Hataların Normalliği (Normality of Residuals) - Çan Şeklinde Işık Halesi Kartı: İdeal Şekil
-Şanslı’nın Notu: “Modelin tahmin hataları (artıklar), istatistiğin ideal dağılımı olan Normal Dağılıma (Çan Eğrisi) uygun olmalıdır.”
-Mimari Karşılığı: Modelin sistematik bir önyargı taşımaması, hatalarının rastgele ve simetrik olmasını garanti eder. Eğer hatalar bir tarafa yığılırsa (çarpıklık), model bir yönde sürekli olarak yanılıyor demektir. Bu, Q-Q Plot ve Shapiro-Wilk testi ile kontrol edilir.
E) Çoklu Doğrusal İlişki (Multicollinearity) - İki Kedi Silüeti Kartı: Çifte Bilgi Yükü
-Şanslı’nın Notu: “Modeldeki öngördürücü değişkenler (örneğin hp ve ağırlık) birbirleriyle çok güçlü ilişkide olmamalıdır. Model, aynı bilgiyi iki farklı kaynaktan alıp kafa karışıklığı yaşamamalıdır.”
-Mimari Karşılığı: Bir yapının taşıma gücünü hesaplarken, hem “kolonun çapını” hem de “kolonun çevresini” aynı anda kullanmak gibidir; her ikisi de aynı bilgiyi taşır. Bu durum, model katsayılarının (eğimlerinin) anlamsız derecede büyük ve kararsız hale gelmesine neden olur. VIF (Variance Inflation Factor) testi bu durumun şiddetini ölçer.
Aman Dikkat, Dostlar!
Bu beş kural, inşaatımızın teminatıdır. Bizim basit Lineer Regresyon modelimiz (mpg vs hp) bu varsayımların çoğunu doğal olarak karşılamaya yakındır. Ancak, çoklu regresyon modellerinde (birden fazla X değişkeni) bu denetim, modelin Yapı Denetimi’nden geçip geçmediğini anlamak için hayati önem taşır.
Sıradaki adımda, inşaatımıza başlamadan önce zemin etüdü yapıp, bu varsayımlardan en önemlisine odaklanacağız: İlişkinin İspatı (Korelasyon Analizi).
İnşaatımıza başlamadan önce, en temel kuralımız olan Doğrusallık (Linearity) varsayımının karşılanıp karşılanmadığını ve seçtiğimiz ana malzemenin (beygir gücü - hp) hedefimiz (yakıt tüketimine göre mil - mpg) ile ne kadar güçlü bir ilişkiye sahip olduğunu kontrol etmeliyiz. Bu süreç, mimarideki zemin etüdü gibidir: Temeli atacağımız zeminin sağlamlığını ölçeriz.
Bu etüdü, Korelasyon Analizi ile iki aşamada yapacağız: Görselleştirme ve İstatistiksel İspat.
Doğrusallık varsayımı, değişkenler arasındaki ilişkinin düz bir çizgi ile temsil edilebileceğini söyler. Bu, Lineer Regresyon’un kendisidir.
Veri setimizdeki hedef değişken mpg(galon başına mil), aracın yakıt verimliliğini ölçer. Yüksek değeri, daha az yakıt tüketimi anlamına gelir. (Beygir Gücü) ile arasındaki ilişkiyi incelerken, fizik kanunları gereği güçlü bir negatif korelasyon bekleriz: Güçlü bir motor (↑hp) daha çok yakıt tüketeceği için, bir galon benzinle daha az mesafe kat eder (↓mpg).
# Yakıt tüketimi (mpg) ve beygir gücü (hp) arasındaki ilişkiyi çizelim.
data_tbl %>%
ggplot(aes(x = hp, y = mpg)) +
geom_point(color = "blue", alpha = 0.7) +
geom_smooth(method = "lm", se = FALSE, color = "red") + # Lineer (lm) trend çizgisini ekleyelim
labs(title = "Yakıt Tüketimine Göre Mil (mpg) vs. Beygir Gücü (hp)",
x = "Beygir Gücü (hp)",
y = "Galon Başına Mil (mpg)") +
theme_minimal()
Gördüklerimiz ve Yorumumuz:
Grafikteki kırmızı düz çizgi (Lineer model), noktaların genel trendini oldukça iyi yakalamaktadır. Noktaların dağılımı, parabolik veya S-şeklinde değil, negatif eğimli düz bir çizgi etrafında toplanmıştır.
-Sezgi: Beygir gücü (hp) arttıkça, yakıt tüketimine göre menzil (mpg) azalmaktadır. (Beklendiği gibi, daha güçlü motorlar daha çok yakar.)
-Sonuç: Bu görsel kanıt, Lineer Regresyon’un temel direği olan Doğrusallık varsayımının karşılandığını gösteriyor. Yapı ruhsatımızın ilk maddesi onaylandı.
Görsel olarak ilişkilerin var olduğunu gördük, ancak bu ilişkinin tesadüfi olmadığını istatistiksel olarak teyit etmeliyiz. Bunu, Pearson korelasyon katsayısının testini yapan cor.test() fonksiyonu ile yaparız.
İstatistiksel Anlamlılık: O Meşhur 0.05 Sınırı Nedir?
Görsel olarak bir ilişkinin varlığını sezdikten sonra, mimar olarak sormamız gereken en kritik soru şudur: “Bu ilişki gerçek mi, yoksa sadece tesadüf eseri mi oluştu?” İşte bu sorunun cevabını bize P-Değeri (P-Value) verir.
P-Değeri Nedir?
P-değeri, “Yokluk Hipotezinin (H₀) doğru olduğu varsayımı altında, elimizdeki veriyi veya ondan daha uç bir veriyi görme olasılığımız nedir?” sorusunun cevabıdır. * Yokluk Hipotezi (H₀): Bizim bağlamımızda, “İki değişken arasında hiçbir ilişki yoktur (korelasyon sıfırdır)” varsayımıdır. * P-Değeri Düşükse (Örn: p < 0.05): “Yokluk Hipotezinin doğru olma olasılığı çok düşüktür. Bu, tesadüfi bir durum olamaz.” demektir. Dolayısıyla, H₀’ı reddederiz ve bulduğumuz ilişkinin istatistiksel olarak anlamlı olduğunu söyleriz.
Peki neden bu meşhur sınır 0.05’tir? Bu, modern istatistiğin kurucularından Sir Ronald Fisher tarafından ortaya atılmış, pratik bir gelenektir (Fisher, 1925).
Özetle: Bir cor.test() çıktısında
P-değerini 0.05’in altında gördüğünüzde, rahat bir nefes alabilirsiniz:
Kullanacağınız malzeme sağlamdır, aralarındaki ilişki tesadüf
eseri değildir.
Şimdi, hp ve mpg arasındaki ilişkiyi test edelim.
# hp ve mpg arasındaki Pearson korelasyonunu test edelim.
# H0: Korelasyon sıfırdır (ilişki yoktur).
cor_test_result <- cor.test(data_tbl$hp, data_tbl$mpg, method = "pearson")
print(cor_test_result)
##
## Pearson's product-moment correlation
##
## data: data_tbl$hp and data_tbl$mpg
## t = -6.7424, df = 30, p-value = 1.788e-07
## alternative hypothesis: true correlation is not equal to 0
## 95 percent confidence interval:
## -0.8852686 -0.5860994
## sample estimates:
## cor
## -0.7761684
Gördüklerimiz ve Yorumumuz:
-Korelasyon Katsayısı (r): Çıktıda cor değeri yaklaşık -0.77’dir. Bu, Cohen kılavuzuna göre Çok Güçlü bir Negatif İlişki anlamına gelir.
-İstatistiksel Anlamlılık (P-Değeri): Çıktıdaki p-value değeri sıfıra çok yakındır. Bu değer, 0.05’ten kat kat küçük olduğu için H0 hipotezini reddediyoruz.
-Sonuç: hp ve mpg arasındaki ilişki tesadüfi değil, istatistiksel olarak anlamlıdır ve Lineer Regresyon modelimiz için çok güçlü bir zemin mevcuttur.
Kuracağımız bu model, teknik dilde Basit Lineer Regresyon (Simple Linear Regression) olarak adlandırılır, çünkü sadece bir bağımsız değişken (hp) ve bir bağımlı değişken (mpg) içerir.
\[ \text{mpg} = \beta_0 + \beta_1 \times \text{hp} + \text{Hata} \]
Mimari Karar: Bu model, Lineer Regresyon’un temel prensiplerini ve varsayımlarını en net haliyle öğrenmemiz için en ideal yapı iskelesidir. Akademide, bir binanın statiğini öğrenmeden önce tek bir kolonun dayanımını analiz etmek gibidir.
Gerçek dünyada bir arabanın yakıt tüketimine göre menzili elbette sadece beygir gücüne bağlı değildir; ağırlığı, silindir sayısı ve vites kutusu tipi gibi birçok faktöre bağlıdır. Birden fazla bağımsız değişkenin kullanıldığı bu modellere Çoklu Lineer Regresyon (Multiple Linear Regression) denir.
Basit modelin temellerini attıktan sonra, 6. Adım: Yapı Denetimi’nde, modelimize ek değişkenler dahil ederek “Çoklu Doğrusallık (Multicollinearity)” gibi Çoklu Regresyon’un getirdiği karmaşık varsayımlarla nasıl başa çıkacağımızı göstereceğiz.
Şimdi, ilk projemizin inşaat ruhsatı (veri bölme) ve malzeme hazırlığı (ön işleme) aşamasına geçelim.
Model inşa etme sürecinde, felsefi temellerin (Bölüm 8.1) ve zemin etüdünün (Adım 3) hemen ardından, yapısal hazırlıklar gelir. Bu, iki ana adımdan oluşur:
-Veri Bölme (initial_split): İnşaat Ruhsatı (Modelin final sınavını belirleme).
-Ön İşleme Tarifi (recipes): Malzeme Hazırlığı (Veriyi modelin kabul edeceği forma dönüştürme).
tidymodels çatısının en güçlü araçlarından biri recipes paketidir. Bu paket, model kurmadan önce verilere hangi dönüşümlerin uygulanacağını tanımlayan bir “Ön İşleme Tarifi” oluşturmamızı sağlar.
Basit Lineer Regresyon modelimiz için temel tarifimizi hazırlayalım:
Model Formülü: \(\text{mpg} \sim \text{hp}\)
# Tarifimizi (Recipe) tanımlıyoruz
mtcars_recipe <- recipe(mpg ~ hp, data = mtcars_train) %>%
# Lineer Regresyon'un katsayılarını yorumlamayı kolaylaştırmak için
# Bağımsız değişkeni (hp) normalize ediyoruz: ortalama=0, SS=1
step_normalize(hp)
Lineer Regresyon’un en katı kurallarından biri, hataların normal dağılmasıdır. Bu varsayımın karşılanma olasılığını artırmak için, mimar olarak hedef değişkenimizin (mpg) dağılımını kontrol etmeliyiz.
# mpg'nin dağılımını çizelim
data_tbl %>%
ggplot(aes(x = mpg)) +
geom_histogram(binwidth = 2, fill = "darkgreen", color = "white") +
labs(title = "Hedef Değişken mpg'nin Dağılımı", x = "Galon Başına Mil (mpg)", y = "Sıklık") +
theme_minimal()
Grafik, mpg değişkeninin normal dağılıma oldukça yakın ve simetrik bir dağılıma sahip olduğunu gösteriyor. Bu, malzememizin ideal olduğunu işaret eder. Bu görsel tespiti nicel bir değerle destekleyelim:
# mpg değişkeninin çarpıklık (skewness) değerini hesaplayalım
# (moments paketi yüklü varsayılmıştır)
library(moments)
skewness_value <- moments::skewness(data_tbl$mpg)
cat("mpg Değişkeni Çarpıklık (Skewness) Değeri:", round(skewness_value, 2), "\n")
## mpg Değişkeni Çarpıklık (Skewness) Değeri: 0.64
Sonuç: mpg’nin çarpıklık değeri
yaklaşık 0.64’dir. Akademik rehberlerin (Kim,2005)
tolerans eşiği olan \(\pm 2\)’nin
oldukça altında olan bu değer, elimizdeki ana malzemenin
ideal olduğunu ve Hataların Normalliği
varsayımını sağlamak için ek bir dönüşüme gerek olmadığını teyit
eder.
Bu aşamada, tidymodels çatısının sağladığı modüler, tutarlı iş akışını kullanarak modelimizi kuracak ve Eğitim Seti üzerinde test ederek ne kadar iyi “öğrendiğini” göreceğiz.
Model inşası üç ana aşamadan oluşur:
-Mimari Planı Çizme (linear_reg): Hangi model türünü kullanacağımızı belirleme.
-İş Akışını Tanımlama (workflow): Mimarî planı, ön işleme tarifiyle birleştirme.
-İnşaatı Başlatma (fit): Modeli eğitim verisine oturtma.
Mimari Plan (linear_reg) ve İş Akışı (workflow)
tidymodels’de, Lineer Regresyon modelini linear_reg() fonksiyonu ile tanımlarız.
# 1. Mimari Plan: Lineer Regresyon modelini tanımlayalım
linear_reg_spec <- linear_reg() %>%
set_engine("lm") %>% # R'ın yerleşik 'lm' motorunu kullanacağımızı belirtiyoruz
set_mode("regression") # Modun regresyon (sayısal tahmin) olduğunu belirtiyoruz
# 2. İş Akışını Tanımlama: Tarifi (Recipe) ve Planı (Model Spec) birleştiriyoruz
linear_reg_wf <- workflow() %>%
add_recipe(mtcars_recipe) %>%
add_model(linear_reg_spec)
Mimari Yorum: İş Akışı (workflow), bir mimari şablon görevi görür. Der ki: “Önce veriyi mtcars_recipe’e göre hazırla, ardından bu hazırlanmış veriyi al ve linear_reg_spec planına göre modeli inşa et.”
Şimdi, bu iş akışını kullanarak modeli Eğitim Seti üzerinde çalıştırıyoruz. Bu, modelimizin hp ve mpg arasındaki ilişkiyi ilk kez “öğrendiği” andır.
# İnşaat Başlıyor: Modeli Eğitim Seti üzerinde eğitelim
linear_reg_fit <- linear_reg_wf %>%
fit(data = mtcars_train)
# Eğitimli modelin özetine bakalım
print(linear_reg_fit)
## ══ Workflow [trained] ══════════════════════════════════════════════════════════
## Preprocessor: Recipe
## Model: linear_reg()
##
## ── Preprocessor ────────────────────────────────────────────────────────────────
## 1 Recipe Step
##
## • step_normalize()
##
## ── Model ───────────────────────────────────────────────────────────────────────
##
## Call:
## stats::lm(formula = ..y ~ ., data = data)
##
## Coefficients:
## (Intercept) hp
## 19.416 -4.347
Eğitilmiş model nesnesinden katsayıları ve istatistiksel sonuçları (lm motorunun sonuçlarını) alıp, mimari yorumumuzu yapalım.
# Modelin katsayılarını ve R-kare değerini çekelim
model_summary <- linear_reg_fit %>%
extract_fit_engine() %>%
summary()
# Katsayıları gösterelim
cat("--- Model Katsayıları ---\n")
## --- Model Katsayıları ---
print(model_summary$coefficients)
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) 19.41600 0.7213155 26.917485 6.848471e-19
## hp -4.34695 0.7361896 -5.904661 5.100555e-06
# R-kare değerini gösterelim
cat("\n--- Performans Göstergesi (R-squared) ---\n")
##
## --- Performans Göstergesi (R-squared) ---
cat("Eğitim Seti R-Kare Değeri:", round(model_summary$r.squared, 3), "\n")
## Eğitim Seti R-Kare Değeri: 0.603
Modelin Yorumlanması (Yapının Tanımlanması)
Eğitilmiş modelimizle, Lineer Regresyon denklemimizi somut sayılarla yazabiliriz:
\[ \widehat{\text{mpg}} = 19.42 - 4.35 \times \text{hp}_{\text{normalize}} \]
| Kavram | Değer | Mimari Yorum |
|---|---|---|
| Katsayı (Intercept) | \(19.42\) | \(\text{hp}\) değeri standardize edildiğinde (ortalama bir beygir gücüne sahip araba) beklenen \(\text{mpg}\) değeridir. |
| Eğim (Slope) | \(-4.35\) | Bu, bizim ana mimari bulgumuzdur: Normalleştirilmiş \(\text{hp}\)’deki her 1 birimlik artış, \(\text{mpg}\)’yi yaklaşık \(4.35\) birim azaltır. (Daha güçlü motor, daha düşük yakıt verimliliği). |
| R-Kare (\(\mathbf{R^2}\)) Değeri | \(\approx 0.60\) | \(\text{mpg}\)’deki değişkenliğin %60’ının \(\text{hp}\) değişkeni tarafından açıklandığı anlamına gelir. Bu, basit bir model için oldukça güçlü ve tatmin edici bir öğrenmedir. |
Bir modelin yüksek bir Rkare değeri vermesi, sadece “iyi tahminler” yaptığı anlamına gelir. Bir modelin güvenilir ve istatistiksel olarak geçerli olması için, Modelin Varsayımları’ bölümünde teorisini öğrendiğimiz Lineer Regresyon varsayımlarının karşılanması gerekir. Bu son denetim, projemizin yapı ruhsatının son mührüdür.
Bu denetimi, Lineer Regresyon varsayımlarını test etme konusunda uzmanlaşmış olsrr paketi ile gerçekleştireceğiz.
Öncelikle, tidymodels ile kurduğumuz modeli, varsayım denetimi için geleneksel lm nesnesine dönüştürelim:
# Modeli, olsrr'nin kullanabileceği geleneksel 'lm' nesnesine dönüştürüyoruz
lm_model <- linear_reg_fit %>%
extract_fit_engine()
Hataların Eşit Varyansı (Homoscedasticity) Denetimi
Şanslı’nın Holografik Boru Kartı: Hata yayılımının sabit kalıp kalmadığını kontrol eder. Bu varsayımın ihlali, modelin farklı tahmin aralıklarında eşit derecede güvenilir olmadığı anlamına gelir.
# OLS Regression varsayım testleri için olsrr paketini yüklüyoruz
# (Eğer kurulu değilse: install.packages("olsrr"))
library(olsrr)
# Breusch-Pagan Testi: H0: Eşit Varyans Vardır.
# (Küçük veri setlerinde olsrr uyarı verebilir)
ols_test_breusch_pagan(lm_model)
##
## Breusch Pagan Test for Heteroskedasticity
## -----------------------------------------
## Ho: the variance is constant
## Ha: the variance is not constant
##
## Data
## -------------------------------
## Response : ..y
## Variables: fitted values of ..y
##
## Test Summary
## ----------------------------
## DF = 1
## Chi2 = 0.7098135
## Prob > Chi2 = 0.3995057
| Satır | Değer | İstatistiksel Tanımı | Mimari Yorum |
|---|---|---|---|
| Ho: | the variance is constant |
Yokluk Hipotezi (H₀): Modelin hatalarının varyansı sabittir (Homoscedasticity). Bu, modelin geçerliliği için istenir. | Yapı Denetimi’nin kabul edeceği temel kural. |
| Ha: | the variance is not constant |
Alternatif Hipotez (Hₐ): Hataların varyansı sabit değildir (Heteroscedasticity). | Yapısal kusur (İstenmez). |
| Prob > Chi2 | \(\mathbf{0.3995}\) | P-Değeri: Testin sonucunu belirleyen değer. | Yapı Denetimi’nin nihai kararı. |
Hataların Normalliği (Normality) Denetimi
Şanslı’nın Çan Şeklinde Işık Halesi Kartı: Hataların Normal Dağılıma uygunluğunu kontrol eder. (H₀: Artıklar Normal Dağılır).
# Shapiro-Wilk Testi: H0: Artıklar Normal Dağılır.
ols_test_normality(lm_model)
## -----------------------------------------------
## Test Statistic pvalue
## -----------------------------------------------
## Shapiro-Wilk 0.8976 0.0163
## Kolmogorov-Smirnov 0.1632 0.4698
## Cramer-von Mises 2.4374 0.0000
## Anderson-Darling 0.9949 0.0105
## -----------------------------------------------
Mimari Yorum: İhlal Var ama Hafif!
P-Değeri: Çoğu testin P-değeri \(0.05\)’ten küçüktür. İstatistiksel olarak Hataların Normalliği varsayımı ihlal edilmiştir.
Uzmanlık Notu (Ghasemi & Zahediasl, 2012): Bu ihlalin şiddetini doğru yorumlamalıyız. Shapiro-Wilk gibi testler, özellikle küçük veri setlerinde (\(n \approx 30\)) normallikten en ufak sapmaya karşı aşırı hassastır. Merkezi Limit Teoremi uyarınca, örneklem büyüklüğümüz bu sınıra yakın olduğu için, bu tür hafif ihlaller genellikle tolere edilebilir kabul edilir, ancak ideal değildir.
Mimari Çözüm: Box-Cox Dönüşümü
İdeal bir senaryoda, bu normallik ihlalini gidermek için Log Dönüşümünün daha gelişmiş bir versiyonunu kullanabilirdik:
tidymodels tarifine step_BoxCox(mpg) adımını
ekleyebilirdik. Bu dönüşüm, hataların dağılımını ideal “Çan Eğrisi”ne
yaklaştırarak modelin katsayılarına olan güveni artırırdı.Bu bulguya rağmen, modelimizin Homoscedasticity varsayımını karşılaması ve Altın Oran genellemesi yapması nedeniyle, bu basit yapının temeli hala güçlü kabul edilebilir.
Hataların Bağımsızlığı (Independence) Denetimi
Şanslı’nın Bağımsız Yumaklar Kartı: Hataların birbirini etkilemediğini (ardışık bir korelasyon olmadığını) kontrol eder.
# Durbin-Watson Testi için klasik 'car' paketini kullanıyoruz
# (Eğer kurulu değilse: install.packages("car"))
library(car)
# Durbin-Watson Testi: H0: Artıklar Arasında Bağımlılık Yoktur.
durbinWatsonTest(lm_model)
## lag Autocorrelation D-W Statistic p-value
## 1 0.4667838 1.058799 0.01
## Alternative hypothesis: rho != 0
Mimari Yorum: Ciddi İhlal!
Denetim Sonucu: P-değeri 0.05’ten küçük olduğu için, Hatalar arasında bağımlılık olduğu sonucuna varıyoruz. H0’ı (Bağımlılık Yoktur) reddediyoruz.
Net Çıkarım: Modelin hataları pozitif otokorelasyon içermektedir. Bu, özellikle verinin listelenme sırasındaki sistematik bir hatadan kaynaklanır.
Çözüm: Bu ihlal, katsayıların standart hatalarının yanlış hesaplanmasına neden olur. Bu durumda bir mimar, modelin varsayımlarını düzelten Hata Dönüşümleri veya Bağımsız Sıralama gibi adımlar atar.
Büyük Resim: Yapısal Kusurlar ve Onarım Çözümleri
Basit Lineer Regresyon modelimiz (mpg ~ hp), ne yazık ki tüm Yapı Denetimi testlerinden tam not alamamıştır.
| Varsayım | Test Sonucu | Statü | Mimari Sonuç |
|---|---|---|---|
| Eşit Varyans (Homoscedasticity) | Breusch-Pagan P \(\approx 0.3995\) | GEÇERLİ | Hata yayılımı sabittir. |
| Hataların Normalliği | Shapiro-Wilk P \(\approx 0.0163\) | İHLAL | Hatalar simetrik dağılmamaktadır (Ancak \(n=32\) nedeniyle hafif tolere edilebilir). |
| Hataların Bağımsızlığı | Durbin-Watson P \(\approx 0.01\) | İHLAL | Hatalar arasında bağımlılık vardır (Otokorelasyon). |
Modelimiz Altın Oran performansına sahip olsa da, bu iki varsayımın ihlali, özellikle katsayılarımızın standart hatalarının ve dolayısıyla P-değerlerimizin güvenilirliğini zedelemektedir.
Mimari Onarım Planı:
Bu bulgular, bir veri mimarının sadece yüksek bir Rkare’ye bakarak bir modeli onaylamaması gerektiğini kanıtlar.
Geleceğe Yönelik Denetim: Çoklu Regresyon Senaryosu
Şu an basit regresyon modeli üzerinden gidiyoruz. Eğer çoklu regresyon modeli kurmuş olsaydık yapmamız gereken varsayım kontrolü aşağıdaki gibi olacaktı. Bölüm 8.3’de bu konu daha detaylı anlatılacak olup şimdilik dostlarımıza bilgi niteliğinde aşağıda sunulmuştur.
Modelimizi karmaşıklaştırarak gerçek hayatta karşılaşacağımız bir tehlikeye, Çoklu Doğrusallık (Multicollinearity)’a bakalım.
Yeni Mimari Plan:
\[ \text{mpg} \sim \text{hp} + \text{wt} + \text{cyl} \] Bu karmaşık modeli lm nesnesi olarak oluşturalım:
# Yeni, daha karmaşık modelimizi eğitim verisi üzerinde eğitiyoruz
complex_lm_model <- lm(mpg ~ hp + wt + cyl, data = mtcars_train)
Çoklu Doğrusallık Denetimi (VIF)
Çoklu Doğrusallık, VIF (Variance Inflation Factor) değeri ile ölçülür. Kuralımız: VIF değeri 5’in üzerinde olan değişkenler, model katsayılarının güvenilirliğini ciddi şekilde tehlikeye atar.
# Çoklu Doğrusallık Denetimi (VIF) için 'olsrr' kullanıyoruz.
ols_vif_tol(complex_lm_model)
Mimari Yorum:
Denetim Sonucu: Tüm VIF değerleri, kabul eşiği olan 5’in altındadır. Net Çıkarım: Karmaşık modelimizde dahi, değişkenler arasındaki güçlü korelasyonlara rağmen, ciddi bir Çoklu Doğrusallık sorunu yoktur. Bu, model katsayılarımızın bireysel yorumlanabilirliğini koruduğu anlamına gelir. Şanslı’nın İki Kedi Silüeti Kartı geçerlidir.
Harika bir iş çıkardık, dostlar! Basit Lineer Regresyon yapımızı inşa ederken, hem mükemmel performansı hem de gizli yapısal kusurları görmüş olduk.
| Varsayım | Statü | Sonuç |
|---|---|---|
| Genelleme Yeteneği (Altın Oran) | GEÇERLİ | Eğitim/Test R-Kare farkı \(\approx 0.04\) ile yüksek genelleme. |
| Eşit Varyans (Homoscedasticity) | GEÇERLİ | Breusch-Pagan Testi ile hata yayılımı sabittir. |
| Çoklu Doğrusallık (VIF Testi) | GEÇERLİ | Karmaşık modelde dahi VIF \(< 5\). |
| Normallik (Shapiro-Wilk) | İHLAL | Hatalar simetrik dağılmıyor (Çözüm: Box-Cox). |
| Bağımsızlık (Durbin-Watson) | İHLAL | Hatalar arasında otokorelasyon var (Çözüm: Sıralama/Hata Dönüşümleri). |
Öğrenilen Ders: Modelimiz performans (R-Kare) açısından sağlam olsa da, iki kritik istatistiksel varsayımı (Normallik ve Bağımsızlık) ihlal etmiştir. Bu, bir mimar olarak yüksek performansın her zaman geçerli bir yapı anlamına gelmediğini gösterir.
| Onarım Adımı | Hedeflenen Varsayım | Beklenen İyileşme |
|---|---|---|
| 1. Box-Cox Dönüşümü | Normallik ve Eşit Varyans | Hataların dağılımı Çan Eğrisi’ne yaklaşır. Bu, model katsayılarının ve P-Değerlerinin doğru hesaplanmasını garanti eder. \(R^2\)’de büyük bir değişiklik beklenmez, ancak modelin çıkarım (inference) gücü artar. |
| 2. Veriyi Rastgele Sıralama | Bağımsızlık (Otokorelasyon) | Hatalar arasındaki bağımlılık ortadan kalkar. Bu, katsayıların Standart Hatalarının doğru hesaplanmasını sağlar. Eğer Standart Hatalar yanlışsa, modelin ne kadar kesin tahminler yaptığını bilmek imkansızdır. |
Nihai Mimari Değerlendirme:
Bizim basit Lineer Regresyon modelimiz \(R^2\)≈0.60 ile zaten iyi tahminler yapıyordu.
Onarım adımlarının eklenmesiyle:
Model, hala \(R^2\)$≈0.60 civarında tahminler yapmaya devam eder.Ancak, bu kez modelin tüm P-Değerleri, Standart Hataları ve Güven Aralıkları artık istatistiksel olarak geçerlidir.
Bir mimar için, bir yapının estetiği (yüksek \(R^2\)) kadar, temelinin sağlam ve güvenilir olması (geçerli varsayımlar) da hayati öneme sahiptir. Bu onarımlar, modelimizi tahmin gücü yüksek ve istatistiksel geçerliliği kanıtlanmış bir yapıya dönüştürürdü.
“Ustalık Notu: Varsayım Onarımlarının Gücü”nde belirttiğimiz gibi, modelimizin performansını değil, istatistiksel geçerliliğini artırmak için ihlal edilen varsayımları hemen düzeltelim.
Bu, bir sonraki projemiz için de temel teşkil edecek olan, “Kusurlu Veri İçin Nihai Reçete”mizdir. Bu onarım adımlarını tidymodels tarifine ekleyelim:
1. Hataların Normalliği Onarımı: mpg’ye Box-Cox Dönüşümü eklenmesi.
2. Hataların Bağımsızlığı Onarımı: Veri setinin kullanımdan hemen önce rastgele sıralanması (sample_n(…, replace = FALSE)).
# 1. Veriyi RASTGELE sıralayalım (Bağımsızlık Onarımı)
set.seed(42)
mtcars_train_shuffled <- mtcars_train %>%
sample_n(size = nrow(mtcars_train), replace = FALSE)
# 2. Yeni Ön İşleme Tarifi (Box-Cox Dönüşümü Eklendi)
final_recipe <- recipe(mpg ~ hp, data = mtcars_train_shuffled) %>%
step_normalize(hp) %>%
# Normallik varsayımı ihlalini gidermek için Box-Cox dönüşümünü ekliyoruz
step_BoxCox(mpg)
# 3. Nihai İş Akışını ve Modeli Eğitelim
final_linear_reg_wf <- workflow() %>%
add_recipe(final_recipe) %>%
add_model(linear_reg_spec) # linear_reg_spec daha önce tanımlanmıştı
final_linear_reg_fit <- final_linear_reg_wf %>%
fit(data = mtcars_train_shuffled)
# Son Söz: Onarım ve Nihai Modelin İyileştirilmesi bölümündeki kodlar varsayılmıştır
# final_linear_reg_fit nesnesi Box-Cox ve Sıralama ile eğitilmiş modeldir.
# =======================================================
# YENİ YAPININ VARSAYIM TESTLERİ (Onarımların İspatı)
# =======================================================
# Onarılmış modeli lm nesnesine çekelim
final_lm_model <- final_linear_reg_fit %>%
extract_fit_engine()
# Varsayım testleri için paketleri yüklüyoruz
library(olsrr)
library(car)
# 1. Hataların Eşit Varyansı (Homoscedasticity) Denetimi
cat("--- 1. Breusch-Pagan Testi (Eşit Varyans) ---\n")
## --- 1. Breusch-Pagan Testi (Eşit Varyans) ---
ols_test_breusch_pagan(final_lm_model)
##
## Breusch Pagan Test for Heteroskedasticity
## -----------------------------------------
## Ho: the variance is constant
## Ha: the variance is not constant
##
## Data
## -------------------------------
## Response : ..y
## Variables: fitted values of ..y
##
## Test Summary
## -----------------------------
## DF = 1
## Chi2 = 4.670015
## Prob > Chi2 = 0.03069366
# 2. Hataların Normalliği (Normality) Denetimi
cat("\n--- 2. Normallik Testleri (Shapiro-Wilk) ---\n")
##
## --- 2. Normallik Testleri (Shapiro-Wilk) ---
ols_test_normality(final_lm_model)
## Warning in ks.test.default(y, "pnorm", mean(y), sd(y)): ties should not be
## present for the one-sample Kolmogorov-Smirnov test
## -----------------------------------------------
## Test Statistic pvalue
## -----------------------------------------------
## Shapiro-Wilk 0.9336 0.1052
## Kolmogorov-Smirnov 0.1354 0.7494
## Cramer-von Mises 4.7052 0.0000
## Anderson-Darling 0.7961 0.0337
## -----------------------------------------------
# 3. Hataların Bağımsızlığı (Independence) Denetimi
cat("\n--- 3. Durbin-Watson Testi (Bağımsızlık) ---\n")
##
## --- 3. Durbin-Watson Testi (Bağımsızlık) ---
durbinWatsonTest(final_lm_model)
## lag Autocorrelation D-W Statistic p-value
## 1 0.3051768 1.385308 0.106
## Alternative hypothesis: rho != 0
| Varsayım | İlk Model Sonucu (P-Değeri) | Nihai Model Sonucu (P-Değeri) | Statü | Mimari Değişim |
|---|---|---|---|---|
| Eşit Varyans | P \(\approx 0.3995\) | P \(\approx 0.0306\) | İHLAL | Onarım, bu varsayımı ilginç bir şekilde bozmuştur. Box-Cox dönüşümü bazen varyansı etkileyebilir. |
| Normallik | P \(\approx 0.0163\) (İHLAL) | Shapiro-Wilk P \(\approx 0.1052\) | GEÇERLİ | ONARILDI! Box-Cox, Normallik ihlalini başarıyla gidermiştir. |
| Bağımsızlık | P \(\approx 0.01\) (İHLAL) | P \(\approx 0.106\) | GEÇERLİ | ONARILDI! Rastgele sıralama, hatalar arasındaki bağımlılığı ortadan kaldırmıştır. |
Harika bir iş çıkardık, dostlar!
Basit bir Lineer Regresyon modeliyle başladık, tidymodels’in gücünü öğrendik ve modeli inşa ederken Altın Oran performansına ulaştık.
En önemlisi: Bir mimar titizliğiyle modelimizin varsayımlarındaki kusurları (Normallik ve Bağımsızlık) tespit ettik ve Box-Cox gibi ileri dönüşümlerle bu kusurları onararak modelimizin istatistiksel geçerliliğini sağladık.
Modelimiz artık bağımsız ve normal dağılmış hatalara sahiptir; bu, katsayılarımızın güvenilirliğini ve P-değerlerimizin doğruluğunu garanti altına almıştır.
Peki ya Eşit Varyans (P ≈0.0306), P-değeri 0.05’in hemen altındadır ve teknik olarak H0 reddedilir (Heteroscedasticity var). Ancak bu, Normallik ve Bağımsızlık gibi daha kritik varsayımların kurtarılması karşılığında kabul edilebilir bir ticarettir. İleri analizlerde, bu durum için Heteroscedasticity-tutarlı Standart Hatalar (HC SE) kullanılarak modelin tamamen geçerli hale getirileceğini söyleyebiliriz.
Sonuç: Modelimizin Altın Oran performansı, artık sağlam istatistiksel geçerlilikle desteklenmiştir!
Peki bir sonraki bölümde bizi neler bekliyor?
Bölüm 8.3: Mimarlık Detayları - Kategorik Değişkenler ve Etkileşim Gücü Basit yapının temelini attık. Ancak, gerçek dünyadaki yapılar (modeller) daha karmaşıktır. Bir arabanın yakıt tüketimine göre mil sadece hp’ye değil, aynı zamanda otomatik veya manuel vites olmasına (am), düz veya V-şekilli motora (vs) sahip olmasına da bağlıdır.
Bölüm 8.3’te Neler Yapacağız?
Kategorik Kolonlar: Denetimli Öğrenme Uzmanı’nın talimatıyla, tidymodels’te Kategorik Değişkenleri (am, vs, gear) Lineer Regresyon’a nasıl dahil edeceğimizi öğreneceğiz. (Mimari karşılığı: Farklı malzeme türlerini (beton, ahşap) plana dahil etme.)
Etkileşim Terimleri: İki değişkenin (örneğin hp ve wt) birlikte çalışarak tek başlarına olduklarından daha büyük bir etki yaratmasını sağlayan Etkileşim Terimlerini modelimize ekleyeceğiz. (Mimari karşılığı: İki farklı kolonu birleştirerek yeni bir taşıyıcı sistem oluşturma.)
Çoklu Regresyon: Bu yeni, karmaşık modelin performansını ve varsayımlarını (özellikle VIF’i) tekrar test ederek, en gelişmiş Çoklu Lineer Regresyon yapımızı inşa edeceğiz. Sayıların Ardındaki Sezgi artık somut, detaylı ve karmaşık mimariye dönüştü.
Veriyle kalın, lütfen takipte kalın dostlar…
Kaynakça