BOTNOI classroom - Titanic dataset (pipeline)

Dr. Winn Voravuthikunchai
botnoi-classroom
Published in
3 min readOct 12, 2019

จากตอนที่แล้ว พูดถึง pipeline คร่าว ๆ ตั้งแต่การได้รับโจทย์ data science มา จนถึงการได้ผลลัพธ์ เพื่อทบทวนอีกครั้งเพราะสำคัญจริง ๆ ที่ทุกคนจะต้องท่องให้ขึ้นใจถึง pipeline

a. ข้อมูล train ก็เหมือนกับว่าโจทย์แบบฝึกหัดที่ครูเอามาให้นักเรียนทำก่อนสอบ ก็จะมีเฉลยให้เราดู ทำให้เราได้เรียนรู้ได้เข้าใจ

b. ข้อมูล test ก็เหมือนกับข้อสอบจริง ก็เราก็ไม่มีเฉลย แต่ว่าครูจะมาตรวจแล้วให้เกรดเรา

c. feature extraction ก็อาจจะมองว่าเป็นเทคนิคหรือวิธีที่เราใช้สกัดความรู้ออกมาจากข้อมูล เหมือนบางทีเพื่อให้เราจำง่าย ๆ บางทีก็จำเนื้อหาเป็นเพลง หรือว่าจำเป็นรูปภาพไป

d. model ก็เหมือนสมองเรา เป็นคนคิดเยอะ ก็ใช้ model หนักหน่อย พวก deep learning เปลืองพลังงาน คิดน้อยก็ใช้ model ง่าย ๆ พวก linear model ทีนี้บางเรื่องเราก็ไม่ต้องคิดเยอะกันได้ เปลืองพลังงานเปล่า ๆ ในเมื่อโจทย์ง่าย ๆ ไม่ซับซ้อน จะไปใช้สมองระดับไอน์ไสตน์ทำไม จริงมั้ยครับ

e. evaluation ก็คือที่ครูใช้วัดเกรดเรานี่แหล่ะ จะได้รู้ว่าเราเก่งแค่ไหน ถ้าเราไม่เก่ง ก็ต้องหา เทคนิคเพิ่ม อ่านหนังสือเพิ่ม get data เพิ่ม feature extract เพิ่ม หาเทคนิคสกัดความรู้เพิ่ม แล้วก็ใช้ more complex model เป็นต้น

วันนี้จะเอา case ที่ได้จากการทำ workshop กับ BOTNOI classroom เมื่อสัปดาห์ที่ผ่านมา มาเล่าให้ฟัง

ก่อนอื่นต้องขอเล่าว่า รูปแบบการเรียนการสอนในแต่ละ class ก็คือจะเป็น lecture 1 ชั่วโมง workshop 2 ชั่วโมง ในส่วนของ workshop จะแบ่งเป็น 3 ทีม ทีมละ 4 ถึง 5 คน ประกบด้วย data scientist ของ Botnoi ทีมละคน มาทำโจทย์แล้วก็มาสรุปผลกันท้ายคลาส ก็พบว่าเป็นวิธีการที่ดี เพราะถ้าบรรยาย 3 ชั่วโมง โดยไม่ได้ hands-on จริงก็น่าเบื่อ ในขณะที่การประกบทีมเล็ก ๆ จะเกิดการช่วยกันคิดในทีม และเกิดการแข่งขันระหว่างทีม ทำให้รู้สึกว่าทุกคนกระตือรือร้นเป็นพิเศษ เวลาผ่านไปเร็วมากครับ บางวันไม่ยอมหยุดกันเลยทีเดียว ผมต้องบอกพอก่อนครับ ต้องกลับบ้านกันแล้ว ก็สนุกสนานดีครับ 4 วัน 4 คลาสที่ผ่านมา ในแต่ละคลาสก็จะเอา dataset ที่ต่าง ๆ กัน ทำให้ได้เจอความหลากหลาย เพียงแค่อาทิตย์เดียวเราก็ได้ทำ

  1. โมเดลทำนายเพศ​ Gender prediction
  2. โมเดลทำนายว่าใครรอดจากเรือไททานิค Survival prediction
  3. โมเดลทำนายว่าเห็ดชนิดไหนกินได้ Mushroom edible prediction
  4. และล่าสุดโมเดลทำนายว่าใครจะย้ายค่าย Telco churn prediction

ผมคิดว่านี่น่าจะเป็นวิธีที่สามารถปั้น data scientist ที่เร็วที่สุด เรียน 6 เดือน ก็จะได้รู้จัก 64 โมเดล ในหลาย ๆ สาขา จึงน่าจะมีประสบการณ์ที่จะทำงานจริง สมัครงานเป็น data scientist ได้

