在建模前轉換應變數

R 中的監督式學習:回歸

Nina Zumel and John Mount

Win-Vector, LLC

貨幣資料的對數轉換

  • 金額:近對數常態分佈
  • 長尾、範圍廣(60–700K)
R 中的監督式學習:回歸

對數常態分佈

  • 平均值 > 中位數(約 50K vs 39K)
  • 預測平均值會高估典型值
R 中的監督式學習:回歸

回到常態分佈

對常態分佈:

  • 平均值 = 中位數(此處:4.53 vs 4.59)
  • 動態範圍更合理(1.8–5.8)
R 中的監督式學習:回歸

步驟

  1. 對結果取對數並擬合模型
     model <- lm(log(y) ~ x, data = train)
    
R 中的監督式學習:回歸

步驟

  1. 對結果取對數並擬合模型
     model <- lm(log(y) ~ x, data = train)
    
  2. 在對數空間做預測
     logpred <- predict(model, data = test)
    
R 中的監督式學習:回歸

步驟

  1. 對結果取對數並擬合模型
     model <- lm(log(y) ~ x, data = train)
    
  2. 在對數空間做預測
     logpred <- predict(model, data = test)
    
  3. 將預測轉回原始空間
     pred <- exp(logpred)
    
R 中的監督式學習:回歸

預測取對數的結果:乘法誤差

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

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

  • 乘法誤差:$pred/y$
  • 相對誤差:$(pred - y)/y = \frac{pred}{y} - 1$

降低乘法誤差會降低相對誤差。

R 中的監督式學習:回歸

均方根相對誤差

RMS 相對誤差 = $\sqrt{ \overline{ (\frac{pred-y}{y})^2 }}$

  • 預測取對數的結果可降低 RMS 相對誤差
  • 但模型的 RMSE 往往較大
R 中的監督式學習:回歸

範例:直接建模 Income

modIncome <- lm(Income ~ AFQT + Educ, data = train)
  • AFQT:調查前 25 年的能力測驗分數
  • Educ:至調查時的受教育年數
  • Income:調查時的收入
R 中的監督式學習:回歸

模型效能

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 相對誤差
36,819.39 3.295189
R 中的監督式學習:回歸

建模 log(Income)

modLogIncome <- lm(log(Income) ~ AFQT + Educ, data = train)
R 中的監督式學習:回歸

模型效能

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 相對誤差
38,906.61 2.276865
R 中的監督式學習:回歸

誤差比較

log(Income) 模型:RMS 相對誤差較小,RMSE 較大

模型 RMSE RMS 相對誤差
Income 36,819.39 3.295189
log(Income) 38,906.61 2.276865
R 中的監督式學習:回歸

一起來練習吧!

R 中的監督式學習:回歸

Preparing Video For Download...