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.
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 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)
)
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 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.
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.
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 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.
Ç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.
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.
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.
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.
İ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)
Ş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.
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.
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.
Ş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.