Giriş: Kompleks Yapı: Etkileşim ve Malzeme Bilimi

Merhaba Dostlar,

Bölüm 8.2’de kurduğumuz basit Lineer Regresyon yapısı, bize Altın Oran performansı ve onarım adımlarıyla birlikte istatistiksel geçerliliğin ne kadar kritik olduğunu gösterdi. Ancak, gerçek dünya modelleri, tek bir kolona (değişkene) güvenmez; çok katmanlı ve karmaşıktır.

Bu bölümde, modelimizi Çoklu Lineer Regresyon (MLR) seviyesine çıkararak, gerçeğe en yakın, karmaşık yapımızı inşa edeceğiz. Bu yapı; farklı malzeme türlerini (Kategorik Değişkenler) ve taşıyıcı sistemlerin birlikteliğini (Etkileşim Terimleri) içerecek.

KOD HARİTASI: İŞ AKIŞIMIZ

Bu bölümdeki kod, Lineer Regresyon varsayım ihlallerini onararak ve VIF felaketini çözerek en güvenilir Çoklu Regresyon modelini bulmayı amaçlayan, uçtan uca bir tidymodels iş akışıdır.

Aşama No. Kapsam Kritik Amaç
1-2 Temel Kurulum ve EDA Veri Hazırlığı, Kategorik Dönüşüm, Çarpıklık/Korelasyon Tespiti.
3 Recipe Tanımı VARGILARIN ONARILMASI: Box-Cox, Rastgele Sıralama ve Dummy Kodlama ile modelin temeli atılır.
4 Model Eğitimi Yüksek R² (tahmin gücü) elde etme.
5-6 Varsayım Denetimi KUSUR TESPİTİ: VIF (Çoklu Doğrusallık) ve Cook’s D (Etkili Gözlem) ihlallerinin kanıtlanması.
7 Sadeleştirme Teorisi Stepwise’ın Eleştirisi ve Lasso/Ridge/Elastic Net’e geçiş zorunluluğu.
8-9 Nihai Onarım ve Kapanış KANIT: Düzenlileştirme modellerinin eğitilmesi, Ters Dönüşüm ve Test Seti R² ile nihai üstünlüğün ispatlanması.

Yeni Malzemeler ve Zemin Etüdü: Detaylı Keşifçi Veri Analizi (EDA)

Yeni yapımız için mtcars veri setindeki en kritik tüm değişkenleri kullanacağız.

Yeni Malzeme Listemiz:

-Sayısal: hp (Beygir Gücü), wt (Ağırlık), mpg (Hedef)

-Kategorik: cyl (Silindir Sayısı), vs (Motor Tipi), am (Şanzıman Tipi)

-Kritik Ön Aşama: Sayısalı Kategorikten Ayırma

Mimarlıkta, bir malzemenin türü önemlidir. cyl, vs ve am gibi sayısal değerlerle ifade edilen ancak nicelikten çok nitelik belirten değişkenleri, R’da doğru malzeme tipi olan Faktör (Factor) olarak tanımlayalım.

# Sayısal görünen kategorik değişkenleri Factor tipine dönüştürüyoruz
data_tbl_complex <- data_tbl %>%
  mutate(
    cyl = factor(cyl), # Silindir sayısı (4, 6, 8)
    vs  = factor(vs),  # Motor tipi (0/1)
    am  = factor(am)   # Şanzıman tipi (0/1)
  )

Temel Tanımlayıcı İstatistikler: Yapısal Özet

Modelimizi besleyecek sayısal değişkenlerin genel özelliklerini (merkezi eğilim, yayılım ve uç değerler) bir tabloda özetleyelim.

# Temel Tanımlayıcı İstatistikler: Yapısal Özet
# Tüm sayısal değişkenleri seçelim ve özetleyelim
data_tbl_complex %>%
  dplyr::select(mpg, hp, wt, disp, drat) %>% # <- dplyr::select kullanıldı
  base::summary() # <- base::summary kullanıldı
