Cross-Validation in Kaggle Competitions
CV trong Kaggle — Trust Your CV
Công ty nào đang ứng dụng Kiểm định chéo?
Kaggle (nền tảng thi khoa học dữ liệu của Google) tổ chức hàng trăm cuộc thi mỗi năm. Hàng nghìn đội nộp bài và theo dõi thứ hạng trên public leaderboard — bảng xếp hạng công khai, cập nhật sau mỗi lần nộp bài. Nhưng public leaderboard chỉ được tính trên khoảng 1/3 dữ liệu kiểm tra.
Khi cuộc thi kết thúc, private leaderboard(bảng xếp hạng chính thức) dùng 2/3 dữ liệu còn lại — và xáo trộn thứ hạng cực kinh. Có trường hợp đội hạng 1.485 public nhảy lên hạng 1 private. Châm ngôn của các Grandmaster: “Trust Your CV”— tin vào cross-validation nội bộ, không chạy theo bảng xếp hạng công khai.
Cuộc thi “Decoding Brain Signals” — câu chuyện kinh điển
Public LB (trong cuộc thi)
Một đội — hãy gọi họ là Đội X— xếp hạng 1.485 / ~1.700. Gần cuối bảng. Nhiều người nghĩ họ thua chắc.
Private LB (sau cuộc thi)
Đây là câu chuyện thật từ cuộc thi Kaggle 2015–2016. Đội X chọn mô hình dựa trên CV score cao thay vì public LB — và 1.484 đội đã overfit public LB và tụt hạng thảm hại khi private công bố.
Vấn đề công ty cần giải quyết
Public leaderboard tạo cám dỗ cực mạnh: mỗi lần nộp, bạn nhận phản hồi. Nếu thứ hạng tăng, bạn giữ lại thay đổi vừa thực hiện. Nếu giảm, bỏ đi. Lặp lại 50, 100 lần. Blum & Hardt (ICML 2015)chứng minh: hành vi này tương đương overfit trên tập kiểm tra. “Mô hình” ở đây không chỉ là mạng nơ-ron mà còn là quyết định của bạn về việc giữ/bỏ mỗi thay đổi.
Vấn đề cốt lõi: làm sao đánh giá đáng tin cậy hiệu suất mô hình khi public leaderboard có thể đánh lừa? Câu trả lời: cross-validation nội bộ— chia tập huấn luyện thành nhiều fold, xoay vòng kiểm định, rồi trung bình K điểm. CV này là “bảng xếp hạng cá nhân” của mỗi đội — và nó đáng tin hơn public LB.
Public vs Private — thứ hạng bị xáo trộn cực lớn
Đội A-F có public score cao nhất nhưng private score thấp — họ overfit public LB. Đội G-L khiêm tốn public, mạnh private — họ tin vào CV. Đây là lý do công thức vàng: Trust Your CV.
Cách Kiểm định chéo giải quyết vấn đề
Cross-validation nội bộ là nguồn tin đáng tin cậy nhất. Trước khi nộp bài, thí sinh chia dữ liệu huấn luyện thành k phần (thường K = 5 hoặc 10). Với mỗi fold, train trên k-1 phần, test trên phần còn lại. Trung bình k điểm = “CV score”. Các Grandmaster tin CV score hơn cả public LB vì nó đã trung bình qua nhiều cách chia khác nhau.
So sánh CV score vs public LB.Nếu hai chỉ số đi cùng chiều ⇒ yên tâm. Nếu CV tăng nhưng public giảm (hoặc ngược lại) ⇒ đèn đỏ: có thể public LB đang “nhìn” một góc nhỏ không đại diện, hoặc mô hình đang overfit. Quy tắc vàng: ưu tiên CV.
“Trust Your CV” — phép thử thời khắc.Trong cuộc thi “Decoding Brain Signals”, một đội xếp hạng 1.485 public leaderboard (gần cuối). Nhưng CV score của họ vẫn cao. Họ chọn submission dựa trên CV thay vì public LB — và khi private được công bố, họ ở hạng 1. 1.484 đội đã overfit public LB và bị tụt thảm hại.
Hai bài nộp cuối quyết định. Kaggle chỉ cho phép mỗi đội chọn 2 submissionđể chấm trên private. Chiến lược tối ưu: một bài có CV score cao nhất (bảo thủ, “đánh chắc”), một bài cân bằng giữa CV và public (rủi ro vừa phải). Đây là lúc cross-validation thực sự quyết định thắng thua.
Số fold càng lớn, ước lượng càng ổn định
Trung bình qua 5 fold
85.8% ± 3.15%
Kéo slider để thấy: số fold tăng ⇒ độ lệch chuẩn giảm ⇒ ước lượng ổn định hơn. Nhưng chi phí tính toán tăng tuyến tính. Thực tế cân bằng ở K = 5 hoặc 10.
Stratified CV: khi các lớp không cân bằng
Dataset mất cân bằng: 95% âm, 5% dương
Thi Kaggle về phát hiện gian lận thẻ tín dụng. Trong 10.000 giao dịch, chỉ 500 là gian lận (5%). Nếu chia ngẫu nhiên thành 5 fold, mỗi fold “lý thuyết” có 100 giao dịch gian lận — nhưng thực tế có thể lệch mạnh: fold này 60, fold kia 140.
Tản mát public vs private — không phải mối quan hệ 1:1
40 đội tham dự — chấm cả public và private
Các đội tin vào CV (xanh) chủ yếu nằm trên hoặc quanh đường y = x. Các đội chạy theo public LB (đỏ) nằm dưới đường y = x — nghĩa là public score cao hơn private score, họ bị tụt hạng khi private mở.
Bạn đang thi Kaggle. CV score tăng từ 0.82 → 0.85 sau thay đổi X. Cùng lúc, public LB giảm từ 0.88 → 0.86. Bạn nên làm gì?
Trong 3 tuần cuối cuộc thi, bạn nộp 50 submissions/ngày để 'tune' theo public LB. Public LB score tăng đều. Nhưng CV score chỉ tăng 0.002. Nhận định nào đúng?
Con số thật
Nếu không có Kiểm định chéo, app sẽ ra sao?
Không có cross-validation, thí sinh sẽ hoàn toàn phụ thuộc vào public leaderboard — một nguồn phản hồi chỉ đại diện cho 1/3 test data và dễ bị overfit. Kết quả: hàng loạt đội leo top 10 public rồi rơi tự do khi private được công bố. Đây là câu chuyện lặp đi lặp lại trong gần như mọi cuộc thi Kaggle.
Cross-validation cho mỗi thí sinh một “bảng xếp hạng cá nhân” đáng tin cậy hơn cả leaderboard chính thức. Đó là lý do “Trust Your CV”trở thành bài học đầu tiên mọi Kaggle Grandmaster truyền lại cho người mới — và cũng là nguyên tắc áp dụng được cho mọi dự án ML, không chỉ thi đấu.
- Luôn đặt preprocessing (scaler, encoder) bên trong pipeline của mỗi fold — không fit trên toàn bộ dữ liệu trước CV.
- Báo cáo kèm mean ± std. Std thấp = ổn định. Std cao = có fold đặc biệt, cần tìm nguyên nhân.
- Với phân loại mất cân bằng: Stratified K-Fold. Với dữ liệu thời gian: Time Series Split. Với nhóm tự nhiên: Group K-Fold.
Chiến lược 2 submission cuối của Grandmaster
Submission 1 — an toàn
Bài có CV score cao nhất. Đây là “đánh chắc” — kết quả CV được trung bình qua K lần chia, ít may rủi nhất. Nếu mô hình tốt thật, nó sẽ ổn trên private.
Submission 2 — cân bằng
Bài cân bằng giữa CV score và public LB. Đây là “rủi ro vừa phải” — nếu public LB thật sự có tín hiệu (không phải toàn noise), bài này sẽ thắng.
Tuyệt đối không chọn cả 2 bài dựa hoàn toàn vào public LB — bạn đang cược hết vào một nguồn tin đã được chứng minh là không đáng tin.
- Nếu mới bắt đầu, hãy đặt mục tiêu nhỏ: đạt top 25% — đây đã là mốc đòi hỏi CV được tổ chức tốt.
- Ghi chép mọi thử nghiệm (tool như Weights & Biases miễn phí cho public project). Khi có 50 thử nghiệm, bạn cần biết cái nào tốt hơn cái nào.
- Tham gia cộng đồng (Kaggle VN trên Facebook, Discord) — đọc kernel của winner sau mỗi cuộc thi là cách học nhanh nhất về CV.