What is Cross-validation (CV) and Why Do We Need It?

Paul
KBTG Life
Published in
4 min readApr 11, 2023

ทุกคนอาจจะเคยได้ยินและเคยศึกษาวิธีการใช้ K-fold Cross-validation กันมาบ้างแล้วใช่ไหมคะ แต่ทราบหรือไม่ว่าจริงๆ แล้ว K-fold เป็นเพียงแค่ Subset ของ Cross-validation Method เท่านั้น ยังมีอีกหลายวิธีที่น่าสนใจ เดี๋ยวเรามาศึกษาไปพร้อมๆ กันเลยค่ะ

แต่ก่อนอื่นขออธิบายคร่าวๆ ว่า Cross-validation คืออะไรและมีประโยชน์อย่างไร

What is Cross-validation?

หลังจากที่เรา Build Machine Learning Model เสร็จ สเต็ปถัดมาคือการวัด Performance ของ Model เพื่อดูว่า Model ของเรานั้นมีความแม่นยำแค่ไหน แต่ถ้าหากเราวัดผลของ Model จากแค่ Test Set ชุดเดียว มันจะมีความน่าเชื่อถือมากพอหรือไม่?? Cross-validation เป็นเทคนิคในการ Evaluate Machine Learning Model ที่เข้ามาช่วยแก้ปัญหาตรงนี้ โดยจะมีหลากหลายวิธี แต่ทุกวิธีจะมี Algorithm คล้ายกัน ดังนี้

  1. แบ่ง Dataset ออกเป็น 2 ส่วน (Training and Testing)
  2. Train Model บน Training Set
  3. Validate Model บน Test Set
  4. ทำสเต็ป 1–3 ซ้ำ x ครั้ง (จำนวน x ขึ้นอยู่กับ CV Method ที่เราใช้)

โดยในบทความนี้จะกล่าวถึง Cross-validation ทั้งหมด 5 วิธีหลักๆ ดังต่อไปนี้

1. Hold-out cross-validation

เป็นวิธีที่ง่ายที่สุด และถูกใช้ทั่วไปในการ Build Machine Learning Model โดยมี Algorithm ดังต่อไปนี้

Hold-out Cross-validation
  1. แบ่ง Dataset ออกเป็น 2 ส่วน (Training and Testing) โดยปกติจะแบ่งเป็น 80:20 คือ Training Set 80% และ Test Set 20% แต่เราสามารถปรับตัวเลขให้เหมาะสมกับ Dataset ของเราได้เลย
  2. Train Model บน Training Set
  3. Validate Model บน Test Set
  4. บันทึกผลการ Validate Model

อ่านจบ Section นี้แล้วรู้สึกคุ้นๆ ไหมคะ จริงๆ แล้ว Hold-out ก็คือวิธีการที่เราใช้ในการ Split Dataset ของเราโดยทั่วไปนั่นเอง อย่างไรก็ตามวิธีนี้ยังคงมีข้อเสียอยู่ด้วยเช่นกัน หลักๆ คือเรา Test Model แค่ครั้งเดียว ซึ่งอาจจะเกิดปัญหา Bottleneck ทำให้ Model ที่ได้ไม่น่าเชื่อถือมากพอ

2. K-fold Cross-validation

เป็นเทคนิคที่ช่วย Minimize ข้อเสียของ Hold-out Method โดย K-fold จะมีวิธีการ Split Data ที่ช่วยแก้ปัญหา “Test Only Once Bottleneck” โดยมี Algorithm ดังต่อไปนี้

K-fold cross-validation
  1. เลือกจำนวนของ Folds (k) โดยปกติ k จะเท่ากับ 5 หรือ 10 แต่เราสามารถปรับ k ได้ตามที่เราต้องการ เพื่อให้เหมาะสมกับ Dataset ของเรา แต่จะต้องน้อยกว่าจำนวน Row ของ Dataset
  2. แบ่ง Dataset ออกเป็น k ส่วน (Folds)
  3. ให้ k-1 Folds เป็น Training Set และ Fold ที่เหลือเป็น Test Set
  4. Train Model บน Training Set (ในแต่ละ Iteration เราจะต้องทำการ Train Model ใหม่ทุกครั้ง โดย Model แต่ละตัวจะไม่ขึ้นกับ Model ก่อนหน้า)
  5. Validate Model บน Test Set
  6. บันทึกผลการ Validate Model
  7. ทำสเต็ป 3–6 ซ้ำ k รอบ โดยแต่ละรอบใช้ Fold ที่เหลือเป็น Test Set เราจะได้ผลการ Validate Model ของแต่ละ Fold เท่ากับ k จำนวน
  8. สุดท้ายนำผลการ Validate Model จากสเต็ป 6 มาเฉลี่ยกัน ได้เป็น Final Result

เห็นได้ชัดว่า K-fold มีความน่าเชื่อถือมากกว่า Hold-out Method เพราะมีการ Train และ Test Model บนหลายๆ ส่วนของ Dataset โดยที่เราสามารถทำให้ Overall Score ของ Model มีความน่าเชื่อถือมากกว่านี้ได้ด้วยการเพิ่มจำนวน Fold อย่างไรก็ตามการเพิ่มจำนวน Fold มากเกินไปจะทำให้เราต้องใช้เวลานานใน Training Process

3. Leave-one-out cross-validation (LOOCV)

เป็น Extreme Case ของ K-fold สมมุติว่า k มีค่าเท่ากับ n ซึ่ง n คือจำนวน Sample ของ Dataset ในกรณีนี้ K-fold ก็จะเท่ากับ Leave-one-out เลย โดยมี Algorithm ดังต่อไปนี้

