สร้าง Decision Tree ทำนายผู้รอดชีวิตบนเรือ Titanic ด้วย R

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

Alright Friends! ตอนนี้ทุกคนน่าจะเข้าใจขั้นตอนการสร้างโมเดลคร่าวๆแล้ว ถัดไปมาลองเขียนโค้ดกันบ้าง tutorial นี้แอดใช้ R (อีกแล้ว 555+) สำหรับเพื่อนๆที่ยังเขียน R ไม่เป็น ก็สามารถทำตาม tutorial นี้ได้ ดาวน์โหลดและติดตั้งโปรแกรม R และ RStudio ก่อน

.ugb-760da6f .ugb-cta__item{border-radius:0px !important;background-color:#000000 !important;background-image:url(https://datarockie.com/wp-content/uploads/2021/03/9d702-banner-sql.jpg)}.ugb-760da6f .ugb-cta__item:before{background-color:#000000 !important;opacity:0.3}.ugb-760da6f .ugb-cta__title{color:#ffffff}.ugb-760da6f .ugb-cta__description{color:#ffffff}.ugb-760da6f .ugb-button{background-color:#485eea;border-radius:20px !important}.ugb-760da6f .ugb-button .ugb-button–inner,.ugb-760da6f .ugb-button svg{color:#ffffff}.ugb-760da6f .ugb-button:before{border-radius:20px !important}

Intro to R

คอร์สออนไลน์ฟรี 2 ชั่วโมงสอนพื้นฐานการเขียนภาษา R สำหรับ Data Analyst
สมัครเรียนแล้วมากกว่า 5000 คน

Data Files

tutorial นี้แอดทำความสะอาดข้อมูลและแบ่ง data ให้เรียบร้อยแล้ว ในชีวิตจริงขั้นตอนการ prepare data ใช้เวลาเยอะมาก (tutorial นี้เราจะข้ามไปที่ step 2-3 ของ ML workflow เลย)

ดาวน์ข้อมูล train และ test csv ได้ที่นี่

.ugb-8cdc1ca .ugb-block-content{justify-content:flex-start}.ugb-8cdc1ca .ugb-button1{background-color:#313131;border-radius:1px !important}.ugb-8cdc1ca .ugb-button1 .ugb-button–inner,.ugb-8cdc1ca .ugb-button1 svg{color:#ffffff}.ugb-8cdc1ca .ugb-button1:before{border-radius:1px !important}.ugb-8cdc1ca .ugb-button2{background-color:#313131;border-radius:1px !important}.ugb-8cdc1ca .ugb-button2 .ugb-button–inner,.ugb-8cdc1ca .ugb-button2 svg{color:#ffffff}.ugb-8cdc1ca .ugb-button2:before{border-radius:1px !important}.ugb-8cdc1ca .ugb-inner-block{text-align:left}

เปิดดูข้อมูลด้วยโปรแกรม Excel ตัวแปรที่เราต้องการทำนายคือ Survived (target หรือ label) ส่วนตัวแปร Pclass, Sex, Age, SibSp, Parch คือตัวแปรต้น (ML เรียกว่า features)

อ่านรายละเอียดของตัวแปรแต่ละตัวได้ที่ Kaggle

เราสามารถโหลด 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 ไม่ได้ยากอย่างที่หลายคนคิด 😛

8 thoughts on “สร้าง Decision Tree ทำนายผู้รอดชีวิตบนเรือ Titanic ด้วย R

  1. ถ้าต้องการ(บังคับ)ให้โมเดล เริ่มพิจารณาจาก Age ก่อนที่จะเริ่มพิจารณาจากเพศ ต้องทำอย่างไรครับ

    1. Decision Tree เป็น Greedy Algorithm ครับ ตัวแปรที่เลือกมา split ในแต่ละ node คือตัวแปรที่แบ่งข้อมูลได้ดีที่สุด ณ stage นั้นครับ

      แอดไม่เคยลองบังคับโมเดลแบบนี้เลยครับ ไม่แน่ใจว่าทำได้ป่าว ลองตัดตัวแปร gender ออกก็ได้ครับ หรือไม่ก็ทำสองโมเดล male vs. female

  2. รบกวนสอบถามว่าถ้าเราใช้ hyperparameter tuning แล้ว เรายังจำเป็นต้อง prune decision tree ไหมครับ

    1. pruning มีสองแบบครับ : post vs. pre

      pre หรือ online training คือการที่เรา set threshold (หรือ hyperparameter) ก่อนเทรนโมเดลครับ

      post คือเราสร้าง tree ให้เสร็จก่อน แล้วค่อยพรุนกลับให้ tree เล็กลง

      ถ้า hyperparameter เราจูนมาดีแล้ว ก็ไม่ต้องทำ post pruning ก็ได้ครับ // ปล. แต่ถ้าเราทำ post pruning ก็มีโอกาสเจอ simpler tree ที่มี accuracy พอๆกัน

  3. ขอวิธีหรือแนว deploy model ที่สร้างขึ้นเป็น api หรือ web service ด้วยครับ

  4. ขอสอบถามหน่อยครับ ในเมื่อเรามีจำนวนผู้รอดชีวิตที่เป็น ค่า 0 กับ 1 แล้วเราจะทำนายอะไร
    พอดีว่าผมมีข้อมูลราคาบ้านแบบนี้เหมือนกันแต่อาจารย์ให้ทำนายราคาบ้าน ในเมื่อเรามีราคาบ้านอยู่แล้วจะทำนายอะไรครับ

    1. Machine Learning มีสอง phases ครับ Training กับ Inference

      พอเราเทรนโมเดลเสร็จแล้ว (training) นำโมเดลไปใช้ทำนาย (inference) ข้อมูลใหม่ได้ครับ

      ลองแบ่งข้อมูลเป็นสองส่วนง่ายๆก็ได้ครับ 80-20 แล้วเทรนโมเดลด้วย 80% ทำนาย 20%

      ทำนายราคาบ้าน 20% ที่โมเดลเราไม่เคยเห็นมาก่อนตอนเทรน

  5. ข้อมูลบนเพจนี้บางส่วน 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} “

Leave a Reply