วันนี้จะมาเล่าที่เราทำ dataset Titanic กันครับ https://www.kaggle.com/c/titanic โจทย์คลาสสิคที่ผู้เริ่มต้น data science ก็จะหัดทำกัน ดาวน์โหลด dataset กับ code ใด้ใน คลิก -> Google Drive ของ Botnoi

ผมเองก็ไม่เคยลองทำ Titanic มาก่อน อ่านคู่มือก็บอกว่า ให้ทำนายว่าใครบ้างที่รอดชีวิตจากการจมของเรือ ก็เปิดไฟล์ข้อมูลที่เป็น .csv

จะเจอ column B ที่ชื่อว่า Survived นี่ก็คือ column ที่เราต้องการ predict ส่วน column อื่น ๆ จากชื่อ column ดูจะตรงไปตรงมา ก็จะมีแต่พวกรหัสต่าง ๆ ในแต่ละ column เช่น Cabin C104 ในบันทัดที่ 4 แปลว่าอะไร น่าจะเป็นห้องพักบนเรือ แต่ว่ารหัส C รหัส D จะบอกถึงตำแหน่งของห้องพักว่าอยู่ท้ายเรือ หรือหัวเรือ หรือเปล่า หรือว่าบอกถึงความหรูหราของห้อง เหมือนรถไงเบนซ์ C-class แล้วตัวเลข 104 หมายถึงอยู่ชั้นที่ 1 หรือเปล่า แล้วข้อมูลที่หายไป นั่นหมายถึงไม่มีข้อมูล missing value คือข้อมูลสูญหาย เอกสารจมทะเล หรือจะหมายความว่า ตัวฟรี ไม่มีห้องพัก Jack นั่งข้างนอก ไฮโซ Rose มีห้องนอน ทั้งหมดคือ verb to เดา เราต้องเป็นคนขี้สงสัย แล้วก็ใช้จินตนาการสักหน่อย เดี๋ยวตอนหน้าเรื่อง feature extraction จะเห็นว่าลองโน่นลองนี่เยอะเลย อย่างไรก็ตามเวลาไปทำงานให้บริษัท ถ้าเราไม่เข้าใจตรงไหน เราควรจะถามเค้าครับ ถามเกี่ยวกับข้อมูลจากคนที่ให้ข้อมูล หรือว่าคนที่รู้ domain expert ให้ได้มากที่สุด จะช่วยเราไม่ให้ต้องเสียเวลาคลำนาน แต่นี่ทำเล่น ๆ ไม่เป็นไร ลุยกันเลย

กับทุก ๆ โมเดลที่ทำ แนวทางของผมคือชอบ get pipeline done ก่อน คือไม่คิดมาก ลุยก่อนเลย ภายใน 5 -10 นาที ให้ได้ ผลลัพธ์ ที่ใช้เป็น baseline ตั้งต้นให้ได้ แล้วค่อยเพิ่ม ค่อยปรับ ในส่วนต่าง ๆ ข้อแรกคือจะได้รู้คร่าว ๆ ว่า จะต้อง put effort มากแค่ไหน อย่าง mushroom classification เราได้กัน 100% เต็ม ในครั้งเลย ไม่ต้องทำอะไรต่อ ไม่ต้องมาเสียเวลาคิดมากไปก่อน ข้อสองคือผมชอบเห็นการพัฒนาของ model เริ่มจากแม่นน้อยสุด พอปรับนี่ คิดนั่นแล้วทำให้โมเดลดีขึ้น เราก็ดีใจ ทั้งนี้ทั้งนั้น นี่เป็นไสตล์ส่วนตัว หลาย ๆ คนก็จะเริ่มจากการพลอต หรือหา stat ของตัวแปรแต่ละตัว

มาเข้าสู่ pipeline กันดีกว่า

  1. สร้างฟังก์ชั่นอ่านข้อมูล ในที่นี้ข้อมูลมาเป็น .csv เราก็จะใช้ libary Pandas ในการอ่านข้อมูล

2. สร้างฟังก์ชั่นแยก label ออกมา หรือ column B นั่นเอง