Leave-one-out cross-validation
  1. เลือก 1 Sample จาก Dataset เพื่อใช้เป็น Test Set
  2. ส่วนที่เหลือ n — 1 Samples เป็น Training Set
  3. Train Model บน Training Set (ในแต่ละ Iteration เราจะต้องทำการ Train Model ใหม่ทุกครั้ง โดย Model แต่ละตัวจะไม่ขึ้นกับ Model ก่อนหน้า)
  4. Validate Model บน Test Set
  5. บันทึกผลการ Validate Model
  6. ทำสเต็ป 1–5 ซ้ำ n ครั้ง เราก็จะมี Training and Test Set ที่ต่างกันทั้งหมด n ชุด
  7. สุดท้ายนำผลการ Validate Model จากสเต็ป 5 มาเฉลี่ยกัน ได้เป็น Final Result

ประโยชน์ที่เห็นได้ชัดของ LOOCV คือเราไม่ได้ Waste Data จาก Training Set ของเราเยอะ เราใช้เพียงแค่ 1 Sample จาก Dataset เป็น Test Set เท่านั้น ส่วนที่เหลือใช้เป็น Training Set ทั้งหมด แต่ถ้าเทียบกับ K-fold แล้ว LOOCV ต้อง Build Model มากถึง n Models แทนที่จะ Build แค่ k Models ทำให้ LOOCV ใช้เวลานานกว่า K-fold อย่างมาก

ด้วยเหตุนี้เหล่า Data Scientist ส่วนใหญ่จึงมีการ Set General Rule Based on Research ต่างๆ โดยแนะนำว่าควรใช้ 5 หรือ 10 Fold แทนการใช้ LOOCV

4. Leave-p-out cross-validation (LpOC)

คล้ายกับ Leave-one-out แต่ใช้ p Samples เป็น Test Set ส่วนที่เหลือเหมือนกับ LOOCV ทั้งหมด โดยมี Algorithm ดังต่อไปนี้

  1. เลือก p Samples จาก Dataset เพื่อใช้เป็น Test Set
  2. ส่วนที่เหลือ n — p Samples เป็น Training Set
  3. Train Model บน Training Set (ในแต่ละ Iteration เราจะต้องทำการ Train Model ใหม่ทุกครั้ง โดย Model แต่ละตัวจะไม่ขึ้นกับ Model ก่อนหน้า)
  4. Validate Model บน Test Set
  5. บันทึกผลการ Validate Model
  6. ทำสเต็ป 1–5 ซ้ำ C(n เลือก p) ครั้ง
  7. สุดท้ายนำผลการ Validate Model จากสเต็ป 5 มาเฉลี่ยกัน ได้เป็น Final Result

5. Stratified K-fold cross-validation

บางครั้งเราเจอปัญหาของ Target Imbalance เยอะๆ ใน Dataset ของเรา เช่นในปัญหา Classification Cats and Dogs อาจจะมี Cats Target มากกว่า Dog Target โดย Stratified K-fold จะทำการนำเทคนิค K-fold CV มา Adapt สำหรับ Case ของ Target Imbalance นี้

วิธีการทำงานก็ง่ายมากเลยค่ะ Stratified K-fold จะทำการ Split Dataset เป็น k Folds โดยแต่ละ Fold จะมีเปอร์เซ็นต์ของแต่ละ Target Class เท่าๆ กัน ในส่วนของ Regression ตัว Stratified k-Fold จะ Make Sure ว่า Mean Target ของแต่ละ Fold จะมีค่าเท่าๆ กัน โดยมี Algorithm ดังต่อไปนี้

  1. เลือกจำนวนของ Folds (k)
  2. แบ่ง Dataset ออกเป็น k ส่วน (Folds) โดยแต่ละ Fold จะมีเปอร์เซ็นต์ของแต่ละ Target Class เท่าๆกัน
  3. ให้ k-1 Folds เป็น Training Set และ Fold ที่เหลือเป็น Test Set
  4. Train Model บน Training Set (ในแต่ละ Iteration เราจะต้องทำการ Train Model ใหม่ทุกครั้ง โดย Model แต่ละตัวจะไม่ขึ้นกับ Model ก่อนหน้า)
  5. Validate Model บน Test Set
  6. บันทึกผลการ Validate Model
  7. ทำสเต็ป 3–6 ซ้ำ k รอบ โดยแต่ละรอบใช้ Fold ที่เหลือเป็น Test Set เราจะได้ผลการ Validate Model ของแต่ละ Fold เท่ากับ k จำนวน
  8. สุดท้ายนำผลการ Validate Model จากสเต็ป 6 มาเฉลี่ยกัน ได้เป็น Final Result

เป็นอย่างไรกันบ้างคะเพื่อนๆ เราหวังไว้เป็นอย่างยิ่งว่าบทความนี้จะช่วยให้เพื่อนๆ เข้าใจเกี่ยวกับ Cross-validation มากขึ้น และสามารถเลือกใช้วิธีที่เหมาะสมกับ Dataset หรือปัญหาของเรามากที่สุด สุดท้ายนี้ขอบคุณทุกท่านที่อ่านมาจนถึงช่วงสุดท้ายของบทความ หากมีข้อผิดพลาดตรงส่วนใดหรือใช้คำไม่เหมาะสมต้องขออภัยเพื่อนๆ ไว้ ณ ที่นี้ด้วยนะคะ

References

สำหรับใครที่สนใจเรื่องราวดีๆ หรืออยากเรียนรู้เกี่ยวกับ Product ใหม่ๆ จากชาว KBTG สามารถติดตามรายละเอียดกันได้ที่เว็บไซต์ www.kbtg.tech

--

--