ยินดีต้อนรับสู่บทเรียนเรื่องการประเมินโมเดลและการตรวจสอบแบบไขว้ (Cross-Validation)!
สวัสดีครับ! ยินดีต้อนรับสู่บทเรียนที่เน้นการนำไปใช้งานจริงที่สุดบทหนึ่งในหลักสูตร CS2 Machine Learning ที่ผ่านมาเราอาจจะเรียนรู้วิธีการสร้างโมเดลกันมาแล้ว แต่เราจะทราบได้อย่างไรว่าโมเดลนั้น ดี จริงๆ? หากเราทดสอบโมเดลด้วยข้อมูลชุดเดียวกับที่ใช้สอน (Train) โมเดลอาจจะดูเก่งกาจราวกับซูเปอร์สตาร์ แต่พอนำไปใช้จริงกับข้อมูลการเคลมประกันภัยกลับล้มเหลวไม่เป็นท่า
ในบทนี้ เราจะมาเรียนรู้ศิลปะของการ "ทดสอบความแกร่ง" (Stress-testing) ของโมเดลด้วยเทคนิคที่เรียกว่า Cross-validation นอกจากนี้ เราจะมาดูวิธีปรับ "ค่าตั้งต้นลับ" ของโมเดลที่เรียกว่า Hyper-parameters กันด้วย เอาล่ะ มาเริ่มกันเลย!
1. พารามิเตอร์ (Parameters) vs. ไฮเปอร์พารามิเตอร์ (Hyper-parameters)
ก่อนจะไปประเมินผลโมเดล เราต้องเข้าใจก่อนว่าสิ่งที่เรากำลังปรับแต่งนั้นคืออะไร ใน Machine Learning เรามี "ปุ่มปรับ" สองประเภทที่ต้องทำความรู้จัก:
พารามิเตอร์ (Parameters)
คือค่าภายในที่โมเดลเรียนรู้ได้ โดยอัตโนมัติ จากข้อมูล ยกตัวอย่างเช่น ในสมการการถดถอยเชิงเส้น \( y = \beta_0 + \beta_1 x \) ตัวสัมประสิทธิ์ \( \beta_0 \) และ \( \beta_1 \) คือ พารามิเตอร์ ซึ่งคุณไม่ได้เป็นคนเลือก แต่ข้อมูลเป็นตัวกำหนดให้
ไฮเปอร์พารามิเตอร์ (Hyper-parameters)
คือการตั้งค่าที่ คุณ (ในฐานะนักคณิตศาสตร์ประกันภัย) ต้องเป็นผู้เลือก ก่อน กระบวนการเรียนรู้จะเริ่มต้นขึ้น ซึ่งค่าเหล่านี้จะควบคุมวิธีการเรียนรู้ของโมเดล
การเปรียบเทียบ: ลองจินตนาการว่าคุณกำลังฝึกซ้อมเพื่อวิ่งมาราธอน อัตราการเต้นของหัวใจ และ ความแข็งแรงของกล้ามเนื้อ ระหว่างวิ่งคือ พารามิเตอร์ (เพราะมันปรับตัวตามการฝึกซ้อม) ส่วน ระยะเวลาในแผนการฝึก หรือ ยี่ห้อรองเท้า ที่คุณเลือกใช้คือ ไฮเปอร์พารามิเตอร์ (คุณตัดสินใจเลือกสิ่งเหล่านี้ไว้ล่วงหน้าเพื่อให้ได้ผลลัพธ์ที่ดีที่สุด)
สรุปสั้นๆ:
- พารามิเตอร์: โมเดลเรียนรู้จากข้อมูล (เช่น ค่าน้ำหนักหรือ Weights ในโครงข่ายประสาทเทียม)
- ไฮเปอร์พารามิเตอร์: นักคณิตศาสตร์ประกันภัยเป็นคนตั้งค่า (เช่น ค่า \( k \) ใน K-nearest neighbors หรือความลึกของ Decision tree)
2. กฎทอง: การแบ่งข้อมูลเป็น Training, Validation และ Testing
เพื่อตรวจสอบว่าโมเดลของเราทำงานได้ดีกับ ข้อมูลที่ไม่เคยเห็นมาก่อน (Unseen data) หรือไม่ เราไม่ควรใช้ข้อมูลทั้งหมดในการ Train แต่เราจะแบ่งชุดข้อมูลออกเป็น 3 ส่วน:
- Training Set: ข้อมูลที่โมเดลใช้ "ศึกษา" เพื่อเรียนรู้รูปแบบ
- Validation Set: ใช้สำหรับ "ปรับแต่ง" โมเดล เราจะลองเปลี่ยน ไฮเปอร์พารามิเตอร์ ต่างๆ แล้วดูว่าค่าไหนให้ผลลัพธ์ดีที่สุดบนชุดข้อมูลนี้
- Test Set: เปรียบเสมือน "ข้อสอบปลายภาค" เราจะใช้ชุดนี้เพียง ครั้งเดียว ในตอนท้ายสุด เพื่อดูประสิทธิภาพสุดท้ายของโมเดลกับข้อมูลที่ใหม่สดจริงๆ
ข้อผิดพลาดที่ควรหลีกเลี่ยง: ห้ามนำ Test Set มาใช้ในการตัดสินใจเลือกไฮเปอร์พารามิเตอร์เด็ดขาด! หากทำเช่นนั้น จะถือว่าข้อมูลมีการ "รั่วไหล" (Leakage) และผลลัพธ์ที่ได้จะดูดีเกินจริง
สิ่งที่ต้องจำให้ขึ้นใจ:
Training มีไว้เพื่อเรียนรู้, Validation มีไว้เพื่อเลือกค่าที่ดีที่สุด, และ Testing มีไว้เพื่อตรวจเช็กประสิทธิภาพขั้นสุดท้าย
3. Cross-validation คืออะไร?
หากเรามีชุดข้อมูลขนาดเล็ก การแบ่งข้อมูลเป็น 3 ส่วนอาจทำให้เหลือข้อมูลน้อยเกินกว่าที่โมเดลจะเรียนรู้ได้ Cross-validation จึงเป็นวิธีอันชาญฉลาดในการใช้ข้อมูลที่มีอยู่อย่างคุ้มค่าที่สุด
K-fold Cross-validation
เป็นเทคนิคที่นิยมใช้มากที่สุด โดยมีขั้นตอนดังนี้:
1. แบ่งข้อมูลออกเป็น \( k \) ส่วนที่มีขนาดเท่าๆ กัน (เรียกว่า "folds")
2. เลือก fold หนึ่งเป็น Validation Set และใช้ \( k-1 \) folds ที่เหลือเป็น Training Set
3. Train โมเดลและคำนวณค่าความคลาดเคลื่อน (เช่น Mean Squared Error) บน fold ที่เลือกไว้เป็น Validation
4. ทำซ้ำ \( k \) รอบ โดยเปลี่ยน fold ที่ใช้เป็น Validation ไปเรื่อยๆ ในแต่ละรอบ
5. คำนวณค่าเฉลี่ยของความคลาดเคลื่อนจากทั้ง \( k \) รอบ ค่าเฉลี่ยนี้คือ Cross-validation Error ของคุณ
ถ้ารู้สึกยากในตอนแรก ไม่ต้องกังวลนะ! ให้ลองนึกถึงการแข่งขันกีฬาทัวร์นาเมนต์แบบพบกันหมด ที่ทุกทีมจะได้ผลัดกันออกมานั่งพักข้างสนาม (เป็น Validation Set) ในขณะที่ทีมอื่นลงแข่ง (เป็น Training Set)
Leave-One-Out Cross-Validation (LOOCV)
นี่คือรูปแบบหนึ่งของ K-fold ที่สุดโต่งที่สุด โดยกำหนดให้ \( k \) เท่ากับจำนวนข้อมูลทั้งหมด (\( n \)) ในแต่ละรอบ คุณจะ Train โมเดลด้วยข้อมูลทั้งหมด ยกเว้นข้อมูลเพียงจุดเดียว แล้วทดสอบกับจุดที่เว้นไว้นั้น วิธีนี้แม่นยำมากแต่ต้องใช้เวลาคำนวณ นาน หากคุณมีข้อมูลจำนวนมาก!
รู้หรือไม่? ในทางปฏิบัติงานด้านคณิตศาสตร์ประกันภัย การใช้ \( k=5 \) หรือ \( k=10 \) เป็นเรื่องปกติ เพราะให้ความสมดุลที่ดีระหว่างความเร็วในการคำนวณและความแม่นยำในการประมาณประสิทธิภาพโมเดล
4. การใช้ Cross-validation เพื่อปรับจูนไฮเปอร์พารามิเตอร์
เราจะหาไฮเปอร์พารามิเตอร์ที่ "ดีที่สุด" ได้อย่างไร? เราจะใช้วิธีที่เรียกว่า Grid Search ร่วมกับ Cross-validation:
1. กำหนดรายการของค่าไฮเปอร์พารามิเตอร์ที่ต้องการทดสอบ (เช่น ลอง \( k=1, 3, 5, 7, 9 \) สำหรับโมเดลหนึ่ง)
2. สำหรับ แต่ละค่า ให้รัน K-fold cross-validation
3. เปรียบเทียบค่าเฉลี่ยความคลาดเคลื่อนที่ได้จากแต่ละค่า
4. เลือกค่าที่ให้ ความคลาดเคลื่อนเฉลี่ยต่ำที่สุด
สิ่งที่ต้องจำให้ขึ้นใจ:
Cross-validation ช่วยให้เราเลือกไฮเปอร์พารามิเตอร์ที่ทำให้โมเดลของเรา สร้างองค์ความรู้ทั่วไป (Generalize) ได้ดีกับข้อมูลใหม่ แทนที่จะเป็นแค่การท่องจำข้อมูลที่ใช้สอนเท่านั้น
5. Overfitting และ Underfitting
หัวใจสำคัญของ cross-validation คือการหา "จุดสมดุล" ระหว่างสองสภาวะสุดโต่งนี้:
- Underfitting: โมเดลเรียบง่ายเกินไป (เช่น พยายามใช้เส้นตรงลากผ่านข้อมูลที่มีความโค้ง) ทำให้ได้ผลลัพธ์ที่ไม่ดีทั้งในข้อมูลสอนและข้อมูลตรวจสอบ
- Overfitting: โมเดลซับซ้อนเกินไป (โมเดลพยายามจำ Noise หรือจุดรบกวนในข้อมูล) ทำให้ได้ผลลัพธ์ สมบูรณ์แบบ บนข้อมูลสอน แต่ แย่มาก บนข้อมูลตรวจสอบ
เทคนิคการจำ:
Overfitting ก็เหมือนกับการ ท่องจำ คำตอบของข้อสอบชุดหนึ่งเป๊ะๆ
Generalizing (สิ่งที่เราต้องการ) ก็เหมือนกับการ ทำความเข้าใจเนื้อหา เพื่อให้ตอบคำถามได้ทุกรูปแบบ
สรุปใจความสำคัญ
1. ไฮเปอร์พารามิเตอร์ คือการตั้งค่าที่นักคณิตศาสตร์ประกันภัยเลือก (ไม่ใช่โมเดลเลือกเอง)
2. Cross-validation (โดยเฉพาะ K-fold) คือเทคนิคการประมาณว่าโมเดลจะทำงานได้ดีแค่ไหนกับข้อมูลใหม่ที่ไม่เคยเห็น
3. Validation set ใช้สำหรับปรับจูนไฮเปอร์พารามิเตอร์ ส่วน Test set ใช้สำหรับประเมินผลครั้งสุดท้ายเท่านั้น
4. K-fold คือการแบ่งข้อมูลเป็น \( k \) ส่วน แล้วผลัดกันนำส่วนหนึ่งมาเป็น "ข้อสอบ" (Test data)
5. LOOCV คือ K-fold ที่กำหนดให้ \( k = n \)
6. เป้าหมาย: คือการลดค่า cross-validation error ให้ต่ำที่สุดเพื่อป้องกันปัญหา overfitting
ยินดีด้วย! คุณเพิ่งทำความเข้าใจหลักการสำคัญในการประเมินโมเดล Machine Learning สำหรับ CS2 สำเร็จแล้ว! ฝึกฝนแนวคิดเหล่านี้ต่อไปเรื่อยๆ แล้วคุณจะก้าวเข้าสู่ความเป็นเลิศด้านการสร้างแบบจำลองแน่นอน!