Model Evaluation & Selection in Kaggle
Chọn mô hình trong Kaggle
Công ty nào đang ứng dụng Đánh giá và chọn mô hình?
Kaggle (nền tảng thi đấu khoa học dữ liệu của Google) là đấu trường 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, và 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 một chiến thuật nhất đị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 diversity). Ba tính cách — 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: tránh các đội tune tham số chỉ theo public.
Hiện tượng leaderboard shakeup là 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, leo vài chục bậc. Làm thế nào biết model thực sự tốt hay chỉ may mắn? Làm thế nào chọn đúng 2 bài nộp cuối từ hàng trăm thí nghiệm? Đây là câu chuyện của đánh giá và chọn mô hình ở độ 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 — 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 — metric quyết định loss function nào để train, 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 — 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 3 tầng: tầng 1 gồm 33 model, tầng 2 có 3 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 — diversity is everything. Kaggle cho phép 2 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 — mất lợi thế đa dạng. Quyết định này thường phân biệt top 10 và top 100.
Thử tự tay
Gấu vs Cáo vs Cú — mô phỏng 8 tuần Kaggle
Nhấn Chạy mô phỏng để xem ba chiến thuật đua trên public leaderboard suốt 8 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, 3 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ường dao động nhẹ 2-5 bậc.
Chậm ở public nhưng CV nội bộ rất tốt. Cuối cùng nộp 1 ensemble an toàn + 1 ensemble mạo hiểm. Private revealed, 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 — 3 tầng của bài thắng Kaggle 2025
Grandmaster không chỉ train 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 3 tầng — bấm từng tầng để tìm hiểu
Mỗi model học 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ì cần lỗi độc lập để ensemble 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, private 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 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 chấm chiến thuật của bạn.
Chọn đúng 2 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 2 bài làm 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 — train quá khứ, validate 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 đã hiểu 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 — 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 — 12 dòng core của stacking
Đâ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 — 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 = đ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 train 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ó = 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.