Die Zielvariable vor dem Modellieren transformieren

Überwachtes Lernen in R: Regression

Nina Zumel and John Mount

Win-Vector, LLC

Der Log-Transform für Gelddaten

  • Geldbeträge: lognormal verteilt
  • Langer Schwanz, große Spannweite (60–700K)
Überwachtes Lernen in R: Regression

Lognormale Verteilungen

  • Mittelwert > Median (~ 50K vs. 39K)
  • Den Mittelwert vorherzusagen überschätzt typische Werte
Überwachtes Lernen in R: Regression

Zurück zur Normalverteilung

Für eine Normalverteilung:

  • Mittelwert = Median (hier: 4,53 vs. 4,59)
  • Vernünftigere Spannweite (1,8–5,8)
Überwachtes Lernen in R: Regression

Das Vorgehen

  1. Logge die Zielvariable und passe ein Modell an
     model <- lm(log(y) ~ x, data = train)
    
Überwachtes Lernen in R: Regression

Das Vorgehen

  1. Logge die Zielvariable und passe ein Modell an
     model <- lm(log(y) ~ x, data = train)
    
  2. Erzeuge Vorhersagen im Log-Raum
     logpred <- predict(model, data = test)
    
Überwachtes Lernen in R: Regression

Das Vorgehen

  1. Logge die Zielvariable und passe ein Modell an
     model <- lm(log(y) ~ x, data = train)
    
  2. Erzeuge Vorhersagen im Log-Raum
     logpred <- predict(model, data = test)
    
  3. Transformiere die Vorhersagen zurück
     pred <- exp(logpred)
    
Überwachtes Lernen in R: Regression

Vorhersage log-transformierter Ziele: multiplikativer Fehler

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

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

  • Multiplikativer Fehler: $pred/y$
  • Relativer Fehler: $(pred - y)/y = \frac{pred}{y} - 1$

Den multiplikativen Fehler zu verringern, verringert den relativen Fehler.

Überwachtes Lernen in R: Regression

Root Mean Squared Relative Error

RMS-relativer Fehler = $\sqrt{ \overline{ (\frac{pred-y}{y})^2 }}$

  • Log-Zielvorhersage reduziert den RMS-relativen Fehler
  • Aber das Modell hat oft einen größeren RMSE
Überwachtes Lernen in R: Regression

Beispiel: Einkommen direkt modellieren

modIncome <- lm(Income ~ AFQT + Educ, data = train)
  • AFQT: Ergebnis eines Eignungstests 25 Jahre vor der Umfrage
  • Educ: Schul-/Ausbildungsjahre bis zur Umfrage
  • Income: Einkommen zum Zeitpunkt der Umfrage
Überwachtes Lernen in R: Regression

Modellleistung

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-relativer Fehler
36,819.39 3.295189
Überwachtes Lernen in R: Regression

`log(Income)` modellieren

modLogIncome <- lm(log(Income) ~ AFQT + Educ, data = train)
Überwachtes Lernen in R: Regression

Modellleistung

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-relativer Fehler
38,906.61 2.276865
Überwachtes Lernen in R: Regression

Fehler vergleichen

log(Income)-Modell: kleinerer RMS-relativer Fehler, größerer RMSE

Modell RMSE RMS-relativer Fehler
Auf Income 36,819.39 3.295189
Auf log(Income) 38,906.61 2.276865
Überwachtes Lernen in R: Regression

Lass uns üben!

Überwachtes Lernen in R: Regression

Preparing Video For Download...