Machine Learning คืออะไร? แล้วเราจะสร้างโมเดลทำนายผู้รอดชีวิตบนเรื่อง titanic ได้ยังไง? หาคำตอบทั้งหมดได้ในบทความนี้
Hi ML
Machine Learning คือการที่คอมพิวเตอร์สามารถเรียนรู้ pattern ต่างๆด้วยตัวเองโดยที่มนุษย์ไม่ต้องเขียนโปรแกรมสั่งมันเลยว่าต้องทำอะไรยังไงบ้าง? (learn without being explicitly programmed)




วิธีการสอนคอมพิวเตอร์ก็แค่ให้มันเห็นตัวอย่างเยอะๆ (giving it a lot of examples/ data) แล้วคอมพิวเตอร์จะเริ่มเรียนรู้จาก data ที่เราป้อนให้กับมัน ถ้าเทียบกับการเรียนรู้ของมนุษย์ data = human experience
- ถ้าอยากสอนให้มันรู้จักสตรอเบอร์รี่ → ให้มันเห็นสตรอเบอร์รี่เยอะๆ
- ถ้าอยากสอนให้มันรู้จักส้ม → ให้มันเห็นส้มเยอะๆ
- คอมพิวเตอร์จะเริ่มเรียนรู้ pattern (หรือที่เราเรียกว่า feature) ของวัตถุต่างๆ แล้วจะเริ่มทำนายได้ถูกต้องมากขึ้นตามประสบการณ์หรือปริมาณ data ที่มันได้รับ
การสอนคอมพิวเตอร์แบบให้มันเห็นตัวอย่างเยอะๆ (a lot of examples) เรียกว่า Supervised Learning อย่างที่ชื่อบอกเลย supervise (v.) คือการเรียนรู้แบบ observe มองดูและทำตาม อย่างมีชั้นเชิง!
ตัวอย่างวันนี้เราจะสอนคอมพิวเตอร์ว่าผู้รอดชีวิตบนเรือ titanic หน้าตาเป็นยังไง? เช่น เป็นเพศหญิงหรือเพศชาย, เป็นผู้โดยสาร class ไหน รวยหรือจน? พอคอมพิวเตอร์เรียนรู้ pattern พวกนี้แล้วมันก็จะสามารถทำนายผู้รอดชีวิตได้ถูกต้องมากขึ้น ก่อนจะไปที่ case study มาทำความเข้าใจ ML workflow กันก่อน
ML Workflow
เวลาเราสร้างโมเดล (DS เรียกว่าการเทรนโมเดล) ขั้นตอนการเทรนจะแบ่งเป็น 4 ขั้นตอน คลิกที่กล่องด้านล่างเพื่ออ่านรายละเอียดในแต่ละ step
1. Prepare
50% – 80% ของเวลาทำงานจะอยู่ใน step ที่หนึ่ง คือการ prepare data เตรียมข้อมูลให้พร้อมสำหรับการทำ data analysis ปกติจะมีงานที่เราต้องทำ 3 อย่างคือ [1] จัดการ missing value [2] จัดการพวก outliers [3] ปรับ distribution ของข้อมูล i.e. standardization/ normalization
เสร็จแล้วเราต้องแบ่งข้อมูลเป็น 2 ส่วนคือ train (70%) และ test (30%) แล้วไปต่อที่ step ที่สอง
2. Train
เราจะเทรนโมเดลด้วยข้อมูล train set (70%) ที่เราแบ่งไว้ในขั้นตอนที่หนึ่ง เราสามารถเลือกใช้งาน algorithm ได้หลายตัวขึ้นอยู่กับประเภทตัวแปรที่เราต้องการทำนาย
Algorithm ที่หลายคนน่าจะเคยได้ยินมาแล้ว เช่น linear regression, logistic regression, decision tree, random forest, neural networks ไปจนถึง deep learning เป็นต้น
3. Score
Score คือการทำนายผลที่เราเรียกว่า predict นั่นเอง (ML เรียกว่าการทำ scoring) เรานำโมเดลที่เทรนเสร็จแล้วใน step ที่สองมาทำนาย test data 30% ที่เหลือ เพื่อดูว่าโมเดลของเราทำงานได้ดีแค่ไหน? ในตัวอย่าง titanic วันนี้เราจะวัด performance ของโมเดลเราด้วยค่า % accuracy
4. Deploy
Prepare → Train → Score → Deploy ขั้นตอนสุดท้ายคือการทำโมเดลที่เราทดสอบแล้วไปใช้งานจริง เรียกว่าการทำ model deployment ตรงนี้ต้องใช้ความรู้พวก software engineer รวมถึงความรู้เรื่อง cloud services ต่างๆ อย่าง Amazon AWS หรือ Google Cloud
Alright Friends! ตอนนี้ทุกคนน่าจะเข้าใจขั้นตอนการสร้างโมเดลคร่าวๆแล้ว ถัดไปมาลองเขียนโค้ดกันบ้าง tutorial นี้แอดใช้ R (อีกแล้ว 555+) สำหรับเพื่อนๆที่ยังเขียน R ไม่เป็น ก็สามารถทำตาม tutorial นี้ได้ ดาวน์โหลดและติดตั้งโปรแกรม R และ RStudio ก่อน
Data Files
tutorial นี้แอดทำความสะอาดข้อมูลและแบ่ง data ให้เรียบร้อยแล้ว ในชีวิตจริงขั้นตอนการ prepare data ใช้เวลาเยอะมาก (tutorial นี้เราจะข้ามไปที่ step 2-3 ของ ML workflow เลย)
ดาวน์ข้อมูล train และ test csv ได้ที่นี่
เปิดดูข้อมูลด้วยโปรแกรม Excel ตัวแปรที่เราต้องการทำนายคือ Survived (target หรือ label) ส่วนตัวแปร Pclass, Sex, Age, SibSp, Parch คือตัวแปรต้น (ML เรียกว่า features)

