ตอนก่อนหน้า: บันทึก training data science EP 4: Scikit-learn & Linear Regression – แนวโน้มของเส้นตรง

ต่อจาก EP 4 นะฮะ เราได้ลอง Linear regression ทั้งสามแบบไปแล้ว จะบอกว่า regression เนี่ยจัดเป็น Continuous Supervised Learning เอ๊ะ มันคืออะไรน่ะ

คือ หลักๆ แล้ว algorithm ของ Machine Learning (ML) แบ่งได้เป็นสี่กลุ่มย่อยดังนี้ฮะ

Machine Learning Algorithm ทั้ง 4 ประเภท

Supervised Learning คือ การทำ Machine Learning ด้วยข้อมูลที่มีผลลัพท์ (Labeled output) อยู่ก่อนแล้ว คือ ใช้ผลลัพท์นั้นสอนให้ระบบเข้าใจ ตัวอย่างเช่น “มีข้อมูลอายุกับรายได้ ให้หารายได้เมื่อมีอายุเท่านี้” เรามีผลลัพท์คือรายได้ เราสอนระบบให้รู้จัก มันก็จะสามารถทำนายรายได้จากอายุโดยอ้างอิงข้อมูลตั้งต้นได้ฮะ

ในขณะที่ Unsupervised Learning จะทำบนข้อมูลที่ไม่มีผลลัพท์อยู่ก่อนแล้ว (Unlabeled output) เราไม่มีอะไรมาเป็นผลลัพท์ตั้งต้นเพื่อสอนระบบ จึงต้องใช้วิธีการอื่นแทนฮะ ซึ่งจะค่อยเล่าใน EP ต่อๆ ไปนะฮะ

ส่วน Continuous คือ การให้ผลลัพท์เป็นข้อมูลเชิงปริมาณ และ Discrete คือ ข้อมูลเชิงคุณภาพฮะ

Reference link: https://towardsdatascience.com/supervised-vs-unsupervised-learning-14f68e32ea8d

จากรูปข้างบน ก็เป็นชื่อเรียกของ ML algorithm แต่ละกลุ่ม นั่นก็คือ

  • Classification
    เป็น Discrete Supervised Learning อธิบายได้ว่า ถ้าเรามีข้อมูลตั้งต้นที่แยกเป็นกลุ่มๆ ได้ เราสามารถทำนายได้ว่า ถ้าข้อมูลทดสอบมารูปแบบนี้ จะได้ผลลัพท์อยู่ในกลุ่มไหน เช่น มีข้อมูลอายุ อาชีพ เพศ และความสนใจ เราจะทำนายว่าคนแบบนี้น่าจะสนใจเรื่องอะไรจากสามด้านแรก เราใช้ classification นี้ได้ฮะ
  • Regression
    เป็น Continuous Supervised Learning คือ การทำนายค่า ณ​ จุดหนึ่ง ซึ่งมันมีค่าเป็นอะไรก็ได้ เช่น ทำนายรายได้ จาก Pclass และอายุอย่างในตอนที่แล้วน่ะฮะ
  • Clustering
    เป็น Discrete Unsupervised Learning คือ การจัดกลุ่มข้อมูลเข้าด้วยกัน ด้วยโจทย์คือ เราต้องการจัดกลุ่มข้อมูลเข้าด้วยกัน เช่น มีข้อมูล อายุ อาชีพ เพศ เราจะจัดกลุ่มตามความชอบของลูกค้า ซึ่งมีทั้งหมด 8 แบบเป็นต้น เพื่อประโยชน์ด้านการนำเสนอสินค้า หรืออะไรว่าไปน่ะฮะ
  • Dimensionality reduction
    เป็น Continuous Unsupervised Learning เป็นเรื่องของการปรับแต่งข้อมูล หาด้านที่สำคัญจากข้อมูลที่มันมีหลายๆ ด้าน เพื่อให้สามารถประมวลผลขั้นต่อไปได้ เช่น เรามีข้อมูลลูกค้า เป็นประวัติส่วนตัวบ้าง การซื้อสินค้าบ้าง การสนทนาบ้าง เราจะต้องหาว่าอะไรบ้างที่สำคัญ เช่น อายุสำคัญ แต่ชื่อไม่สำคัญ ส่วนสูงสำคัญ แต่น้ำหนักไม่สำคัญ เป็นต้นฮะ