##       mpg              hp              wt             disp      
##  Min.   :10.40   Min.   : 52.0   Min.   :1.513   Min.   : 71.1  
##  1st Qu.:15.43   1st Qu.: 96.5   1st Qu.:2.581   1st Qu.:120.8  
##  Median :19.20   Median :123.0   Median :3.325   Median :196.3  
##  Mean   :20.09   Mean   :146.7   Mean   :3.217   Mean   :230.7  
##  3rd Qu.:22.80   3rd Qu.:180.0   3rd Qu.:3.610   3rd Qu.:326.0  
##  Max.   :33.90   Max.   :335.0   Max.   :5.424   Max.   :472.0  
##       drat      
##  Min.   :2.760  
##  1st Qu.:3.080  
##  Median :3.695  
##  Mean   :3.597  
##  3rd Qu.:3.920  
##  Max.   :4.930

Kategorik Malzemelerin Dağılımı ve Frekansı

Kategorik malzemelerimizin (Silindir, Şanzıman, Motor Tipi) veri setimizde nasıl dağıldığını görelim.

# Kategorik Malzemelerin Dağılımı ve Frekansı
# Tüm faktör değişkenlerinin frekans tablolarını oluşturalım
data_tbl_complex %>%
  dplyr::select(cyl, am, vs, gear) %>% # <- dplyr::select kullanıldı
  purrr::map(~base::table(.) %>% base::prop.table() %>% base::round(2)) # <- purrr::map kullanıldı
## $cyl
## .
##    4    6    8 
## 0.34 0.22 0.44 
## 
## $am
## .
##    0    1 
## 0.59 0.41 
## 
## $vs
## .
##    0    1 
## 0.56 0.44 
## 
## $gear
## .
##    3    4    5 
## 0.47 0.38 0.16

Mimari Yorum:

Silindir sayısı 8 olan araçlar (cyl=8) veri setinin ≈%43’ünü oluşturur. Bu, modelin bu kategoriye güçlü bir odaklanma sağlayacağını gösterir. Manuel şanzımanlı araçların (am=1) oranı ise ≈%41’dir.

Sayısal Malzemelerin İstatiksel Kalitesi: Çarpıklık/Basıklık Analizi

Box-Cox dönüşümünün gerekliliğini nicel olarak ispatlamak için, temel değişkenlerimizin dağılımının ne kadar çarpık olduğunu kontrol edelim. (±2 eşiği referansımızdır.)

# Sayısal Malzemelerin İstatiksel Kalitesi: Çarpıklık/Basıklık Analizi
# mpg ve ana sayısal değişkenlerin çarpıklığını (skewness) hesaplayalım
num_vars_skew <- data_tbl_complex %>%
  dplyr::select(mpg, hp, wt, disp, drat) %>% # <- dplyr::select kullanıldı
  purrr::map_df(~moments::skewness(.)) %>%    # <- purrr::map_df kullanıldı
  base::round(2)

base::print(num_vars_skew) # <- base::print kullanıldı
## # A tibble: 1 × 5
##     mpg    hp    wt  disp  drat
##   <dbl> <dbl> <dbl> <dbl> <dbl>
## 1  0.64  0.76  0.44   0.4  0.28

İstatistiksel Yorum:

Çarpıklık (Skewness) değerleri incelendiğinde, mpg ’nin çarpıklığı (≈0.64) ve diğer değişkenlerin tamamının çarpıklık değerleri akademik eşik olan ±2 ’nin oldukça altındadır (Kim, 2005). Ancak: Özellikle hp (≈0.76) ve wt (≈0.44) gibi önemli değişkenlerdeki pozitif çarpıklık, modelin hatalarının Normallik varsayımını zorlayabileceğini gösterir.

Bu durum, Box-Cox dönüşümünü kullanarak modelin istatistiksel geçerliliğini sağlama kararımızın nicel dayanağıdır. Çarpık malzemelerimizin “tedavi” edilmesi gerektiğini teyit etmiş olduk.

Sayısal Malzemelerin Görsel İspatı (Doğrusallık Kontrolü)

