บทนำ: ทำไมเราต้องใช้ k-fold Cross-Validation?
ยินดีต้อนรับ! ในการเดินทางสาย Statistics for Risk Modeling (SRM) นี้ คุณคงทราบแล้วว่าการสร้างโมเดลเป็นเพียงแค่ครึ่งทางเท่านั้น ความท้าทายที่แท้จริงคือการรู้ว่าโมเดลนั้นจะทำงานได้ดีแค่ไหนเมื่อเจอกับ ข้อมูลใหม่ที่ไม่เคยเห็นมาก่อน ซึ่งนี่คือ "จอกศักดิ์สิทธิ์" ของการเรียนรู้ทางสถิติ (Statistical Learning) เลยล่ะ
ในโลกอุดมคติ เราคงมีข้อมูลมหาศาลไว้ทดสอบโมเดล แต่ในโลกความเป็นจริง ข้อมูลมักมีจำกัด k-fold Cross-Validation (CV) จึงเป็นเทคนิคอันชาญฉลาดที่ช่วยให้เราใช้ข้อมูลที่มีอยู่ให้เกิดประโยชน์สูงสุด เพื่อประเมินว่าโมเดลจะทำงานใน "โลกแห่งความเป็นจริง" ได้ดีเพียงใด โดยไม่จำเป็นต้องมีชุดข้อมูลทดสอบแยกต่างหากที่มีขนาดใหญ่โต ถ้ารู้สึกว่ามันดูเป็นนามธรรมไปนิดในตอนนี้ ไม่ต้องกังวลนะ เรามาค่อยๆ แกะเนื้อหาไปทีละขั้นตอนกัน!
k-fold Cross-Validation คืออะไร?
ลองจินตนาการว่าคุณกำลังเตรียมตัวสอบ Exam SRM ถ้าคุณทำข้อสอบเก่าชุดเดิมซ้ำไปซ้ำมา คุณก็จะจำคำตอบได้ในที่สุด แต่การจำคำตอบไม่ได้แปลว่าคุณเข้าใจเนื้อหานะ มันแค่แปลว่าคุณจำ ข้อสอบชุดนั้นได้ เท่านั้นเอง เพื่อที่จะทดสอบตัวเองจริงๆ คุณจำเป็นต้องเจอโจทย์ที่ไม่เคยเห็นมาก่อนต่างหาก
k-fold Cross-Validation ทำหน้าที่แบบเดียวกันนี้กับข้อมูล โดยมันจะแบ่งข้อมูลที่มีอยู่ออกเป็น k กลุ่มที่มีขนาดเท่าๆ กัน (เรียกว่า "folds") แบบสุ่ม
กระบวนการทำงานเป็นอย่างไร:
1. Divide (แบ่ง): แบ่งชุดข้อมูลทั้งหมดของคุณออกเป็น k กลุ่ม (folds) ที่มีขนาดใกล้เคียงกัน
2. Iterate (ทำซ้ำ): สำหรับแต่ละกลุ่ม:
a. ให้กลุ่มนั้นทำหน้าที่เป็น "ชุดทดสอบ" (เรามักเรียกสิ่งนี้ว่า validation set)
b. ให้กลุ่มที่เหลืออีก k-1 กลุ่มทำหน้าที่เป็น "ชุดฝึกฝน" (training set)
c. ฝึกฝนโมเดลด้วยชุดฝึกฝน และคำนวณค่าความผิดพลาด (เช่น Mean Squared Error หรือ MSE) บน validation set ที่เรากันไว้
3. Average (หาค่าเฉลี่ย): หลังจากทำครบ k ครั้ง คุณจะได้ค่าความผิดพลาดมาทั้งหมด k ค่า จากนั้นก็นำมาหาค่าเฉลี่ยเพื่อให้ได้ค่าประมาณความผิดพลาดจากการทำ cross-validation ครั้งสุดท้าย
สูตรการคำนวณ:
ค่าประมาณของ k-fold CV คำนวณได้จากการหาค่าเฉลี่ยของ MSE จากแต่ละ fold:
\( CV_{(k)} = \frac{1}{k} \sum_{i=1}^k MSE_i \)
"ทำไม": เปรียบเทียบ k-fold กับวิธีอื่นๆ
คุณอาจจะสงสัยว่า "ทำไมเราไม่แบ่งข้อมูลแค่ครั้งเดียวเป็นชุดฝึกฝนและชุดตรวจสอบล่ะ?" (วิธีนี้เรียกว่า Validation Set Approach) หรือ "ทำไมเราไม่กำหนดให้ k เท่ากับจำนวนข้อมูลทั้งหมดเลยล่ะ?" (วิธีนี้เรียกว่า Leave-One-Out Cross-Validation หรือ LOOCV)
1. k-fold เทียบกับ Validation Set Approach
Validation Set Approach นั้นง่าย แต่มีข้อเสียสำคัญ 2 ประการ:
- High Variability (ความแปรปรวนสูง): ค่าความผิดพลาดอาจเปลี่ยนไปมาอย่างมาก ขึ้นอยู่กับว่าข้อมูลชุดไหนถูกสุ่มไปอยู่ในชุดฝึกฝน
- Overestimating Error (ประเมินความผิดพลาดสูงเกินจริง): เนื่องจากโมเดลถูกฝึกด้วยข้อมูลเพียงบางส่วน ผลลัพธ์จึงมักแย่กว่าการใช้ข้อมูลทั้งหมด ซึ่งนำไปสู่การประเมินค่าความผิดพลาดที่สูงเกินจริง
2. k-fold เทียบกับ LOOCV
LOOCV เป็นกรณีพิเศษของ k-fold ที่มีค่า k = n (จำนวนข้อมูลทั้งหมด) แม้ว่า LOOCV จะมีความเสถียรมาก แต่ก็ สิ้นเปลืองทรัพยากรการคำนวณสูง เพราะคุณต้องเทรนโมเดลถึง n ครั้ง! ถ้าคุณมีข้อมูล 100,000 แถว คอมพิวเตอร์ของคุณอาจจะไม่ปลื้มเท่าไหร่นัก
สรุปประเด็นสำคัญ: k-fold CV (โดยปกติใช้ k=5 หรือ k=10) คือทางสายกลางที่ลงตัวที่สุด—ให้ค่าประมาณที่แม่นยำกว่า Validation Set Approach และเร็วกว่า LOOCV มาก
ความสัมพันธ์ระหว่าง Bias และ Variance ใน k-fold CV
นี่คือหัวข้อโปรดที่ชอบออกสอบ Exam SRM! การเลือกค่า k คือการชั่งน้ำหนักระหว่าง Bias และ Variance
Bias (ความแม่นยำของค่าประมาณ):
LOOCV (k=n) มี Bias ต่ำมาก เพราะเหตุใด? เพราะแต่ละชุดฝึกฝนใช้ข้อมูล \( n-1 \) ตัว ซึ่งแทบจะเป็นข้อมูลทั้งหมดที่มี ในทางกลับกัน 5-fold CV ใช้ข้อมูลเพียง 80% ในการฝึกฝน ซึ่งอาจทำให้ประเมินค่าความผิดพลาดสูงกว่าความเป็นจริงเล็กน้อย ดังนั้น เมื่อค่า k เพิ่มขึ้น Bias จะ ลดลง
Variance (ความคงเส้นคงวาของค่าประมาณ):
จุดนี้อาจฟังดูย้อนแย้ง LOOCV จริงๆ แล้วมี Variance ที่สูงกว่า k-fold CV! เมื่อเราทำ LOOCV เรากำลังหาค่าเฉลี่ยจากโมเดลจำนวน \( n \) ตัวที่ฝึกฝนด้วยข้อมูลที่แทบจะเหมือนกันทุกประการ ผลลัพธ์เหล่านี้จึง มีความสัมพันธ์กันสูง (highly correlated) ค่าเฉลี่ยของตัวแปรที่มีความสัมพันธ์กันสูงจะมี Variance มากกว่าค่าเฉลี่ยของตัวแปรที่มีความสัมพันธ์กันต่ำ ดังนั้น เมื่อค่า k เพิ่มขึ้น Variance จะ เพิ่มขึ้น
สรุปสั้นๆ:
- k = 5 หรือ 10: "จุดที่ลงตัว" สมดุลระหว่าง Bias และ Variance
- LOOCV (k=n): Bias ต่ำ แต่ Variance สูง และสิ้นเปลืองการคำนวณสูง
ตัวอย่างในโลกจริง: การทำนายค่าเคลมประกัน
สมมติว่าคุณเป็นนักคณิตศาสตร์ประกันภัย (Actuary) ที่กำลังสร้างโมเดลทำนายค่าเคลมประกันรถยนต์ คุณมีข้อมูลเคลมเก่า 1,000 รายการ ถ้าคุณใช้ 10-fold Cross-Validation:
1. คุณแบ่งข้อมูลเคลม 1,000 รายการออกเป็น 10 กลุ่ม กลุ่มละ 100 รายการ
2. คุณเทรนโมเดลด้วยข้อมูล 900 รายการ และทดสอบกับอีก 100 รายการที่เหลือ
3. คุณทำแบบนี้ 10 ครั้ง ดังนั้นข้อมูลเคลมทุกรายการจะได้เป็นส่วนหนึ่งของ "ชุดทดสอบ" ครั้งละหนึ่งครั้งพอดี
4. คุณหาค่าเฉลี่ยของผลลัพธ์ทั้ง 10 ครั้ง นี่จะทำให้คุณเห็นภาพความจริงว่าโมเดลจะทำงานได้ดีแค่ไหนเมื่อมีลูกค้า รายใหม่ เข้ามาทำประกันในวันพรุ่งนี้
ข้อควรระวัง
1. อย่าสับสนระหว่าง k-fold กับการเทรนโมเดลจริง: จำไว้ว่า k-fold CV มีไว้เพื่อ ประเมิน หรือ เปรียบเทียบ โมเดลเท่านั้น ไม่ใช่เพื่อเทรนโมเดลตัวสุดท้าย เมื่อคุณใช้ k-fold จนตัดสินใจได้แล้วว่าโมเดลไหนดีที่สุด คุณค่อยนำโมเดล "ที่ดีที่สุด" นั้นไปเทรนใหม่ด้วย ข้อมูลทั้งหมด อีกครั้ง
2. ต้องสุ่มแบ่งกลุ่ม (Folds): ถ้าข้อมูลของคุณมีการเรียงลำดับ (เช่น เรียงตามวันที่หรือขนาดค่าเคลม) คุณ ต้อง สับเปลี่ยนข้อมูล (shuffle) ก่อนแบ่งกลุ่ม ไม่อย่างนั้นแต่ละกลุ่มจะไม่สามารถเป็นตัวแทนที่ดีของข้อมูลทั้งหมดได้
3. การเลือกค่า "k": อย่าทึกทักเอาเองว่าค่า k ยิ่งเยอะยิ่งดี แม้ว่า k=n (LOOCV) จะมี Bias ต่ำที่สุด แต่ด้วยภาระการคำนวณและ Variance ที่สูง ทำให้ในทางปฏิบัติแล้ว k=5 หรือ k=10 มักเป็นตัวเลือกที่เหนือกว่า
สรุปและเทคนิคการจำ
เพื่อให้จำขั้นตอนของ k-fold CV ได้แม่น ให้จำคำว่า "S.T.A.R.":
S - Split (แบ่ง) ข้อมูลออกเป็น k กลุ่ม
T - Train (เทรน) ด้วยข้อมูล k-1 กลุ่ม
A - Assess (ประเมิน/ตรวจสอบ) ด้วยกลุ่มที่เหลือ
R - Repeat (ทำซ้ำ) ครบ k ครั้งแล้วหาค่าเฉลี่ย
ประเด็นสำคัญสำหรับสอบ:
- k-fold CV ใช้เพื่อประเมิน อัตราความผิดพลาดบนข้อมูลทดสอบ (test error rate)
- มีความเสถียรกว่าวิธี Validation Set Approach
- ประหยัดการคำนวณมากกว่าวิธี LOOCV
- ค่า k ที่นิยมใช้คือ 5 หรือ 10
- k ต่ำ = Bias สูง, Variance ต่ำ
- k สูง = Bias ต่ำ, Variance สูง
ถ้าส่วนของ Bias-Variance รู้สึกสับสน ไม่ต้องกังวลไป! แค่จำไว้ว่า: LOOCV มี "Bias ต่ำ" เพราะใช้ข้อมูลแทบทั้งหมด แต่ "Variance สูง" เพราะชุดที่ใช้ทดสอบแต่ละรอบมันคล้ายกันมากนั่นเอง!