เราสามารถโหลด csv file เข้าสู่ RStudio ด้วยฟังชั่น read.csv()
ในวงเล็บคือ path ที่เราเซฟข้อมูลไว้
titanic_train <- read.csv("C:/Users/Desktop/titanic_train.csv")
titanic_test <- read.csv("C:/Users/Desktop/titanic_test.csv")
To do – เราสามารถเรียกดู 6 แถวแรกของ titanic_train ใน console ด้วยฟังชั่น head(titanic_train)
ก่อนที่จะเริ่มเทรนโมเดล เราต้องเปลี่ยน data type ของตัวแปร Survived ให้เป็น factor ด้วยโค้ดนี้
titanic_train$Survived <- as.factor(titanic_train$Survived)
titanic_test$Survived <- as.factor(titanic_test$Survived)
Train Model
Algorithm ที่เราจะเทรนด้วยกันวันนี้คือ Decision Tree เป็น ML algorithm แบบ tree-based นิยมใช้กับปัญหา classification เช่น ทำนายว่าผู้โดยสารคนไหนจะรอดจาก titanic บ้าง? โดยที่ 1=yes และ 0=no
copy โค้ดนี้ลงใน RStudio Console เพื่อติดตั้ง package decision tree (ชื่อว่า rpart และ rpart.plot)
install.packages(c("rpart", "rpart.plot"))
library(rpart)
library(rpart.plot)
เทรน decision tree ด้วยฟังชั่น rpart()
เขียนโค้ดแค่บรรทัดเดียวก็เสร็จแล้ว!! parameters ต่างๆของโมเดลที่สร้างอยู่ใน object ชื่อว่า tree_fit
อย่าลืมว่าตอนเราเทรนโมเดลเราใช้ data = titanic_train
tree_fit <- rpart(Survived ~ ., data = titanic_train)
Score Model
ลองใช้โมเดล tree_fit ที่เราสร้างขึ้นมาทำนายข้อมูล testing set ใน R สามารถทำขั้นตอนนี้ได้ง่ายๆด้วยฟังชั่น predict()
กำหนด data = titanic_test
เสร็จแล้วเราสามารถคำนวณ test accuracy ด้วยโค้ดไลน์ที่สองด้านล่าง เพื่อนๆที่ทำตาม tutorial น่าจะได้ accuracy ไม่ต่ำกว่า 90% ทุกคน – Well done!
p <- predict(tree_fit, newdata = titanic_test, type = "class")
mean(p == titanic_test$Survived)
Visualize Model
เราสามารถ plot tree ของเราด้วยฟังชั่น rpart.plot(tree_fit)
rpart.plot(tree_fit)
You Make Me Proud!
ยินดีด้วยสำหรับทุกคนที่ทำตาม tutorial มาจนถึง section นี้ ตอนนี้ทุกคนได้เห็นขั้นตอนการสร้าง ML model แบบที่ data scientist ทำกันอยู่ทุกวันนี้แล้ว
- ML workflow มีทั้งหมด 4 ขั้นตอน prepare → train → score → deploy
- Supervised Learning คือการสอนคอมพิวเตอร์ด้วยการแสดงตัวอย่างให้มันดูเยอะๆ (show me a lot of training data!) แล้วทดสอบความรู้มันด้วย test data
- Algorithms มีให้เลือกหลายแบบ ตัวอย่างวันนี้ใช้ decision tree สำหรับ classification problem
- วันนี้เราเขียนโค้ดแค่ 11 lines เอง Machine Learning ไม่ได้ยากอย่างที่หลายคนคิด 😛
ถ้าต้องการ(บังคับ)ให้โมเดล เริ่มพิจารณาจาก Age ก่อนที่จะเริ่มพิจารณาจากเพศ ต้องทำอย่างไรครับ
Decision Tree เป็น Greedy Algorithm ครับ ตัวแปรที่เลือกมา split ในแต่ละ node คือตัวแปรที่แบ่งข้อมูลได้ดีที่สุด ณ stage นั้นครับ
แอดไม่เคยลองบังคับโมเดลแบบนี้เลยครับ ไม่แน่ใจว่าทำได้ป่าว ลองตัดตัวแปร gender ออกก็ได้ครับ หรือไม่ก็ทำสองโมเดล male vs. female
รบกวนสอบถามว่าถ้าเราใช้ hyperparameter tuning แล้ว เรายังจำเป็นต้อง prune decision tree ไหมครับ
pruning มีสองแบบครับ : post vs. pre
pre หรือ online training คือการที่เรา set threshold (หรือ hyperparameter) ก่อนเทรนโมเดลครับ
post คือเราสร้าง tree ให้เสร็จก่อน แล้วค่อยพรุนกลับให้ tree เล็กลง
ถ้า hyperparameter เราจูนมาดีแล้ว ก็ไม่ต้องทำ post pruning ก็ได้ครับ // ปล. แต่ถ้าเราทำ post pruning ก็มีโอกาสเจอ simpler tree ที่มี accuracy พอๆกัน
ขอวิธีหรือแนว deploy model ที่สร้างขึ้นเป็น api หรือ web service ด้วยครับ
ขอสอบถามหน่อยครับ ในเมื่อเรามีจำนวนผู้รอดชีวิตที่เป็น ค่า 0 กับ 1 แล้วเราจะทำนายอะไร
พอดีว่าผมมีข้อมูลราคาบ้านแบบนี้เหมือนกันแต่อาจารย์ให้ทำนายราคาบ้าน ในเมื่อเรามีราคาบ้านอยู่แล้วจะทำนายอะไรครับ
Machine Learning มีสอง phases ครับ Training กับ Inference
พอเราเทรนโมเดลเสร็จแล้ว (training) นำโมเดลไปใช้ทำนาย (inference) ข้อมูลใหม่ได้ครับ
ลองแบ่งข้อมูลเป็นสองส่วนง่ายๆก็ได้ครับ 80-20 แล้วเทรนโมเดลด้วย 80% ทำนาย 20%
ทำนายราคาบ้าน 20% ที่โมเดลเราไม่เคยเห็นมาก่อนตอนเทรน
ข้อมูลบนเพจนี้บางส่วน error รบกวนแอดช่วยแก้ไขด้วยคับ
ตัวอย่างเช่น
“เวลาเราสร้างโมเดล (DS เรียกว่าการเทรนโมเดล) ขั้นตอนการเทรนจะแบ่งเป็น 4 ขั้นตอน คลิกที่กล่องด้านล่างเพื่ออ่านรายละเอียดในแต่ละ step
.ugb-91bd085 .ugb-accordion__heading{border-radius:12px !important}.ugb-91bd085 .ugb-accordion__title{color:#222222}.ugb-91bd085 .ugb-accordion__arrow{fill:#222222}.ugb-91bd085 .ugb-accordion__heading{font-size:16px !important} “