[Data Science Model EP.01] สร้าง Prediction Model ด้วย Linear Regression Part1
ใน Series ที่แล้วนั้นเป็นเรื่องเกี่ยวกับพื้นฐานทางสถิติ และเราก็ได้เกริ่นกันไปแล้วว่าขั้นตอนการสร้างโมเดลในการทำนายผลอนาคต (Prediction Model) เป็นหนึ่งในหน้าที่ที่สำคัญของ Data Scientist ดังนั้นใน Series นี้ก็จะเป็นการนำโมเดลทางคณิตศาสตร์ ผนวกเข้ากับศาสตร์ด้านข้อมูลเพื่อใช้ทำนายข้อมูลที่จะเข้ามาในอนาคต
พื้นฐานก่อนที่จะเริ่มเนื้อหา
สิ่งที่จะต้องเตรียมตัวก่อนอ่านบทความนี้: แนะนำว่าต้องพอเข้าใจพื้นฐานทางสถิติ และซึ่งในเนื้อหาอาจจะมีความรู้คณิตศาสตร์ด้านอื่นบ้างเล็กน้อย (Calculus, Linear Algreba เป็นต้น) แต่จะไม่พยายามอธิบายส่วนนั้นมากนะครับ เพราะถือว่าเรามาเน้นทำความเข้าใจและดูความแตกต่างของแต่ละโมเดลครับ โดยเนื้อหาด้านสถิติพื้นฐานของ Data Science ผมก็ทำเป็น Series เอาไว้แล้ว สามารถกดเข้าไปดูได้ที่ลิงค์ด้านล่างเลยครับ
เนื้อหาของ Series นี้จะแบ่งออกเป็น📚
- Concept — หลักการทำงานของแต่ละโมเดลแบบคร่าวๆ (สำหรับคนที่เน้นทำความเข้าใจอย่างรวดเร็ว)🤓
- Theory — ทฤษฎีและวิธีการทำงานของโมเดลตามหลักการทางคณิตศาสตร์ (สำหรับคนที่ชอบความท้าทาย)😱
และยังมีเนื้อหาย่อยใน Blog ถัดๆไป ซึ่งเป็นการนำโมเดลเหล่านี้ไปใช้กับข้อมูลจริงจากประสบการณ์ส่วนตัวของผมเอง (Technical use-cases) เช่น รายการแข่งต่างๆ หรือเป็นการนำข้อมูลจาก Kaggle มาใช้สร้างโมเดลจากการเขียน Code ใน Python ครับ
โมเดลแรกที่เราจะไปศึกษากันก็คือ โมเดลการถดถอยแบบเส้นตรง (Linear Regression) หลายๆคนอาจจะเคยได้ยินหรือคุ้นชินกับโมเดลนี้มาอย่างดี เนื่องจากเป็นโมเดลที่นิยมใช้ในงานวิจัยและเป็นหนึ่งในเนื้อหาของวิชาสถิติมหาวิทยาลัยด้วย
Linear Regression Concept
หลักการทำงานของโมเดลง่ายๆเลยคือ “การทำนายด้วยการวาดเส้นตรงผ่านจุดต่างๆของข้อมูล”
โดยเส้นตรงที่ใช้ลากนั้นคือ “เส้นที่ทำให้เกิดค่าความผิดพลาดกำลังสองน้อยที่สุด (least square error)” ซึ่งวัดจากผลรวมของระยะห่างระหว่างเส้นตรงที่เราลากกับจุดข้อมูลดังรูปด้านล่างนั่นเอง
Linear Regression Theory
ส่วนของทฤษฎีการทำงานของโมเดล เราก็คงคุ้นๆกับสมการเส้นตรงอย่างง่าย (Simple Linear Equation) ในช่วงมัธยมปลายนั่นคือ
โดยที่
- a ก็คือค่าความชันของเส้นตรง (slope)
- b ก็คือค่าที่เส้นตัดกันกับแกน Y (intercept)
ตัวอย่างที่จะใช้มาจากบทความเรื่องพื้นฐาน Machine Learning ที่เราเคยยกตัวอย่างการใช้เครื่องจักรในการทำนายผลตัวเลขนั่นเอง
โดยโจทย์ที่เราตั้งไว้ก็คือชุดตัวเลขที่ผลลัพธ์ (Y) ของตัวเลขจะเพิ่ม/ลดเรื่อยๆ ถ้าหากเราเพิ่มค่าของตัวเลข (X) ดังภาพด้านล่าง
แต่ถ้าหากสังเกตดีๆก็จะพบว่าจริงๆแล้วมันก็คือการนำตัวเลข X มาบวกกับตัวมันเอง (คูณสอง) แล้วลบด้วย 1 ซึ่งเราสามารถนำมาสร้างเป็นสมการเส้นตรงได้ โดยรูปสมการเท่ากับ
เช่น
ถ้า X มีค่าเท่ากับ 4
Y ก็จะมีค่าเท่ากับ 2(4)-1 = 7
เมื่อนำจุดข้อมูล (Data Point) เหล่านี้มาสร้างเป็นกราฟ ก็จะเห็นว่าเราสามารถสร้างเส้นตรงหรือสมการ Linear Regression ที่ทับทุกจุดบนเส้นได้เลย นั้นหมายความว่าถ้าหากให้ Linear Regression ทำนายว่าในอนาคตถ้าหาก X=5 แล้ว Y=2(5)-1=9 ซึ่งก็เป็นคำตอบที่ถูกต้อง
แต่ว่าในโลกแห่งความเป็นจริงนั้น ชุดข้อมูลที่เราได้มาอาจจะไม่ได้มีลักษณะเป็นเส้นตรงเป๊ะ 100% ตลอดเวลา ดังนั้น Linear Regression จะพยายามสร้างเส้นตรงที่มีความแม่นยำที่สุด (Fitting)
tip✔️: วิธีการสั่งเกตว่า Simple Linear Regression ของเรานั้นเป็นเส้นตรงเป๊ะขนาดไหน สามารถสังเกตได้จากค่า Correlation เนื่องจากเป็นค่าที่ใช้บอก “ความสัมพันธ์ของสองตัวแปรแบบเส้นตรง” ถ้าหากมีค่าเท่ากับ 1 หรือ -1 ก็หมายความว่าเราสามารถวาดเส้นตรงผ่านทุกจุดบนเส้นได้พอดี
โดยวิธีการ Fitting ของ Linear Regression นั้นมี 2 วิธี
- Minimizing Loss
- Maximizing Likelihood
โดยวิธีการที่จะใช้ในรอบนี้ก็คือ Minimizing Loss ซึ่งเป็นวิธีที่อธิบายได้ง่ายที่สุดเพื่อความรวดเร็วในการเข้าใจนะครับ แต่ถ้าหากสนใจวิธีการ Maximizing Likelihood ก็สามารถกดเข้าไปดูวิธีการคำนวณได้เลยครับ
ตัวอย่างเช่น ประเด็นเรื่องของราคาบ้าน (Housing Price) สมมติว่าเราเก็บข้อมูลของราคาบ้าน (Y) และขนาดของบ้าน (X) มาทั้งหมด 10 หลัง และได้จุดข้อมูลออกมาดังนี้
จะเห็นว่าเป็นไปไม่ได้เลยที่เส้นตรงของเราจะลากไปโดนทุกจุดข้อมูล ดังนั้นเส้นตรงที่มีให้มานั้น (อย่างที่เห็นก็คือเส้น Y=35.828X-25393) คือเส้นที่มีความแม่นยำสูงสุดซึ่งวัดด้วยวิธีกำลังสองน้อยที่สุด (Least Square Estimation: LSE)
และถ้าเรานำขนาดบ้าน (X) ไปแทนในสมการ 35.828X-25393 เราจะได้ราคาบ้านคาดการณ์ที่มาจากโมเดล Linear Regression (Y_hat) ของเรานั่นเอง
จะเห็นว่ามันก็ไม่ได้แม่นขนาดนั้นเมื่อเทียบกับราคาบ้านจริง สาเหตุมาจากปริมาณข้อมูลที่มีน้อยและ Linear Regression ก็ไม่ได้เป็นโมเดลที่ดีที่สุดในการทำนายสถานการณ์จริงที่ทุกอย่างไม่ได้เป็นเส้นตรง🤗
ถึงแม้ว่าค่า LSE จะดูเยอะมาก แต่มันคือค่าที่ต่ำที่สุดที่ได้จากการวาดเส้นตรงผ่านข้อมูลแล้ว (ถ้าไม่เชื่อก็สามารถลองเอาสมการอื่นไปแทนตัวเลขก็ได้นะ 135 ล้านคือน้อยที่สุดแล้วจริงๆ!!!😣)
และประเด็นสุดท้ายที่ไม่พูดถึงไม่ได้เลยคือ แล้วค่า a (slope), b (intercept) มันหามาได้ยังไงหล่ะ? เราสามารถคำนวณค่าเหล่านี้ออกมาเองได้หรือไม่? 🤔
คำตอบก็คือได้ครับ เราสามารถประมาณค่าของ slope และ intercept ได้โดย
- ค่าความชันของเส้นตรง (slope) มีค่าประมาณจากสูตร
- ค่าที่เส้นตัดกันกับแกน Y (intercept) มีค่าประมาณจากสูตร
tip✔️:
1. เวลาเราอ่านหนังสือหลายครั้งมักจะแทน slope และ intercept ด้วยหลายสัญลักษณ์ เช่น เบ-ต้า (β), เท-ต้า (θ) เป็นต้น เพราะฉนั้นอย่าสับสนและผมอาจจะแทนด้วยสัญลักษณ์ที่แตกต่างกันไปบ้างในแต่ละ Part นะครับ
2. ค่าประมาณเราจะแทนด้วยการใส่ hat (^) บนสัญลักษณ์เสมอ เนื่องจากมันเป็นค่าที่ได้จากการทำนาย ไม่ใช่ค่าที่แท้จริง (หลายครั้งเราไม่สามารถทำนายผลให้ถูกต้องได้ 100% ดังนั้นค่าที่คำนวณออกมาต้องแทนเป็นค่าประมาณทุกครั้งนะครับ😁)
เราลองมาหาค่า slope ด้วยตัวเองกันว่ามีค่าเท่ากันกับเส้นตรงที่โปรแกรมวาดมาให้ (35.828) รึเปล่า?
สรุปว่าค่า slope ที่ได้ (a_hat) ก็มีค่าเท่ากันกับที่โปรแกรมคำนวณมาให้ครับ🤗
Multiple Regression
กรณีราคาบ้านที่ยกตัวอย่างไปข้างต้น ในความเป็นจริงแล้วเราไม่ได้ตัดสินใจว่าราคาบ้านควรจะเป็นเท่าไหร่ “จากปัจจัยขนาดของบ้านเท่านั้น” แต่เราอาจจะมีปัจจัยอื่นๆมาใช้ในการตัดสินใจด้วย เช่น จำนวนห้อง, ปริมาณที่จอดรถ, เฟอร์นิเจอร์ภายในบ้าน เป็นต้น
หมายความว่าตัวแปรต้น (X) ที่ใช้จะมีมากกว่า 1 ตัว และสมการ Linear Regression ก็จะมีหลายตัวแปรซึ่งเรียกว่า Multiple Regression นั่นเอง
ซึ่งวิธีการคำนวณ Multiple Linear Regression นั้นจะต้องอาศัย Linear Algebra เนื่องจากเป็นการหาเส้นตรงที่มี space มากกว่า 2 มิติ ดังนั้นผมจะยังไม่ลงรายละเอียดไปมากกว่านี้จนกว่าจะเข้าใจ Linear Algebra ก่อนนะครับ แต่ถ้าหากต้องการที่จะศึกษา Linear Algebra ก็สามารถลองเข้าไปดูที่ลิงค์ด้านล่างได้เลยครับ
3Blue1Brown | Essence of linear algebra — Link
แต่ว่าเราสามารถใช้โปรแกรมเพื่อสร้าง Multiple Linear Regression ได้ เพราะมันก็คือ Linear Regression ที่มีหลายตัวแปรนั่นเอง ซึ่งเราจะมาทำให้ดูใน Part ย่อยของตอนนี้ครับ😃
ถ้าชอบหรือต้องการสอบถามหรือพูดคุยเพิ่มเติม กดไปที่เพจ ดาต้าไส้แห้ง หรือ LinkedIn ข้างล่างเลยจ้า แล้วเรื่องถัดไปจะเป็นเรื่องอะไรก็ขอให้กดติดตามกันไว้ด้วยนะคร้าบ😍