DataRockie

สร้าง 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 responses to “สร้าง Decision Tree ทำนายผู้รอดชีวิตบนเรือ Titanic ด้วย R”

  1. Krishdakorn Hinanchai Avatar
    Krishdakorn Hinanchai

    ถ้าต้องการ(บังคับ)ให้โมเดล เริ่มพิจารณาจาก 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. อาวองไว วงกะโปะ Avatar
    อาวองไว วงกะโปะ

    ขอวิธีหรือแนว 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