เอาล่ะ EP นี้ จะนำเสนอ Regression อีกตัวนึง นั่นคือ…

Logistic Regression

Logistic Regression คืออะไร มันคือ การคาดการณ์โอกาสของผลลัพท์ที่เป็นไปได้ ถึงจะมีชื่อเป็น Regression ก็จริงนะฮะ เพราะค่าของ “โอกาส” สามารถเป็นอะไรก็ได้ ระหว่าง 0 ถึง 1 แต่เนื้อในของมันเป็น classifier algorithm ฮะ เพราะผลลัพท์ที่ออกมาคือ สักค่าหนึ่งใน​ “กลุ่ม” ของผลลัพท์ฮะ

เรามาลองเล่นกันเลยฮะ

เริ่มจากใช้ข้อมูลเดิม Titanic เลือกมา 5 column คือ Pclass, is_male ที่แปลงค่ามาจาก Sex, Age, SibSp และ Fare ให้ทั้งหมดนี้เป็นตัวแปร x

ต่อมา เราให้ตัวแปร y เป็นค่า Survived เราจะมาทำนายกันว่าใครมีโอกาสรอดชีวิตบ้าง

ใช้ module sklearn.linear_model.LogisticRegression() และทำ train_test_split()

ที่ระบุ solver='lbfgs' เนื่องจากไม่ต้องการ warning ฮะ

จากนั้นก็ fit() แล้วดูค่า coef_ กัน พบว่า column ที่สอง ก็คือ is_male มีผลกับค่า Survived มากที่สุดแต่เป็นแบบด้านตรงกันข้ามฮะ (ติดลบไปตั้ง 2.4 แน่ะ)

เราลองสมมติคนมาคนนึง ให้ Pclass = 3 เป็นผู้ชาย อายุสัก 30 ไม่มี SibSp และมี Fare เป็น 25

ปรากฎว่า Logistic Regression ทำนายว่าไม่รอดฮะ (Survived เป็น 0) ยืนไว้อาลัยให้คนนี้สามนาทีฮะ

เมื่อเราใช้คำสั่ง .predict_proba() ก็พบว่าโอกาสรอดของเค้าคนนี้มีแค่ 10% เอง

ลองมาดูความแม่นยำของ Model ตัวนี้กันฮะ ผมสร้าง DataFrame ที่รวมค่า Survived จริง และค่าทำนาย จากนั้นคำนวณความถูกต้องไว้ที่ column "is_correct"

ค่าเฉลี่ยความถูกต้องอยู่ที่ 83% สูงอยู่นะฮะ

Dummy Classifier

คราวนี้ มารู้จักกับ Dummy Classifier เป็นอีกตัวที่ใช้สำหรับ classification แต่ใช้การคำนวณแบบง่ายๆ ซึ่งกำหนดด้วย parameter strategy ฮะ ที่ผมใช้คือ “most_frequent” คือ คาดการณ์ผลลัพท์จากข้อมูลตั้งต้นส่วนใหญ่ฮะ

แล้วเราใช้ทำไม เราใช้ dummy classifier เพื่อเป็น baseline สำหรับ classification model ฮะ ถ้าเราได้ผลลัพท์จาก classifier ตัวอื่นแย่กว่า baseline เราก็ต้องกลับมาหาสาเหตุหรือเปลี่ยนวิธีแล้วละฮะ เพราะนั่นแปลว่า model ของเราไม่ค่อยถูกต้อง

สุดท้าย เราพบว่าค่าเฉลี่ยความถูกต้องของ dummy classifier อยู่ที่ 52.7% แปลว่า model ข้างต้นของเราถือว่าโอเคเลยฮะ

Reference link: https://scikit-learn.org/stable/modules/generated/sklearn.dummy.DummyClassifier.html


classifier ช่วยเหลืองานเราในด้านการจัดกลุ่มนะฮะ และคิดว่า บล็อกนี้น่าจะช่วยให้เห็นภาพรวมของ ML ได้ชัดขึ้นอีกนิดนึงเนอะฮะ

เรื่องหน้าจะเป็นอะไร จะมาเล่าอีกทีนะฮะ

บาย

ตอนต่อไป: บันทึก training data science EP 6: Decision Tree – ทางแยกมันแยกยาก