การแปลงค่าตอบสนองก่อนการสร้างโมเดล

Supervised Learning ใน R: การถดถอย

Nina Zumel and John Mount

Win-Vector, LLC

Log Transform สำหรับข้อมูลทางการเงิน

  • มูลค่าทางการเงิน: กระจายแบบ lognormal
  • หางยาว ช่วงข้อมูลกว้าง (60–700K)
Supervised Learning ใน R: การถดถอย

การแจกแจงแบบ Lognormal

  • mean > median (~ 50K vs 39K)
  • การพยากรณ์ค่าเฉลี่ยจะสูงกว่าค่าทั่วไป
Supervised Learning ใน R: การถดถอย

กลับสู่การแจกแจงแบบ Normal

สำหรับการแจกแจงแบบ Normal:

  • mean = median (ที่นี่: 4.53 vs 4.59)
  • ช่วงข้อมูลสมเหตุสมผลมากขึ้น (1.8 - 5.8)
Supervised Learning ใน R: การถดถอย

ขั้นตอนการทำงาน

  1. แปลง log ค่าผลลัพธ์แล้วสร้างโมเดล
     model <- lm(log(y) ~ x, data = train)
    
Supervised Learning ใน R: การถดถอย

ขั้นตอนการทำงาน

  1. แปลง log ค่าผลลัพธ์แล้วสร้างโมเดล
     model <- lm(log(y) ~ x, data = train)
    
  2. พยากรณ์ในสเกล log
     logpred <- predict(model, data = test)
    
Supervised Learning ใน R: การถดถอย

ขั้นตอนการทำงาน

  1. แปลง log ค่าผลลัพธ์แล้วสร้างโมเดล
     model <- lm(log(y) ~ x, data = train)
    
  2. พยากรณ์ในสเกล log
     logpred <- predict(model, data = test)
    
  3. แปลงค่าพยากรณ์กลับสู่สเกลเดิม
     pred <- exp(logpred)
    
Supervised Learning ใน R: การถดถอย

การพยากรณ์ค่าผลลัพธ์ที่แปลง Log: ความคลาดเคลื่อนเชิงคูณ

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

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

  • ความคลาดเคลื่อนเชิงคูณ: $pred/y$
  • ความคลาดเคลื่อนสัมพัทธ์: $(pred - y)/y = \frac{pred}{y} - 1$

การลดความคลาดเคลื่อนเชิงคูณช่วยลดความคลาดเคลื่อนสัมพัทธ์ด้วย

Supervised Learning ใน R: การถดถอย

Root Mean Squared Relative Error

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

  • การพยากรณ์ผลลัพธ์ log ช่วยลด RMS-relative error
  • แต่โมเดลมักมี RMSE ที่สูงขึ้น
Supervised Learning ใน R: การถดถอย

ตัวอย่าง: โมเดลรายได้โดยตรง

modIncome <- lm(Income ~ AFQT + Educ, data = train)
  • AFQT: คะแนนทดสอบทักษะ 25 ปีก่อนสำรวจ
  • Educ: จำนวนปีที่ศึกษาจนถึงวันสำรวจ
  • Income: รายได้ ณ วันสำรวจ
Supervised Learning ใน 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-relative error
36,819.39 3.295189
Supervised Learning ใน R: การถดถอย

โมเดล log(Income)

modLogIncome <- lm(log(Income) ~ AFQT + Educ, data = train)
Supervised Learning ใน 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-relative error
38,906.61 2.276865
Supervised Learning ใน R: การถดถอย

เปรียบเทียบค่าความคลาดเคลื่อน

โมเดล log(Income): RMS-relative error น้อยกว่า แต่ RMSE มากกว่า

โมเดล RMSE RMS-relative error
บน Income 36,819.39 3.295189
บน log(Income) 38,906.61 2.276865
Supervised Learning ใน R: การถดถอย

มาฝึกกันเถอะ!

Supervised Learning ใน R: การถดถอย

Preparing Video For Download...