Mimari tasarımın ilk adımı, temel sayısal malzemelerimizin (hp, wt, disp, drat) hedefimiz (mpg) ile doğrusal bir ilişki sergileyip sergilemediğini görsel olarak kontrol etmektir.

# 1. hp vs mpg
plot_hp <- data_tbl_complex %>%
  ggplot(aes(x = hp, y = mpg)) +
  geom_point(color = "#0072B2") +
  geom_smooth(method = "lm", se = FALSE, color = "darkred") +
  labs(title = "HP vs MPG", x = "Beygir Gücü (hp)", y = "MPG") +
  theme_minimal()

# 2. wt vs mpg
plot_wt <- data_tbl_complex %>%
  ggplot(aes(x = wt, y = mpg)) +
  geom_point(color = "#0072B2") +
  geom_smooth(method = "lm", se = FALSE, color = "darkblue") +
  labs(title = "Ağırlık vs MPG", x = "Ağırlık (wt)", y = "MPG") +
  theme_minimal()

# 3. disp vs mpg (Motor Hacmi)
plot_disp <- data_tbl_complex %>%
  ggplot(aes(x = disp, y = mpg)) +
  geom_point(color = "#0072B2") +
  geom_smooth(method = "lm", se = FALSE, color = "darkgreen") +
  labs(title = "Motor Hacmi (disp) vs MPG", x = "Motor Hacmi", y = "MPG") +
  theme_minimal()

# 4. drat vs mpg (Arka Aks Oranı)
plot_drat <- data_tbl_complex %>%
  ggplot(aes(x = drat, y = mpg)) +
  geom_point(color = "#0072B2") +
  geom_smooth(method = "lm", se = FALSE, color = "darkorange") +
  labs(title = "Aks Oranı (drat) vs MPG", x = "Aks Oranı (drat)", y = "MPG") +
  theme_minimal()

# Grafikleri 2x2 düzeninde gösterelim
gridExtra::grid.arrange(plot_hp, plot_wt, plot_disp, plot_drat, ncol = 2, nrow = 2)

Görsel Yorum:

Dört grafiğin tamamında, noktaların Lineer Regresyon’un temel gereksinimi olan düz bir çizgi etrafında dağıldığı görülür. Özellikle hp,wt ve disp ile mpg arasında güçlü bir negatif ilişki varken, drat ile mpg arasında daha zayıf bir pozitif ilişki (daha yüksek aks oranı, daha iyi yakıt tüketimi) gözlemlenir. Bu, Doğrusallık varsayımının tüm ana sayısal değişkenler için geçerli olduğunu gösterir.

Kategorik Malzemelerin Etki Analizi (Kutu Grafikleri)

Kategorik değişkenler (farklı malzeme türlerinin) \(\text{mpg}\) üzerindeki etkisini Kutu Grafikleri ile analiz edelim.

# 1. cyl vs mpg (Silindir Sayısı)
plot_cyl <- data_tbl_complex %>%
  ggplot(aes(x = cyl, y = mpg, fill = cyl)) +
  geom_boxplot() +
  labs(title = "Silindir Sayısı (cyl)", x = "Silindir Sayısı", y = "MPG") +
  theme_minimal() + theme(legend.position = "none")

# 2. am vs mpg (Şanzıman Tipi)
plot_am <- data_tbl_complex %>%
  ggplot(aes(x = am, y = mpg, fill = am)) +
  geom_boxplot() +
  labs(title = "Şanzıman Tipi (am)", x = "Şanzıman (0=Otomatik, 1=Manuel)", y = "MPG") +
  scale_x_discrete(labels = c("0" = "Otomatik", "1" = "Manuel")) +
  theme_minimal() + theme(legend.position = "none")

# 3. vs vs mpg (Motor Tipi)
plot_vs <- data_tbl_complex %>%
  ggplot(aes(x = vs, y = mpg, fill = vs)) +
  geom_boxplot() +
  labs(title = "Motor Tipi (vs)", x = "Motor (0=V-şeklinde, 1=Düz)", y = "MPG") +
  scale_x_discrete(labels = c("0" = "V-şeklinde", "1" = "Düz")) +
  theme_minimal() + theme(legend.position = "none")

