Overfitting & data leakage: demo đẹp mà production hỏng
Model thuộc lòng tập huấn luyện thì đo rất đẹp trên chính tập đó. Cộng data leakage, bạn có một con số vô nghĩa mà không ai phát hiện tới lúc lên production.
TL;DR: Model đo đẹp trên tập huấn luyện nhưng tệ trên dữ liệu mới đang overfitting — nó thuộc lòng thay vì học quy luật chung. Tệ hơn: nếu cả train lẫn validation đều đẹp mà production vẫn hỏng, nghi ngờ số một là data leakage — feature vô tình mang thông tin chỉ tồn tại sau khi đã biết đáp án, nên đo nội bộ đẹp giả tạo còn lúc chạy thật thông tin đó luôn trống. Nguyên tắc chẩn đoán: nhìn bộ ba train/validation/production, không nhìn một con số đơn lẻ — điểm càng đẹp bất thường càng đáng soát lại pipeline dữ liệu, không phải ăn mừng.
Đội bạn build model chấm điểm rủi ro giao dịch. Trên tập test giữ lại, model đạt độ chính xác cao ngất — deploy production ngay tuần đó. Một tháng sau, đội gian lận báo cáo model bỏ lọt phần lớn ca gian lận thật, còn báo động nhầm hàng loạt giao dịch bình thường, dù không ai đổi code hay hạ tầng. Điều gì đã sai giữa lúc đo và lúc chạy thật?
Bài này cho bạn quy trình chẩn đoán: đọc ba con số train/validation/production để phân biệt hai nguyên nhân phổ biến nhất khiến "đo đẹp mà chạy hỏng" — overfitting và data leakage.
Train và validation đo ngay trong hoặc sát pha train. Production là lần đầu model chạy inference thật, trên dữ liệu chưa ai chuẩn bị sẵn. Overfitting và leakage bắt nguồn ở pha train, nhưng theo đúng ranh giới cứng bài 04 đã nói, hậu quả chỉ lộ khi model bước sang pha inference.
1. Analogy — học thuộc đề thi cũ vs hiểu bài
Có hai cách chuẩn bị cho kỳ thi: học thuộc lòng đúng đề năm ngoái (làm lại đạt điểm tuyệt đối), hoặc hiểu bản chất bài học. Khác biệt chỉ lộ ra khi gặp đề mới: người học thuộc trượt thảm, người hiểu bài vẫn làm được.
Model overfitting làm đúng việc người học thuộc đề làm: nó không học quy luật sinh ra nhãn, mà học thuộc từng điểm dữ liệu trong tập train — kể cả nhiễu vô nghĩa. Đề cũ và đề mới, với model, chính là tập train và dữ liệu thật lúc chạy production.
| Đời thường | Model học |
|---|---|
| Học thuộc đúng đề năm ngoái | Model khớp gần như hoàn hảo với tập train |
| Làm lại đúng đề đó — điểm tuyệt đối | Đo trên tập train — độ chính xác rất cao |
| Gặp đề mới — trượt | Gặp dữ liệu production chưa từng thấy — sai nhiều |
| Người hiểu bài làm tốt cả đề cũ lẫn đề mới | Model generalize tốt — đo ổn trên cả train lẫn dữ liệu mới |
Overfitting là học thuộc, không phải học hiểu. Điểm cao trên đúng những gì đã thấy không chứng minh được gì về những gì chưa thấy.
2. Thử đoán trước khi đọc tiếp
Quay lại model chấm điểm rủi ro giao dịch. Giả sử đội đo được ba scenario dưới đây — số liệu ví dụ giả định, không phải benchmark thật:
| Scenario | Độ chính xác — train | Độ chính xác — validation | Độ chính xác — production |
|---|---|---|---|
| A | 98% | 61% | 58% |
| B | 96% | 95% | 52% |
| C | 54% | 52% | 50% |
Với mỗi scenario, bạn chẩn đoán model đang gặp vấn đề gì, và dựa vào đâu trong ba con số? Viết ra cho cả ba trước khi đọc phần chẩn đoán bên dưới.
3. Bảng chẩn đoán theo triệu chứng
Ba con số, đọc đúng thứ tự, kể câu chuyện khác nhau tuỳ tổ hợp cao/thấp:
| Triệu chứng | Chẩn đoán |
|---|---|
| Train cao, validation thấp | Overfitting — model thuộc lòng tập train, chưa generalize |
| Train cao, validation cao, production tệ | Nghi data leakage hoặc dữ liệu production lệch phân phối với dữ liệu huấn luyện |
| Train thấp (validation cũng thấp theo) | Underfit — model chưa học được quy luật gì cả, vấn đề khác hẳn hai trường hợp trên |
Đối chiếu lại ba scenario ở mục 2:
- Scenario A (98% / 61% / 58%) — train cao, validation thấp: đúng khuôn overfitting. Model khớp gần hoàn hảo với tập train nhưng rớt mạnh ngay khi gặp dữ liệu validation nó chưa thấy.
- Scenario B (96% / 95% / 52%) — train cao, validation cũng cao, nhưng production lại tệ: đây là ca đáng ngại nhất, vì validation không hề tố cáo vấn đề. Mục 4 và 5 mổ xẻ nguyên nhân.
- Scenario C (54% / 52% / 50%) — train đã thấp ngay từ đầu: model chưa học được quy luật nào. Đây là underfit, nguyên nhân và cách sửa khác hẳn overfitting — bài này không đi sâu, chỉ cần nhận diện đúng để không áp nhầm cách sửa.
Sơ đồ chẩn đoán gộp cả ba nhánh:

Overfitting lộ ra ngay ở bước validation; data leakage thì không — nó qua mặt cả hai lớp kiểm tra nội bộ, chỉ lộ khi chạm dữ liệu thật.
4. Data leakage — vì sao validation cũng bị lừa
Data leakage (rò rỉ dữ liệu) là khi một feature vô tình mang thông tin chỉ có sau khi đáp án đã biết. Model không "gian lận" cố ý — nó chỉ tìm quy luật thống kê mạnh nhất trong feature được đưa vào, dù đó là một lối tắt vô dụng.
Quay lại ví dụ chấm điểm rủi ro giao dịch: giả sử bảng feature có cột "trạng thái tranh chấp" — chỉ được điền sau khi khách hàng khiếu nại, tức sau khi đã biết chắc giao dịch đó có gian lận hay không. Model học được quy luật gần như hoàn hảo: "có trạng thái tranh chấp thì gần chắc là gian lận" — đúng tuyệt đối trong dữ liệu lịch sử, vì kết quả có sẵn rồi mới điền cột đó. Nhưng lúc chạy thật, giao dịch vừa xảy ra thì cột này luôn rỗng — thông tin model dựa vào không tồn tại đúng thời điểm cần dự đoán.
Cột leak có mặt đều trong cả train lẫn validation (cùng lấy từ một kho dữ liệu lịch sử) nên validation không phát hiện gì — đúng scenario B ở mục 2. Production là nơi duy nhất cột đó trống, và cũng là nơi vấn đề lộ ra.
5. Data leakage qua đường tiền xử lý
Leakage còn len vào qua thứ tự làm việc với dữ liệu, không chỉ qua một cột "biết trước tương lai": tính bất cứ thống kê nào trên toàn bộ dữ liệu (chuẩn hoá, điền thiếu, chọn feature) trước khi tách train/validation/test là đã trộn ngược thông tin từ phần "chưa từng thấy" vào phần train.
Bài 03 đã nói luật cốt lõi: train, validation và test phải được tách trước khi chạm vào dữ liệu — trước cả bước chuẩn hoá hay xử lý sơ bộ, chứ không chỉ trước bước train. Đây chính là hàng rào chặn kiểu leakage qua tiền xử lý: tách đúng thứ tự thì validation và test giữ được đúng vai trò "dữ liệu chưa từng thấy".
Vi phạm này tinh vi hơn cột "trạng thái tranh chấp" ở mục 4 — lỗi nằm ở quy trình, không ở feature. Nguyên tắc chung cho cả hai kiểu leakage: tự hỏi "thông tin này có sẵn, đúng thời điểm cần dự đoán khi chạy production không?" — không thì là leakage.
6. Vì sao điểm số đẹp bất thường là tín hiệu đáng ngờ?
Trực giác tự nhiên khi thấy độ chính xác cao là ăn mừng — với model, cần đảo ngược: một con số cao vượt kỳ vọng là tín hiệu đi soát lại pipeline dữ liệu trước, ăn mừng sau. So với baseline đơn giản, bài toán này có thật "khó" cỡ đó không? Điểm cao hơn hẳn mức hợp lý thường là leakage cho model một lối tắt, không phải model đột nhiên giỏi.
7. Pitfall tổng hợp
❌ Nhầm 1 — thấy train và validation đều cao là yên tâm deploy:
✅ Điều kiện cần, không phải điều kiện đủ (mục 6) — cả hai đo trên cùng một kho lịch sử, kho đó chứa leakage thì cả hai con số bị lừa như nhau.
❌ Nhầm 2 — validation thấp thì luôn kết luận overfitting:
✅ Chỉ đúng khi train cao. Train cũng thấp là underfit — vấn đề khác hẳn, cách sửa khác hẳn. Đọc cả ba con số theo đúng thứ tự trong bảng chẩn đoán, đừng chỉ nhìn validation một mình.
❌ Nhầm 3 — nghĩ tách train/validation/test là đã miễn nhiễm với leakage:
✅ Tách tập chỉ chặn leakage nếu làm đúng thứ tự — trước mọi bước tiền xử lý, không chỉ trước bước train (mục 5). Tách sai thứ tự, hoặc có feature "biết trước tương lai" (mục 4), vẫn leak dù ba tập đã chia riêng.
8. 📚 Deep Dive
Tài liệu chính chủ:
- Google ML Crash Course — Overfitting — định nghĩa chính chủ: overfitting là model khớp tập train chặt tới mức dự đoán sai trên dữ liệu mới; trang này cũng mô tả đúng cặp đường loss train/validation rẽ nhánh — dấu hiệu chẩn đoán dùng ở mục 3.
- Kaufman, Rosset, Perlich — "Leakage in Data Mining: Formulation, Detection, and Avoidance" — paper kinh điển (KDD 2011, mở rộng ACM TKDD 2012) gọi leakage là "một trong mười lỗi data mining phổ biến nhất", đề xuất "learn-predict separation" — chính luật tách-trước ở bài 03.
Ghi chú: hai nguồn không dạy công cụ cụ thể — chỉ khái niệm nền: đo overfitting bằng đường loss, phòng leakage bằng tách quy trình.
9. Liên hệ các bài khác
- Bài 03 — Dữ liệu, nhãn và ba tập không được trộn — hàng rào chính chặn leakage qua tiền xử lý (mục 5).
- Bài 04 — Train vs inference — vì sao lỗi này chỉ lộ khi model chạy thật (Recall đầu bài).
- Mini-challenge — đọc mô tả một hệ AI — luyện chẩn đoán đúng loại lỗi bằng bảng ở bài này.
10. Tóm tắt
- Đọc ba con số theo đúng thứ tự train/validation/production — không nhìn một con số đơn lẻ.
- Train thấp là underfit — model chưa học được gì kể cả trên dữ liệu nó đã thấy.
- Leakage có hai dạng: feature chứa thông tin chỉ có sau khi biết đáp án, hoặc tiền xử lý tính trên toàn bộ trước khi tách tập.
- Leakage nguy hiểm hơn overfitting vì qua mặt được cả validation — chỉ lộ khi chạm dữ liệu thật.
11. Tự kiểm tra
Q1Vì sao train cao kết hợp validation thấp là dấu hiệu overfitting, chứ không phải dấu hiệu tốt?▸
Model đo đẹp trên train vì nó đã "nhìn thấy" đúng những điểm dữ liệu đó lúc học — kể cả nhiễu không mang tín hiệu thật. Validation là dữ liệu chưa từng thấy, nên điểm rớt mạnh ở đó chứng tỏ thứ model học được không generalize — nó thuộc lòng chứ không hiểu quy luật.
Q2Một model đạt độ chính xác cao gần như nhau trên cả train lẫn validation, nhưng production tệ hẳn. Vì sao đây không phải overfitting, và bạn nghi ngờ điều gì trước tiên?▸
Overfitting lộ ra ở bước validation — nhưng ở đây validation cũng đẹp, tức là bài kiểm tra "dữ liệu chưa từng thấy" không tố cáo vấn đề. Nghi ngờ số một là data leakage: feature hoặc bước tiền xử lý mang thông tin không sẵn có tại thời điểm production cần dự đoán, và thông tin đó có mặt đều trong cả train lẫn validation vì cùng lấy từ một kho dữ liệu lịch sử.
Q3Vì sao cột 'trạng thái tranh chấp' trong bài toán chấm điểm gian lận là một ca leakage, dù về mặt thống kê nó dự đoán rất chính xác?▸
Cột đó chỉ được điền sau khi khách hàng đã khiếu nại — tức sau khi đáp án (giao dịch có gian lận hay không) đã biết. Model học được quy luật đúng tuyệt đối trong dữ liệu lịch sử, nhưng lúc chạy thật, giao dịch vừa xảy ra thì cột đó luôn rỗng. Thông tin model dựa vào không tồn tại đúng vào thời điểm cần dự đoán — đó là định nghĩa của leakage, không phải một feature hữu ích.
Q4Luật 'tách train/validation/test trước khi chạm vào dữ liệu' ở bài 03 giúp chặn kiểu leakage nào, và vì sao chỉ tách tập thôi chưa đủ để miễn nhiễm hoàn toàn?▸
Nó chặn leakage qua tiền xử lý: chuẩn hoá hay điền giá trị thiếu tính trên toàn bộ dữ liệu trước khi tách sẽ trộn ngược thông tin từ phần "chưa từng thấy" vào phần train. Nhưng nó không chặn được kiểu leakage do một feature tự mang thông tin tương lai (như cột trạng thái tranh chấp) — cột đó vẫn có mặt bình thường trong cả ba tập dù tách đúng thứ tự, vì hai kiểu leakage cần hai cách phòng khác nhau.
Q5Một model đạt độ chính xác thấp trên cả tập train lẫn validation. Đây là loại lỗi gì, và vì sao áp cách sửa overfitting (như thu nhỏ model, thêm regularization) vào đây là sai hướng?▸
Đây là underfit — model chưa học được quy luật gì kể cả trên dữ liệu nó đã thấy lúc train. Các kỹ thuật sửa overfitting làm model dè dặt hơn khi khớp dữ liệu, trong khi vấn đề gốc của underfit là model (hoặc feature) chưa đủ sức nắm bắt tín hiệu — áp kỹ thuật dè dặt hơn vào đây chỉ làm model càng yếu.
Q6Vì sao một độ chính xác cao bất thường nên khiến bạn nghi ngờ trước khi ăn mừng, thay vì coi đó là bằng chứng model tốt?▸
Nếu độ chính xác vượt xa mức hợp lý so với độ khó thật của bài toán, khả năng cao model đang có một lối tắt — thường là leakage — chứ không phải đột nhiên giỏi hơn kỳ vọng. Vì leakage qua mặt được cả train lẫn validation (mục 4–5), điểm đẹp không tự chứng minh được gì; cách kiểm chứng đúng là soát lại từng feature và từng bước tiền xử lý xem có dùng thông tin không sẵn có tại thời điểm dự đoán thật hay không.
Bài tiếp theo: LLM trên bản đồ
Bài này đáng gửi cho bạn học cùng?
Copy link đã gắn nguồn — dán group, chat, hoặc LinkedIn.
Bài này có giúp bạn hiểu bản chất không?
Hỏi đáp về bài này
Chưa có câu hỏi
Có gì chưa rõ trong bài? Đặt câu hỏi đầu tiên — câu trả lời từ cộng đồng giúp bạn (và người sau).
Đặt câu hỏi đầu tiên