Modellemeden önce yanıtı dönüştürme

R'de Supervised Learning: Regresyon

Nina Zumel and John Mount

Win-Vector, LLC

Parasal Veriler için Log Dönüşümü

  • Parasal değerler: lognormal dağılım
  • Uzun kuyruk, geniş dinamik aralık (60-700K)
R'de Supervised Learning: Regresyon

Lognormal Dağılımlar

  • ortalama > medyan (~ 50K vs 39K)
  • Ortalama kestirimi tipik değerleri fazla tahmin eder
R'de Supervised Learning: Regresyon

Yeniden Normal Dağılıma Dönüş

Normal Dağılım için:

  • ortalama = medyan (burada: 4.53 vs 4.59)
  • daha makul dinamik aralık (1.8 - 5.8)
R'de Supervised Learning: Regresyon

İzlenecek Yol

  1. Sonucu logla ve bir model kur
     model <- lm(log(y) ~ x, data = train)
    
R'de Supervised Learning: Regresyon

İzlenecek Yol

  1. Sonucu logla ve bir model kur
     model <- lm(log(y) ~ x, data = train)
    
  2. Tahminleri log uzayında yap
     logpred <- predict(model, data = test)
    
R'de Supervised Learning: Regresyon

İzlenecek Yol

  1. Sonucu logla ve bir model kur
     model <- lm(log(y) ~ x, data = train)
    
  2. Tahminleri log uzayında yap
     logpred <- predict(model, data = test)
    
  3. Tahminleri sonuç uzayına dönüştür
     pred <- exp(logpred)
    
R'de Supervised Learning: Regresyon

Log-dönüşümlü Sonuçları Tahmin: Çarpımsal Hata

$log(a) + log(b) = log(ab)$

$log(a) - log(b) = log(a/b)$

  • Çarpımsal hata: $pred/y$
  • Bağıl hata: $(pred - y)/y = \frac{pred}{y} - 1$

Çarpımsal hatayı azaltmak bağıl hatayı azaltır.

R'de Supervised Learning: Regresyon

Kök Ortalama Kare Bağıl Hata

RMS-bağıl hata = $\sqrt{ \overline{ (\frac{pred-y}{y})^2 }}$

  • Log-sonuç tahmini RMS-bağıl hatayı düşürür
  • Ama modelin RMSE'si genelde daha büyük olur
R'de Supervised Learning: Regresyon

Örnek: Geliri Doğrudan Modelle

modIncome <- lm(Income ~ AFQT + Educ, data = train)
  • AFQT: Ankete 25 yıl kala yapılan yeterlik testindeki puan
  • Educ: Anket zamanına kadar eğitim yılı
  • Income: Anket zamanındaki gelir
R'de Supervised Learning: Regresyon

Model Performansı

test %>% 
+     mutate(pred = predict(modIncome, newdata = test),
+            err = pred - Income) %>%
+     summarize(rmse = sqrt(mean(err^2)),
+               rms.relerr = sqrt(mean((err/Income)^2))) 
RMSE RMS-bağıl hata
36,819.39 3.295189
R'de Supervised Learning: Regresyon

log(Income) Modeli

modLogIncome <- lm(log(Income) ~ AFQT + Educ, data = train)
R'de Supervised Learning: Regresyon

Model Performansı

test %>% 
+     mutate(predlog = predict(modLogIncome, newdata = test), 
+            pred = exp(predlog), 
+            err = pred - Income) %>%
+     summarize(rmse = sqrt(mean(err^2)),
+               rms.relerr = sqrt(mean((err/Income)^2)))
RMSE RMS-bağıl hata
38,906.61 2.276865
R'de Supervised Learning: Regresyon

Hataları Karşılaştır

log(Income) modeli: daha küçük RMS-bağıl hata, daha büyük RMSE

Model RMSE RMS-bağıl hata
Income üzerinde 36,819.39 3.295189
log(Income) üzerinde 38,906.61 2.276865
R'de Supervised Learning: Regresyon

Hadi pratik yapalım!

R'de Supervised Learning: Regresyon

Preparing Video For Download...