แสดงภาพการคาดการณ์การเช่าจักรยาน
ในแบบฝึกหัดก่อนหน้า คุณได้แสดงภาพการคาดการณ์ของโมเดลจักรยานโดยใช้กราฟกระจาย "ผลลัพธ์จริง vs. การคาดการณ์" แบบมาตรฐาน เนื่องจากข้อมูลการเช่าจักรยานเป็นข้อมูลอนุกรมเวลา จึงอาจน่าสนใจที่จะดูว่าโมเดลทำงานได้ดีเพียงใดเมื่อเวลาผ่านไป ในแบบฝึกหัดนี้ จะเปรียบเทียบการคาดการณ์กับยอดเช่าจริงรายชั่วโมง สำหรับ 14 วันแรกของเดือนสิงหาคม
เพื่อสร้างกราฟ จะใช้ฟังก์ชัน tidyr::pivot_longer() (docs) เพื่อรวบรวมค่าที่คาดการณ์และค่าจริงจาก bikesAugust ไว้ในคอลัมน์เดียว pivot_longer() รับอาร์กิวเมนต์ดังนี้:
- data frame แบบ "wide" ที่ต้องการ pivot (ระบุโดยปริยายผ่าน pipe)
- ชื่อของคอลัมน์ที่จะรวบรวมเป็นคอลัมน์เดียว (คีย์เวิร์ด "cols")
- ชื่อของคอลัมน์คีย์ที่จะสร้างขึ้น ซึ่งจะเก็บชื่อของคอลัมน์ที่รวบรวม (คีย์เวิร์ด "names_to")
- ชื่อของคอลัมน์ค่าที่จะสร้างขึ้น ซึ่งจะเก็บค่าจากคอลัมน์ที่รวบรวม (คีย์เวิร์ด "values_to")
จะใช้ data frame ที่ผ่านการ pivot แล้วเพื่อเปรียบเทียบจำนวนการเช่าจริงและที่คาดการณ์ตามเวลา ดัชนีเวลา instant นับจำนวนการสังเกตนับตั้งแต่เริ่มเก็บข้อมูล โค้ดตัวอย่างจะแปลง instant เป็นหน่วยวัน โดยเริ่มจาก 0
ข้อมูล data frame bikesAugust พร้อมกับการคาดการณ์ (bikesAugust$pred) ถูกโหลดไว้ล่วงหน้าแล้ว
แบบฝึกหัดนี้เป็นส่วนหนึ่งของหลักสูตร
Supervised Learning ใน R: การถดถอย
คำแนะนำการฝึกหัด
- เติมช่องว่างเพื่อพล็อตการคาดการณ์และจำนวนจริงรายชั่วโมง สำหรับ 14 วันแรกของเดือนสิงหาคม
- แปลง
instantให้อยู่ในหน่วยวัน แทนที่จะเป็นชั่วโมง - ใช้
pivot_longer()กับคอลัมน์cntและpredรวบรวมเป็นคอลัมน์ชื่อvalueโดยมีคีย์ชื่อvaluetype - ใช้
filter()เพื่อเลือกสองสัปดาห์แรกของเดือนสิงหาคม - พล็อต
valueเป็นฟังก์ชันของinstant(วัน)
- แปลง
โมเดลสามารถจับรูปแบบเวลาโดยรวมของการเช่าจักรยานได้หรือไม่?
แบบฝึกหัดเชิงโต้ตอบแบบลงมือทำ
ลองทำแบบฝึกหัดนี้โดยเติมโค้ดตัวอย่างนี้ให้สมบูรณ์
# Plot predictions and cnt by date/time
bikesAugust %>%
# set start to 0, convert unit to days
mutate(instant = (instant - min(instant))/24) %>%
# collect cnt and pred into a value column
pivot_longer(cols = c('cnt', 'pred'), names_to = '___', values_to = '___') %>%
filter(instant < 14) %>% # restric to first 14 days
# plot value by instant
ggplot(aes(x = ___, y = ___, color = valuetype, linetype = valuetype)) +
geom_point() +
geom_line() +
scale_x_continuous("Day", breaks = 0:14, labels = 0:14) +
scale_color_brewer(palette = "Dark2") +
ggtitle("Predicted August bike rentals, Quasipoisson model")