0 of 16 lessons complete (0%)
Exit Course

Lesson 8 – Predict house price

📝 คอร์สนี้ไม่ใช่คอร์สสอน coding/ programming นะครับ แอดแค่ยก code มาให้ดูเป็นตัวอย่างว่าเราเขียนโค้ดสร้าง ML models ยังไง ถ้าใครอยากเรียน code เต็มๆ มาลงเรียน bootcamp กับแอด 555+

Classification And REgression Tree

ตอนนี้ทุกคนรู้แล้วว่าทำไมเราต้องเขียน code บทเรียนนี้เราก็จะมา code กันเลยเต็มๆ 555+

caret คือ package ที่แอดจะใช้สอนในคอร์สนี้ และภาษาแรกที่เราจะมาเล่นด้วยกันคือ R

📝 Nice to know – caret ย่อมาจากคำว่า Classification And REgression Tree

Prepare Environment

ข้อดีของงาน data science ทุกวันนี้คือเราแทบจะไม่ต้องลงโปรแกรมใน laptop เราเลย วันนี้เราจะเขียนโค้ดกันบน posit.cloud นะครับ สมัคร free account ได้เลย เราจะได้ VM มาใช้ฟรี 25 ชั่วโมงต่อเดือน

Posit Cloud (ชื่อเก่าคือ RStudio Cloud)

เปิด posit.cloud ขึ้นมา (ชื่อเก่าคือ Rstudio.cloud) คลิกสร้าง project ใหม่ พอเข้ามาถึงหน้า IDE ของเราแล้ว ให้เรากดปุ่ม + สีเขียวที่มุมซ้ายบน เลือก [New] R Script

📝 IDE = Integrated Development Environment เราเรียก posit cloud ว่า IDE สำหรับเขียนภาษา R

  • เราเขียน code ในหน้าต่าง script
  • เวลากดรันผล output จะแสดงในหน้า console
Getting Started with RStudio/ Posit Cloud

รันคำสั่ง install.packages() ในหน้าต่าง script เพื่อดาวน์โหลด packages ที่ต้องใช้ในโปรเจ็คนี้

install.packages("tidyverse")
install.packages("caret")

หลังจากเราติดตั้ง library เสร็จแล้ว ให้เราเรียก library ขึ้นมาใช้ด้วย library()

library(tidyverse)
library(caret)

📝 วิธีการกดรันคำสั่งในหน้าต่าง script ใช้ shortcut CTRL+Enter ที่โค้ดบรรทัดนั้นๆได้เลย

Review Basic ML Workflow

Code ที่เราเขียนจะ reflect แต่ละ step ใน ML workflow ด้านล่างเลย

รีวิว ML workflow

วิธีการสร้างโมเดล ML แบบที่ง่ายสุดคือ train-test-split

  • Split data
  • Train model
  • Predict new data (scoring)
  • Evaluate model

Dataset

ข้อมูลราคาบ้าน Boston ที่แอดจะใช้สอนในบทนี้

โดยคอลัมน์ label ที่เราต้องการทำนายคือ medv หรือ median value prices โจทย์นี้เป็น regression problem และ baseline model ที่เราจะเทรนคือ Linear Regression

ตัวอย่างข้อมูล Boston DataFrame

📝 Pro Tip – ตอนเราทำงานจริง เราจะเขียน script ของเราขึ้นมาแล้วค่อยกด run ทีเดียวก็ได้ โดย code ของเราจะรันจากบนลงล่างตาม steps ที่เราเขียนไว้

Code Execution in R
Formative Quiz

Split Data

ขั้นตอนแรกคือการ prepare data เราจะเขียนโค้ดเพื่อดาวน์โหลดข้อมูล CSV จาก url เข้าสู่ IDE ของเรา เสร็จแล้ว split data เป็น train 80% และ test 20% ด้วย code chunk ด้านล่าง

# read csv data
url <- "https://raw.githubusercontent.com/toyeiei/datarockieblog/main/course/ml4e/boston.csv"
df <- read_csv(url)

# split data
set.seed(42)
id <- sample(1:nrow(df), 0.8*nrow(df))
train_df <- df[id, ]
test_df <- df[-id, ]

📝 แถวที่มี # อยู่ข้างหน้าคือ comment เฉยๆนะครับ ใช้เขียนอธิบาย code เรา

Train Model

พอเรา split data เสร็จแล้ว ก็ถึงขั้นตอนการ train model ใน R เราใช้ฟังก์ชัน train() ตรงๆเลย 555+

ตัวอย่างนี้เรากำหนด method = "lm" โดยพารามิเตอร์นี้เป็นตัวกำหนด ML algorithm ที่เราใช้เทรนโมเดล

# train model
model <- train(medv ~ tax + rm + age + crim, data = train_df, method = "lm")

📝 lm คือ linear model หรือ linear regression ที่เราน่าจะเคยเรียนตอนอยู่มหาลัยมาบ้างแล้ว (ลืมหมดแล้วแอด 555+) สมการของเราจะหน้าตาแบบนี้ medv = b0 + b1*tax + b2*rm + b3*age + b4*crim

Predict New Data (Scoring)

ตอนนี้เราเก็บค่าโมเดลที่เทรนเสร็จแล้วอยู่ที่ object model ขั้นตอนที่สามคือการนำโมเดลไปทำนาย test data ด้วยฟังก์ชัน predict()

# predict new data
pred_price <- predict(model, newdata = test_df)

Evaluate Model

ขั้นตอนสุดท้าย วัดผลโมเดลของเราด้วย RMSE หรือ Root Mean Squared Error เป็นหนึ่งใน common metrics สำหรับโมเดล Regression

# evaluate model
RMSE(pred_price, test_df$medv)

📝 ค่า RMSE (error) ยิ่งต่ำยิ่งดี ถ้าเข้าใกล้ศูนย์แปลว่าโมเดลเราทำนายได้แม่นมาก

Full Code

เสร็จแล้ว ง่ายจนงง 555+ ถึงแม้ทุกคนจะไม่ได้เข้าใจ code ทั้งหมด 100% แต่ความสวยงามของ R คือโค้ดมันเขียนง่ายมากๆ เราเรียก R ว่า fast data crunching language เวลาเราอยากลองทำโมเดลเร็วๆ R เป็นตัวเลือกที่ดีมาก

ML Model แรกของทุกคนเสร็จแล้ว ยินดีด้วยครับ
library(tidyverse)
library(caret)

# read csv data
url <- "https://raw.githubusercontent.com/toyeiei/datarockieblog/main/course/ml4e/boston.csv"
df <- read_csv(url)

# split data
set.seed(42)
id <- sample(1:nrow(df), 0.8*nrow(df))
train_df <- df[id, ]
test_df <- df[-id, ]

# train model
model <- train(medv ~ tax + rm + age + crim, data = train_df, method = "lm")

# predict new data
pred_price <- predict(model, newdata = test_df)

# evaluate model
RMSE(pred_price, test_df$medv)
Formative Quiz