# 4. gear vs mpg (Vites Sayısı)
plot_gear <- data_tbl_complex %>%
  ggplot(aes(x = factor(gear), y = mpg, fill = factor(gear))) +
  geom_boxplot() +
  labs(title = "Vites Sayısı (gear)", x = "Vites Sayısı", y = "MPG") +
  theme_minimal() + theme(legend.position = "none")

# Grafikleri 2x2 düzeninde gösterelim
gridExtra::grid.arrange(plot_cyl, plot_am, plot_vs, plot_gear, ncol = 2, nrow = 2)

Görsel Yorum:

Dört grafiğin tamamında, gruplar arasında belirgin ortalama farkları gözlemlenir. Özellikle Silindir Sayısı (cyl) azaldıkça ve Motor Tipi Düz (vs=1) oldukça, mpg’nin arttığı açıktır. Benzer şekilde, Manuel Şanzıman (am=1) ve 5 vitesli araçlar (gear=5) daha yüksek mpg ortalamasına sahiptir. Bu güçlü etkiler, tüm bu kategorik değişkenlerin Çoklu Regresyon modelimize değerli ve açıklayıcı bilgiler katacağını kanıtlar.

Nümerik Kontrol: Korelasyon Matrisi ve Isı Haritası

Çoklu Regresyon’a dahil edeceğimiz tüm sayısal değişkenlerin (\(\text{mpg}\), \(\text{hp}\), \(\text{wt}\), \(\text{disp}\), \(\text{drat}\)) birbirleriyle olan ilişkisini, yani Çoklu Doğrusallık riskini önceden sezinlemek için Korelasyon Matrisi ve Isı Haritası kullanalım. Yüksek korelasyon (\(\text{r} > 0.90\)) ciddi bir risk işaretidir.

# Korelasyon Matrisi ve Isı Haritası
# Tüm sayısal değişkenleri seçelim
num_vars_all <- data_tbl_complex %>%
  dplyr::select(mpg, hp, wt, disp, drat) %>% # <- Sadece dplyr::select kullanıldı
  dplyr::select(where(is.numeric))           # <- dplyr::select kullanıldı

# Korelasyon matrisini hesaplayalım
cor_matrix_all <- cor(num_vars_all) # <- Çatışma yaratmayacak basit cor() çağrısı

# Sayısal matrisi yazdıralım
cat("--- Korelasyon Matrisi ---\n")
## --- Korelasyon Matrisi ---
print(cor_matrix_all)
##             mpg         hp         wt       disp       drat
## mpg   1.0000000 -0.7761684 -0.8676594 -0.8475514  0.6811719
## hp   -0.7761684  1.0000000  0.6587479  0.7909486 -0.4487591
## wt   -0.8676594  0.6587479  1.0000000  0.8879799 -0.7124406
## disp -0.8475514  0.7909486  0.8879799  1.0000000 -0.7102139
## drat  0.6811719 -0.4487591 -0.7124406 -0.7102139  1.0000000
# Korelasyon Isı Haritasını çizelim
# (corrplot paketinin yüklü olduğu varsayılmıştır)
library(corrplot)

corrplot(cor_matrix_all, 
         method = "color",       # Renk ile göster
         type = "upper",         # Matrisin sadece üst yarısını göster (daha temiz)
         diag = TRUE,            # Köşegende değişkenin kendisini (1.00) göster
         addCoef.col = "black",  # Katsayıları siyah renkte yaz
         tl.col = "black",       # Değişken isimlerini siyah renkte yaz
         tl.srt = 45,            # İsimleri 45 derece eğik yaz
         title = "Sayısal Değişkenler Arası Korelasyon Isı Haritası",
         mar = c(0,0,1,0))

Mimari Yorum:

