Model Evaluation & Selection in Kaggle
Chọn model trên Kaggle: ai trụ được khi private leaderboard lật bài
Công ty nào đang ứng dụng Đánh giá và chọn mô hình?
Kaggle là nền tảng thi đấu khoa học dữ liệu của Google, nơi hàng chục nghìn kỹ sư và nhà nghiên cứu cạnh tranh trên cùng bộ dữ liệu. Giải thưởng lên tới hàng triệu đô la. Thứ hạng được quyết định bởi từng phần nghìn của metric đánh giá.
Bài học lớn nhất từ Kaggle: bạn không bao giờ thắng bằng đúng một chiến thuật cố định. Có gấu chậm (nộp sớm một model mạnh), có cáo nhanh (tune theo public leaderboard mỗi ngày), có cú khôn (tin CV nội bộ, ensemble lớn, final submission đa dạng). Ba tính cách dẫn tới ba kết thúc khác nhau khi private leaderboard được công bố.
Vấn đề công ty cần giải quyết
Kaggle chia test data thành hai phần ẩn: public leaderboard (chỉ dùng khoảng 25% test để chấm điểm cập nhật hằng ngày) và private leaderboard (75% còn lại, chỉ công bố khi cuộc thi kết thúc). Mục đích là tránh việc các đội tune tham số chỉ theo public.
Hiện tượng leaderboard shakeup xảy ra lúc private được lật lên. Nhiều đội đứng top 10 public rớt hàng trăm bậc vì đã overfit vào subset công khai mà không biết. Đội khác, chậm ở public, lại leo vài chục bậc. Làm thế nào để biết một model thực sự tốt hay chỉ may mắn? Làm thế nào để chọn đúng hai bài nộp cuối từ hàng trăm thí nghiệm? Đây là câu chuyện của việc đánh giá và chọn model ở độ khó cao nhất.
Cách Đánh giá và chọn mô hình giải quyết vấn đề
Cross-validation strategy: nền tảng không thể thiếu. Grandmaster xây CV strategy trước mọi thứ khác. K-Fold là mặc định, nhưng tuỳ bài cần biến thể: Stratified cho imbalanced, Group K-Fold khi có nhóm dữ liệu (cùng bệnh nhân), Time-Series Split cho chuỗi thời gian. Quy tắc vàng: nếu CV score và public LB tương quan tốt, hãy tin CV chứ không phải public.
Metric selection: hiểu cuộc thi đang đo gì. RMSE cho regression, AUC cho classification, MAP@K cho ranking, log-loss cho probabilistic. Grandmaster phân tích metric trước khi viết dòng code đầu tiên, vì metric quyết định loss function nào để huấn luyện, threshold nào để cut-off, và cách tối ưu ensemble. Ví dụ: log-loss phạt nặng dự đoán tự tin sai, nên phải calibrate probability.
Ensemble stacking: xếp chồng model qua nhiều tầng. Grandmaster huấn luyện hàng chục, đôi khi hàng trăm model đa dạng: XGBoost, LightGBM, CatBoost, neural net, linear. Dự đoán của các model này trở thành feature đầu vào cho meta-model. Bài thắng Kaggle tháng 4/2025 dùng ba tầng: tầng 1 gồm 33 model, tầng 2 có ba meta (XGBoost, neural net, AdaBoost), tầng 3 là trung bình có trọng số. Giải pháp cuối chọn 75 model từ 500 thí nghiệm.
Final submission strategy: đa dạng là tất cả. Kaggle cho phép hai bài nộp cuối. Grandmaster áp dụng nguyên tắc diversity: chọn hai bài rất khác nhau, một bài an toàn (CV mạnh, ensemble lớn) và một bài mạo hiểm (single model mạnh hoặc ensemble nhỏ đặc biệt). Nếu chọn hai bài giống nhau, chúng thắng cùng hoặc thua cùng, tức là mất lợi thế đa dạng. Quyết định này thường phân biệt top 10 với top 100.
Thử tự tay
Gấu, Cáo và Cú đua tám tuần trên Kaggle
Nhấn Chạy mô phỏng để xem ba chiến thuật đua trên public leaderboard suốt tám tuần. Khi cuộc thi kết thúc, nhấn Công bố private. Đây là khoảnh khắc “sự thật”.
Kaggle Leaderboard, 8 tuần đua giữa ba chiến thuật
Tune tham số theo feedback public LB mỗi ngày. Top 5 public sau tuần đầu. Khi private revealed, rớt hàng trăm bậc vì đã overfit vào subset public mà không biết.
Nộp bài sớm với một XGBoost được tune kỹ. Không chạy theo leaderboard từng giờ. Khi private revealed, thứ hạng thường chỉ dao động nhẹ 2 đến 5 bậc.
Chậm ở public nhưng CV nội bộ rất tốt. Cuối cùng nộp một ensemble an toàn cộng một ensemble mạo hiểm. Private revealed, thứ hạng thường leo vài chục bậc nhờ hai bài nộp đa dạng.
Cáo nhanh đứng top 5 public suốt tuần cuối, rồi rớt xuống #185 private. Nguyên nhân chính?
Ensemble stacking xếp 3 tầng cho bài thắng Kaggle 2025
Grandmaster không chỉ huấn luyện nhiều model. Họ kiến trúc ensemble thành các tầng, mỗi tầng có nhiệm vụ riêng: tầng 1 đa dạng, tầng 2 kết hợp, tầng 3 ổn định.
Stacking ba tầng. Bấm từng tầng để tìm hiểu
Mỗi model học một pattern hơi khác nhau. Đa dạng hoá kiến trúc quan trọng hơn chọn 'model tốt nhất', vì ensemble cần lỗi độc lập để triệt nhiễu.
- Đa dạng architecturequan trọng hơn “model tốt nhất”. Ensemble 10 model giống nhau ~ 1 model. Ensemble 10 model khác kiến trúc » 10× tốt hơn.
- Out-of-fold predictions bắt buộc khi stack. Dùng prediction train sẽ leak. Meta model học thuộc, và private sẽ sập.
- Diminishing returns: từ 10 lên 100 model, gain giảm dần. Từ 100 lên 800, gần như không đáng, trừ khi chênh lệch giải thưởng lớn.
Thử chọn 2 bài nộp cuối: bạn dám chọn gì?
Bạn có 4 ứng viên: ensemble an toàn, single XGBoost tune kỹ, ensemble nhỏ mạo hiểm, và bản “copy public LB top”. Chỉ được chọn 2. Thử nhấn hai thẻ. Hệ thống sẽ chấm chiến thuật của bạn.
Chọn đúng hai bài nộp cuối. Nhấn hai bài bạn muốn submit
Kaggle cho mỗi đội nộp tối đa hai bài final. Nguyên tắc của Grandmaster: chọn hai bài ĐA DẠNG. Nếu chọn hai bài giống nhau, chúng thắng cùng hoặc thua cùng. Thử ghép đôi bên dưới.
CV của bạn = 0.842, public LB = 0.839. Một notebook public có public LB = 0.851 nhưng không biết CV. Nên làm gì?
Chọn CV strategy theo loại dữ liệu
K-Fold mặc định không phải lúc nào cũng đúng. Bốn biến thể thường gặp:
Dữ liệu IID, không có nhóm, không thời gian
Classification mất cân bằng. Mỗi fold giữ tỉ lệ lớp
Có nhóm (cùng bệnh nhân, cùng user). Tránh leak
Dữ liệu theo thời gian. Huấn luyện trên quá khứ, validate trên tương lai
Vì sao ensemble stacking mạnh đến thế?
Đọc từng bước dưới đây. Mỗi bước là một mảnh ghép của nguyên lý “trộn nhiều model”. Khi hiểu hết, bạn đã nắm 90% vì sao Kaggle solutions thường gồm 20+ model.
Giả sử XGBoost dự đoán xác suất = 0,72 cho một mẫu. LightGBM dự đoán 0,68. Neural Net dự đoán 0,81. Nhãn thật là 1. Cả ba model đều không hoàn hảo, và mỗi model có kiểu sai riêng.
Netflix Prize: dòng thời gian nổi tiếng của ensemble
Bốn cột mốc của cuộc thi ML công khai lớn nhất lịch sử, cũng là “trường ca” dạy ngành này về ensemble.
Cải thiện RMSE của Cinematch ≥ 10%. 100 triệu rating, 480 000 user, 17 770 phim, lớn nhất thời đó.
Team AT&T Labs dẫn đầu với SVD cải tiến + RBM. Chưa đủ 10%, cần thêm model.
BellKor + BigChaos + Pragmatic Theory = BellKor's Pragmatic Chaos. Tận dụng model của nhau, rút ngắn đường đến 10%.
BellKor's Pragmatic Chaos nộp RMSE 0,8554. 20 phút sau, The Ensemble nộp kết quả bằng nhau. BellKor thắng vì sớm hơn. 800+ model, câu chuyện kinh điển của stacking.
Code pattern Grandmaster gói gọn stacking trong 12 dòng
Đây là pattern chung cho stacking 2 tầng: out-of-fold prediction ở tầng 1, meta model ở tầng 2. Dòng quan trọng nhất là oof_preds, tức là prediction trên fold mà model chưa thấy.
from sklearn.model_selection import KFold
import numpy as np
kf = KFold(n_splits=5, shuffle=True, random_state=42)
oof_preds = np.zeros(len(X_train))
for tr_idx, va_idx in kf.split(X_train):
model = LGBMClassifier().fit(X_train[tr_idx], y_train[tr_idx])
oof_preds[va_idx] = model.predict_proba(X_train[va_idx])[:, 1]
meta_X = np.column_stack([oof_preds_xgb, oof_preds_lgbm, oof_preds_nn])
meta_model = LogisticRegression().fit(meta_X, y_train)
print("CV meta:", meta_model.score(meta_X, y_train))# Chọn 2 bài nộp đa dạng
safe_sub = big_ensemble.predict_proba(X_test)[:, 1]
risky_sub = small_focused_ensemble.predict_proba(X_test)[:, 1]
# Kiểm tra diversity bằng correlation, thấp tức là đa dạng tốt
correlation = np.corrcoef(safe_sub, risky_sub)[0, 1]
print(f"Correlation giữa 2 bài nộp: {correlation:.3f}")
print("OK nếu < 0.90. Nếu > 0.95, hai bài gần như giống nhau, chọn lại.")Con số thật
- Bài thắng Kaggle 4/2025 dùng stacking 3 tầng: 33 model tầng 1, chọn từ 500 thí nghiệm [2]
- Giải pháp cuối sử dụng 75 model tầng 1 đa dạng để tối đa hoá ensemble [2]
- Grandmaster Kazanova (top 3 Kaggle): 'Ensemble luôn thắng single model ở private leaderboard' [5]
- CV strategy đúng giúp tương quan cao giữa CV score và private leaderboard [6]
- Bellkor's Pragmatic Chaos dùng 800+ model để đạt RMSE 0,8554, thắng Netflix $1M [4]
Nếu không có Đánh giá và chọn mô hình, app sẽ ra sao?
Không có chiến thuật đánh giá, bạn huấn luyện một model, thấy public LB cao, tự tin nộp bài, rồi rớt hàng trăm bậc khi private công bố. Đây là shakeup: model đã overfit phần public test mà bạn không biết.
Cross-validation nội bộ là la bàn đáng tin: đánh giá model trên nhiều fold, không phụ thuộc leaderboard. Ensemble stacking giảm variance dự đoán, như hỏi ý kiến 100 chuyên gia thay vì một. Final submission diversity đảm bảo không “bỏ trứng vào một giỏ.” Ba yếu tố này biến Kaggle từ trò may rủi thành khoa học có hệ thống, cũng chính là cách đánh giá và chọn mô hình hoạt động ở sản phẩm thật.
- Trust CV > public leaderboard. Public chỉ là 25% test, overfit nó là dính shakeup.
- Ensemble stacking: tầng 1 đa dạng kiến trúc, tầng 2 kết hợp qua meta model, dùng out-of-fold predictions để tránh leak.
- Metric là ngôi sao Bắc Đẩu, hiểu cuộc thi đo gì TRƯỚC khi viết dòng code đầu tiên.
- Hai bài nộp cuối phải ĐA DẠNG: một an toàn, một mạo hiểm. Correlation giữa hai submission nên dưới 0,90.