3. Feature extraction เราก็จะต้องสกัด คุณลักษณะ หรือ feature ออกมาจาก ข้อมูลเพื่อ train model อย่างที่บอกไป เราจะป้อนได้แต่ตัวเลข เพราะฉะนั้นผมก็เลือกเอาแต่ตัวเลข โดยใช้ function _get_numeric_ แต่แค่นั้นไม่พอครับ พอดีว่ามันมี missing value ข้อมูลบางอันหายไป เพราะฉะนั้นเราก็จะใช้ function fillna เพื่อเติมข้อมูลที่หายไป ในส่วนนี้เค้าเรียกว่า data cleaning บางทีเค้าก็จะตัดข้อมูลทิ้งไป หมายถึงทิ้ง datapoint หรือว่าบันทัดออกไปเลย บางครั้งก็อาจจะแทนด้วยค่าเฉลี่ย ถ้าจะล้ำสุด ๆ ก็อาจจะสร้างอีก model เพื่อทำนายว่าในช่องที่หายไป ควรจะแทนด้วยค่าอะไรดี แต่ว่าสำหรับการทำ pipeline เร็ว ๆ ผมก็แทนด้วย 0 ไปเลย

4. จากนั้นเราก็จะสร้างฟังก์ชั่นเรียก classification model ซึ่งมีหลายตัวให้เลือก ถ้าเป็น dataset น้อย ๆ แบบนี้ แล้วก็ข้อมูลในแต่ละ column มันมีความหลากหลาย อยู่กันคนละ range จากประสบการณ์ก็พบว่า พวก tree นี่ค่อนข้างจะดี ไม่ต้องปรับอะไรมาก ในทีนี้ผมเลือก gradient boosting tree ฟังก์ชั่น fit คือ train โมเดลนั่นเอง ฟังก์ชั่นนี้ก็จะรับ feature กับ label

5. จากนั้นก็สร้างฟังก์ชั่นวัดผล แบบง่าย ๆ ก็คือวัดความถูกต้อง ถ้า model เราทำนายว่าผู้โดยสารคนนี้รอด แต่จริง ๆ แล้วไม่รอด ก็คือโมเดลทำนายผิด แต่ถ้า model เราทำนายว่ารอด แล้วรอดจริง ก็แสดงว่า model เราทำนายถูก เพราะงั้นจะมีถูก 2 สองกรณี (รอด,รอด) (ไม่รอด, ไม่รอด) แล้วก็ผิดสองกรณี (ไม่รอด,รอด) (รอด, ไม่รอด) ตัวเลขหน้าคือที่โมเดลทำนาย ตัวเลขหลังคือของจริง เราก็จะป้อนเป็น array สอง array เข้าไป เทียบกันทุกตัว ถ้าเท่ากันก็จะเป็น 1 ไม่เท่าก็เป็น 0

บวกกันก็จะได้ที่จำนวนคู่ที่ทำนายถูกทั้งหมด หารด้วยจำนวนคู่ทั้งหมด ออกมาเป็นค่าความถูกต้องหรือ accuracy นั่นเอง

6. ทีนี้ก็เอามาทุกอย่างมาประกอบกัน โดยเราจะอ่านดาด้า แล้ว feature extract ทั้งในส่วนของข้อมูลที่ใช้ train model กับในส่วนของข้อมูลที่ใช้ test model จากนั้นก็ train model โดยใช้ label ของ trainset กับ feature ของ trainset เป็นอินพุต พอเทรนเสร็จแล้ว ได้ model แล้ว ก็จะเอา feature ของ testset ป้อนเข้าไป model ก็จะทำนายออกมาให้ว่ารอดหรือไม่รอด แล้วเราก็เอาที่ model ทำนาย กับ label ของตัว testset เข้าไปเพื่อดูความแม่นยำ

ก็ปรากฎว่า รันครั้งแรกเร็ว ๆ ได้ accuracy ที่ 69% ครับ pipeline ด่วน ๆ ภายใน 10 นาที เขียน blog นานกว่ามากกก เดี๋ยวไว้จะมาเล่าต่อตอนหน้านะครับ ว่าหลังจากได้ pipeline เราจะทำอะไรต่อ เพื่อทำให้ความแม่นยำเพิ่มขึ้น คะแนนสุดท้ายที่ได้หลังจากจบคลาสจะอยู่ที่ประมาณ 85% ครับ เดี๋ยวจะเล่าให้ฟังในตอนหน้า หรือถ้าใครจะแอบไปดูใน code ก่อนก็ได้นะครับ :)

เดี๋ยวเจอกันตอนต่อไป BOTNOI classroom - Titanic dataset (feature extraction)

สุดท้ายฝากประชาสัมพันธ์หน่อยครับ

สนใจเรียน data science -> Botnoi Classroom

สนใจใช้บริการในสร้างแชทบอท หรือให้คำปรึกษาเกี่ยวกับ AI & data science ติดต่อได้ผ่านเวป -> Botnoi และ FB Page Botnoi Consulting นะครับ

--

--

Dr. Winn Voravuthikunchai
botnoi-classroom

obtained his PhD in AI from Caen University, France. He was Chief Data Scientist at Telenor. Currently, he is Founder & CEO of Botnoi Group, and LINE API Expert