Isı Haritası Yorumu: Isı haritasına baktığımızda, ’nin hedef olduğu satırın (y ekseni) çoğunun koyu kırmızı/mavi olduğunu görüyoruz. Ancak asıl tehlike, öngörücü değişkenler (X’ler) arasındaki yüksek korelasyonda yatar:

Örneğin, hp ve disp arasındaki korelasyonun çok yüksek (≈0.79) olduğu görülmektedir. wt ve disp arasındaki korelasyon da oldukça yüksektir (≈0.89).Bu yüksek korelasyonlar, Çoklu Doğrusallık riskinin ÇOK CİDDİ olduğunu ve hp, disp, wt gibi değişkenlerin modelde birbirlerinin etkisini şişireceğini işaret eder. Bu risk, Adım 5’teki VIF testimizin kesinlikle gerekeceğini gösteriyor.

Kapsamlı Zemin Etüdü: Çift Değişkenli Görselleştirme (ggpairs)

Modelin tüm sayısal değişkenler arasındaki ilişkileri bir bakışta görelim.

# ggpairs grafiği ile tüm sayısal değişkenler arasındaki ilişkileri görelim.
# (GGally paketinin yüklü olduğu varsayılmıştır)
library(GGally)

data_tbl_complex %>%
  dplyr::select(mpg, hp, wt, disp, drat) %>% # <- dplyr::select kullanıldı
  ggpairs() +
  labs(title = "Sayısal Değişkenler Arası İlişki Matrisi") +
  theme_minimal()

Görsel Yorum:

Grafik, önceki Korelasyon Matrisi’ndeki bulgularımızı görsel olarak teyit eder:

disp, hp ve wt arasındaki noktaların yoğunluğu, bu değişkenler arasında r>0.7 ’den yüksek, ciddi bir Çoklu Doğrusallık riskinin olduğunu bir kez daha gösterir.

Ustalık Notu:

Korelasyon Anlamlılığı (Yıldız İşaretleri):

ggpairs grafiğinde korelasyon katsayılarının yanında gördüğünüz yıldız işaretleri (*), o korelasyonun istatistiksel olarak anlamlı olduğu anlamına gelir. Ne kadar çok yıldız varsa, o kadar anlamlıdır (Cohen,1988). Örneğin, mpg ’nin hp , wt ve disp ile olan korelasyonlarının yanındaki yıldızlar, bu ilişkilerin tesadüf eseri olmadığını kanıtlar. Bu, EDA’daki bulgularımızı istatistiksel olarak destekler.

Mimari Planlama: Etkileşim ve Nihai Formül

Teorik Temel: Kategorik Kodlama (Dummy Değişkenler)

Lineer Regresyon, Factor tipi değişkenleri doğrudan kullanamaz. Bu değişkenlerin, her bir kategori için 0 veya 1 değeri alan yeni sütunlara (Dummy Değişkenler) dönüştürülmesi gerekir. Örneğin, cyl=6 için yeni bir sütun oluşturulur. tidymodels’te bu dönüşümü step_dummy() ile otomatik yapacağız.

Etkileşim Terimleri: Birlikteliğin Gücü (Yeni Yapının Sinerjisi) Çoklu Regresyonda sadece ana etkileri (hp+ am) değil, iki değişkenin birlikte çalışarak yarattığı sinerjiyi (hp×am) de yakalamak isteriz.

Seçilen Etkileşim: Bir aracın Beygir Gücünün (hp), Şanzıman Tipi (am) manuel olduğunda ne kadar farklı bir etki yarattığı, yakıt tüketimi için en mantıklı sinerjiyi temsil eder.

Nihai Çoklu Regresyon Formülümüz:

Hedefimiz, mpg’yi tahmin etmek için, EDA’da güçlü etkiye sahip olduğunu gördüğümüz tüm değişkenleri ve seçtiğimiz etkileşim terimini kullanmaktır.

\[ \mathbf{\text{mpg}} \sim \mathbf{\text{hp} \times \text{am}} + \mathbf{\text{wt}} + \mathbf{\text{disp}} + \mathbf{\text{drat}} + \mathbf{\text{cyl}} + \mathbf{\text{vs}} + \mathbf{\text{gear}} \] Mimari Yorum:

Bu formül, mpg’deki değişkenliğin %85−90’ını açıklamayı hedefleyen, tüm önemli malzemeleri birleştiren, maksimum açıklayıcılığa sahip karmaşık yapımızın planıdır. Ancak, hp, disp ve wt arasındaki yüksek korelasyon, bu modelin ciddi VIF problemleriyle karşılaşacağının en güçlü ön işaretidir. Bu, bizi model sadeleştirme konusunda daha kararlı olmaya yönlendirecektir.

Nihai Reçete ve Varsayım Onarımı

Bölüm 8.2’de karşılaştığımız Normallik ve Bağımsızlık varsayımı ihlallerini ve yeni modelimizin gerektirdiği Kategorik Kodlamayı tek bir “Ön İşleme Tarifi”nde (recipes) birleştiriyoruz. Bu reçete, modelimizin istatistiksel geçerliliğini garanti altına alacak sigortamızdır.

Hataların Bağımsızlığı Onarımı: Rastgele Sıralama

İlk olarak, önceki bölümde hatalar arasında çıkan bağımlılığı (otokorelasyon) gidermek için, veriyi modellemeye sokmadan önce rastgele sıralıyoruz.

# Veri setini bölelim (data_tbl_complex'i kullanıyoruz)
set.seed(42)
mtcars_split_complex <- initial_split(data_tbl_complex, prop = 0.8, strata = mpg)
mtcars_train_complex <- training(mtcars_split_complex)

# Hataların Bağımsızlığı (Otokorelasyon) onarımı: Veriyi RASTGELE sıralayalım
mtcars_train_shuffled <- mtcars_train_complex %>% 
  sample_n(size = nrow(mtcars_train_complex), replace = FALSE)

Kusursuz Ön İşleme Tarifi (Nihai Reçete)

Şimdi, Adım 2’de belirlediğimiz formülü ve tüm onarım/dönüşüm adımlarını içeren nihai tarifimizi yazalım.

# Lütfen Kodu Bu Şekilde Değiştirin
# Nihai Ön İşleme Tarifini (Recipe) Tanımlayalım
final_complex_recipe <- recipe(
  # SADE FORMÜL: Sadece tüm ana değişkenleri listeleyelim 
  mpg ~ hp + am + wt + disp + drat + cyl + vs + gear, 
  data = mtcars_train_shuffled
) %>%
  # KRİTİK EKLEME: Etkileşim Terimini adım olarak ekliyoruz
  step_interact(terms = ~ hp:am) %>% # Etkileşim terimini adım olarak tanımla
  # 1. Normallik İhlali Onarımı: Hedef değişken (mpg) için Box-Cox dönüşümü
  step_BoxCox(mpg) %>%
  # 2. Kategorik değişkenleri Dummy Değişkenlere dönüştürme
  step_dummy(all_nominal_predictors()) %>%
  # 3. Sayısal değişkenleri normalize etme
  step_normalize(all_numeric_predictors())

# Tarifin adımlarını özetleyelim
final_complex_recipe %>% summary()

Mimari Yorum:

Reçetemiz artık üç temel görevi üstlenmiştir:

-Onarım (Box-Cox & Rastgele Sıralama): Modelin istatistiksel geçerliliğini tehdit eden Normallik ve Bağımsızlık ihlallerini gidermiştir.

-Dönüşüm (step_dummy): Kategorik değişkenleri Lineer Regresyon’un anlayacağı Dummy Değişkenlere çevirmiştir.

-Standartlaştırma (step_normalize): Sayısal değişkenleri normalize ederek, Lasso/Ridge gibi algoritmaların adil bir şekilde çalışmasını ve katsayıların kolayca yorumlanmasını sağlamıştır.

Bu reçete, tüm temel değişkenleri işlemeye hazırdır. Formülümüzdeki Etkileşim Terimi’ni ise bir sonraki aşamada workflow’a ekleyerek mimari planımızı tamamlayacağız.

