Relative error
ในแบบฝึกหัดนี้ เราจะเปรียบเทียบ relative error กับ absolute error โดยนิยาม relative error ไว้ดังนี้
$$ rel = \frac{(y - pred)}{y} $$
กล่าวคือ ค่า error จะถูกวัดเทียบกับค่าผลลัพธ์จริง และวัด relative error โดยรวมของโมเดลด้วย root mean squared relative error:
$$ rmse_{rel} = \sqrt(\overline{rel^2}) $$
โดยที่ \(\overline{rel^2}\) คือค่าเฉลี่ยของ \(rel^2\)
ชุดข้อมูลตัวอย่าง fdata ถูกโหลดไว้ให้แล้ว ประกอบด้วยคอลัมน์ต่อไปนี้:
y: ค่าผลลัพธ์จริงที่โมเดลต้องทำนาย สมมติว่าเป็นยอดเงินที่ลูกค้าแต่ละคนจะใช้จ่ายต่อการเข้าร้านหนึ่งครั้งpred: ค่าที่โมเดลทำนายสำหรับylabel: ตัวแปรประเภท categorical ระบุว่าyมาจากกลุ่มที่ซื้อสินค้าในปริมาณsmall(น้อย) หรือlarge(มาก)
เป้าหมายคือการหาว่าโมเดลใด "ทำได้ดีกว่า" ระหว่างโมเดลที่ทำนายการซื้อแบบ small กับแบบ large
แบบฝึกหัดนี้เป็นส่วนหนึ่งของหลักสูตร
Supervised Learning ใน R: การถดถอย
คำแนะนำการฝึกหัด
- เติมช่องว่างเพื่อตรวจสอบข้อมูล สังเกตว่า large purchases มีมูลค่าสูงกว่า small purchases ประมาณ 100 เท่า
- เติมช่องว่างเพื่อสร้างคอลัมน์ error:
- กำหนด residual เป็น
y - pred - กำหนด relative error เป็น
residual / y
- กำหนด residual เป็น
- เติมช่องว่างเพื่อคำนวณและเปรียบเทียบ RMSE กับ relative RMSE
- absolute error และ relative error ของทั้งสองโมเดลต่างกันอย่างไร?
- ตรวจสอบกราฟที่แสดงค่าที่ทำนายเทียบกับค่าจริง
- คิดว่าโมเดลใด "ทำได้ดีกว่า"?
แบบฝึกหัดเชิงโต้ตอบแบบลงมือทำ
ลองทำแบบฝึกหัดนี้โดยเติมโค้ดตัวอย่างนี้ให้สมบูรณ์
# fdata is available
summary(fdata)
# Examine the data: generate the summaries for the groups large and small:
fdata %>%
group_by(label) %>% # group by small/large purchases
summarize(min = ___, # min of y
mean = ___, # mean of y
max = ___) # max of y
# Fill in the blanks to add error columns
fdata2 <- fdata %>%
group_by(label) %>% # group by label
mutate(residual = ___, # Residual
relerr = ___) # Relative error
# Compare the rmse and rmse.rel of the large and small groups:
fdata2 %>%
group_by(label) %>%
summarize(rmse = ___, # RMSE
rmse.rel = ___) # Root mean squared relative error
# Plot the predictions for both groups of purchases
ggplot(fdata2, aes(x = pred, y = y, color = label)) +
geom_point() +
geom_abline() +
facet_wrap(~ label, ncol = 1, scales = "free") +
ggtitle("Outcome vs prediction")