Bu reçete ile artık modelimizin temel statik kurallara uyma potansiyeli en üst seviyeye çıkmıştır.

Çoklu Yapının İnşaası ve Değerlendirme

Bu aşamada, Adım 3’te hazırladığımız kusursuz reçeteyi (Box-Cox, Normalizasyon ve Dummy kodlama) alıp, Adım 2’de belirlediğimiz Etkileşim Termini içeren nihai formülle birleştirerek modelimizi eğiteceğiz.

İş Akışını Tanımlama ve Etkileşim Formülünü Ekleme

tidymodels’te, nihai formülü (mpg ~ hp * am + …) workflow objesine ekleyerek, modelin recipes’ten gelen işlenmiş veriyi bu karmaşık formüle göre kullanmasını sağlıyoruz.

# Mimari Plan (Lineer Regresyon Spesifikasyonu, Adım 4'ten devralındı)
linear_reg_spec <- linear_reg() %>%
  set_engine("lm") %>%
  set_mode("regression")

# Nihai İş Akışını Tanımlayalım
complex_linear_reg_wf <- workflow() %>%
  add_recipe(final_complex_recipe) %>% # İşlenmiş verinin tarifini ekle
  add_model(linear_reg_spec)          # SADECE modeli ekle (Formül artık tarifin içinde)

Mimari Yorum:

complex_linear_reg_wf objesi, artık modelimizi eğitmek için gereken tüm malzemeyi, tüm onarım adımlarını ve en karmaşık formülü içeren, tam bir Yapı Şablonudur.

Yapıyı Dikme ve Performans Kazancının Analizi

Şimdi, bu iş akışını kullanarak modeli eğitim verisi üzerinde çalıştıralım ve Çoklu Regresyon’un bize getirdiği açıklayıcı gücü (R-Kare kazancı) görelim.

# İnşaat Başlıyor: Modeli Eğitim Seti üzerinde eğitelim
complex_linear_reg_fit <- complex_linear_reg_wf %>%
  fit(data = mtcars_train_shuffled)

R-Kare Karşılaştırması: Kazancın İspatı

# Nihai modelin R-Kare değerini hesaplayalım
complex_model_rsq <- complex_linear_reg_fit %>%
  extract_fit_engine() %>%
  summary() %>%
  pluck("r.squared")

cat("--- R-Kare Karşılaştırması (Açıklayıcı Güç Kazancı) ---\n")
## --- R-Kare Karşılaştırması (Açıklayıcı Güç Kazancı) ---
cat("1. Basit Model (mpg ~ hp) R² Bölüm 8.2'de hesaplanmıştı.: ", 0.60, "\n")
## 1. Basit Model (mpg ~ hp) R² Bölüm 8.2'de hesaplanmıştı.:  0.6
cat("2. Kompleks Model R²:", round(complex_model_rsq, 3), "\n")
## 2. Kompleks Model R²: 0.886

Mimari Yorum (Kazanç Analizi):

Çoklu değişkenlerin ve etkileşim teriminin eklenmesiyle, R-Kare(\(R^2\)) değeri (beklenen olarak 0.85 üzeri) basit modele göre dramatik bir şekilde artmıştır. Bu, yeni malzemeler ve karmaşık bağlantılar (etkileşim) sayesinde, modelimizin açıklayıcı gücünü %25’ten fazla artırdığımız anlamına gelir.

Bu yüksek \(R^2\) değeri, modelimizin Underfitting (tembellik) yapmadığını, aksine verideki varyansın çok büyük bir kısmını yakaladığını kanıtlar.

Artık modelimizin yüksek performansta olduğunu biliyoruz. Ancak, bu yüksek \(R^2\)’nin bir illüzyon olup olmadığını görmek için, Adım 5’te VIF testi ile daha önce tespit ettiğimiz Ciddi Çoklu Doğrusallık tehlikesine odaklanmalıyız. Ayrıca tüm varsayım kontrollerine beraberce bakacağız.