Khi nào cần học từ dữ liệu, khi nào if-else vẫn thắng
Machine learning không phải bản nâng cấp của code thường — nó đổi cách viết luật lấy chi phí dữ liệu, và có cả một lớp bài toán rule-based vẫn thắng.
TL;DR: Machine learning (học máy) không phải bản nâng cấp của code thường — nó là cách khác để giải bài toán: thay vì viết luật, model học pattern từ training data (dữ liệu huấn luyện) đã có sẵn đáp án đúng. Cái giá là model trở thành hộp đen thống kê, khó giải thích từng quyết định. Rule-based thắng khi luật viết ra được, ổn định, cần audit trail; học từ dữ liệu thắng khi luật ngầm, nhiều ngoại lệ, trôi theo thời gian. Hệ quả lớn nhất: bug từ nay có thể nằm trong tập huấn luyện, không nằm trong code — đọc code hay code review không bắt được nó.
Một đội backend ở fintech nhận nhiệm vụ: phát hiện giao dịch thẻ bất thường trước khi tiền rời tài khoản. Cách làm quen tay: viết luật. Giao dịch trên 50 triệu thì gắn cờ; lúc nửa đêm mà số tiền kha khá thì gắn cờ; từ quốc gia lạ so với thói quen của chủ thẻ thì gắn cờ. Tuần đầu, 8 luật đã bắt được phần lớn ca gian lận rõ ràng.
Sáu tháng sau, con số đó là 200 luật chồng chéo — luật mới vá từng ca lọt lưới, luật cũ không ai dám xoá vì không rõ nó đang che ca nào. Đây không phải team làm ẩu, mà là triệu chứng của một lớp bài toán mà luật viết tay không bao giờ liệt kê hết được.
1. Analogy — bảo vệ mới việc và nhân viên thẩm định kỳ cựu
Nhân viên bảo vệ mới vào nghề được phát một checklist: túi to hơn kích cỡ X thì kiểm tra, khách đi một mình sau 11 giờ đêm thì hỏi giấy tờ. Checklist hoạt động tốt khi người viết đã lường trước gần hết tình huống.
Nhân viên thẩm định gian lận kỳ cựu 15 năm lại không tra checklist nào. Họ nhìn một hồ sơ và thấy "có gì đó không ổn" dù không khớp quy tắc nào từng viết ra — trực giác này tới từ việc đã xem qua hàng chục nghìn hồ sơ thật, biết đáp án đúng của mỗi hồ sơ. Không ai lập trình luật "nếu X thì gian lận" cho họ; họ tự rút pattern từ ví dụ.
| Đời thường | Machine learning |
|---|---|
| Checklist viết sẵn cho bảo vệ mới | Rule-based: luật do người viết tay, tường minh |
| Trực giác của thẩm định viên kỳ cựu | Model học pattern từ training data — tập ví dụ đã biết đáp án đúng |
| Checklist đọc, sửa được từng dòng | Trực giác không tách được thành luật riêng lẻ để đọc |
| Bảo vệ mới bó tay trước tình huống lạ | Thẩm định viên vẫn nhận ra ca lạ nhờ pattern học được |
Checklist là luật viết tay — đọc được, sửa được, nhưng chỉ giỏi việc đã lường trước. Trực giác kỳ cựu là pattern học từ ví dụ — bắt được ca lạ, nhưng không đọc ra được "vì sao" như checklist.
2. Học từ dữ liệu là đánh đổi, không phải nâng cấp
Dễ nghĩ machine learning là "code thông minh hơn" — bản nâng cấp của if-else. Cách nghĩ đó sai ở gốc: rule-based và học từ dữ liệu là hai cách khác nhau để tạo hành vi cho một chương trình; chọn cái nào là một đánh đổi, không phải bậc thang.
Với rule-based, kỹ sư quan sát bài toán, rút ra luật, rồi gõ thành code:
function la_giao_dich_dang_ngo(giao_dich, tai_khoan):
if giao_dich.so_tien > 50_000_000: return true -- luat 1: tien lon
if gio_dem(giao_dich.gio) and giao_dich.so_tien > 5_000_000:
return true -- luat 2: khuya + tien kha kha
if giao_dich.quoc_gia != tai_khoan.quoc_gia_thuong_dung:
return true -- luat 3: quoc gia la
-- ... con 197 luat nua, moi luat va mot ca that tung lot luoi
return false
Mỗi dòng luật là một quyết định con người đọc, giải thích, sửa được — điểm mạnh thật của rule-based là minh bạch. Nhưng minh bạch chỉ giữ được khi số luật còn nhỏ; 200 luật chồng chéo không ai dám xoá là minh bạch đã sụp.
Với học từ dữ liệu, kỹ sư không viết luật "gian lận là gì" nữa. Họ đưa model hàng chục nghìn giao dịch cũ đã gắn nhãn đúng — gian lận hay hợp lệ — để model tự tìm pattern phân biệt hai nhóm. Model không được lập trình luật; nó suy ra luật từ ví dụ, không dòng nào đọc được thành "nếu X thì Y" như code viết tay.
Đây chính là cái giá: đổi luật minh bạch lấy việc cung cấp ví dụ, nhận về một hộp đen thống kê — đúng trên phân bố dữ liệu đã thấy, nhưng không ai chỉ ra được "quyết định này tới từ đâu" theo cách đọc một dòng if-else.
3. Bốn câu hỏi quyết định: khi nào chọn học từ dữ liệu?
Áp bốn câu hỏi này vào bài toán gian lận thẻ ở đầu bài:
(a) Luật có viết ra được và ổn định không? Không — kẻ gian đổi chiêu liên tục, chiêu mới sinh ra ngay khi chiêu cũ bị chặn, không tập luật hữu hạn nào phủ hết.
(b) Có đủ ví dụ đã biết đáp án đúng không? Có — hệ thống lâu năm đã tích luỹ hàng chục nghìn giao dịch được xác nhận gian lận hoặc hợp lệ qua khiếu nại, hoàn tiền, xác minh thủ công.
(c) Sai thì hậu quả ra sao, có bắt buộc giải thích được từng quyết định không? Cần một mức giải thích được khi khách khiếu nại, nhưng không đòi minh bạch tuyệt đối tới từng luật.
(d) Luật có trôi theo thời gian không? Có, mạnh — chiêu gian lận phổ biến hôm nay có thể khác hẳn sáu tháng nữa. Luật viết tay sẽ lỗi thời; model học lại được khi có dữ liệu mới.
Ba trên bốn trục nghiêng về học từ dữ liệu; trục (c) không phủ quyết — nên nhiều đội xây hệ lai: model ra quyết định chính, cộng vài luật cứng cho ca bắt buộc minh bạch tuyệt đối. Kết luận không phải "học từ dữ liệu luôn thắng" mà là bốn câu hỏi cho thấy trục nào đang kéo bạn về phía nào.

4. Bảng quyết định
| Tình huống | Nên dùng | Vì sao |
|---|---|---|
| Tính lãi suất, hạn mức vay, biểu phí, thuế | Rule-based | Luật do pháp luật/hợp đồng quy định sẵn, phải khớp chính xác điều khoản |
| Cần audit trail truy được từng quyết định về đúng một điều khoản | Rule-based | Model không tách được quyết định thành một điều khoản cụ thể |
| Dữ liệu lịch sử ít, chưa đủ ví dụ đáng tin | Rule-based | Model học từ vài trăm ví dụ dễ học nhầm nhiễu thành pattern |
| Lọc spam, phát hiện gian lận, gợi ý nội dung | Học từ dữ liệu | Luật ngầm, nhiều ngoại lệ, đối thủ đổi chiêu liên tục |
| Bài toán mà "đúng" trôi theo thời gian hoặc theo hành vi người dùng | Học từ dữ liệu | Rule-based cần sửa tay mỗi lần lỗi thời; model học lại được khi có dữ liệu mới |
5. Điểm đắt nhất: luật không biến mất, nó chuyển nhà
Đây là điều dễ nghĩ sai nhất khi mới tiếp cận machine learning: học từ dữ liệu không loại bỏ luật, nó chỉ dời luật từ code sang dữ liệu.
Với rule-based, "luật" nằm tường minh trong code. Với học từ dữ liệu, "luật" nằm ẩn trong tập ví dụ đã gắn nhãn mà model học từ đó. Tập ví dụ lệch — ví dụ đa số ca "gian lận" tình cờ đều rơi vào cuối tuần, thuần tuý vì lịch làm việc của đội xác minh thủ công — model sẽ học ra một "luật" ngầm sai: cuối tuần đáng ngờ hơn. Không ai viết luật đó; nó tự sinh ra từ cách dữ liệu được thu thập.
Hệ quả với engineer: bug bây giờ có thể nằm trong tập huấn luyện, không nằm trong code. Đọc lại vài dòng gọi model không tìm ra vấn đề, vì code không sai; code review cũng không bắt được, vì reviewer đọc diff code chứ không đọc qua hàng chục nghìn dòng dữ liệu huấn luyện. Câu hỏi debug đúng trở thành: dữ liệu huấn luyện có đại diện đúng thực tế không — một kỹ năng khác hẳn đọc code.
6. Pitfall tổng hợp
❌ Nhầm 1 — coi machine learning là "code thông minh hơn if-else": ✅ Đó là cách giải bài toán khác hẳn, đánh đổi minh bạch lấy khả năng bắt pattern ngầm — không có hướng nào cao cấp hơn tuyệt đối.
❌ Nhầm 2 — nghĩ rule-based lạc hậu, cứ có dữ liệu là nên chuyển sang học từ dữ liệu: ✅ Bài toán mà luật do pháp luật/hợp đồng quy định hoặc cần audit trail tuyệt đối vẫn nên giữ rule-based.
❌ Nhầm 3 — nghĩ bug trong hệ thống học từ dữ liệu vẫn nằm ở code như cũ: ✅ Bug có thể nằm trong tập huấn luyện — cách dữ liệu được thu thập, gắn nhãn, hoặc lệch phân bố thực tế; đọc code không tìm ra.
7. Đào sâu
Tài liệu chính chủ:
- Google — Rules of Machine Learning, Rule #1 (Martin Zinkevich) — Rule #1 nói thẳng: đừng ngại ship sản phẩm chưa có machine learning, vì heuristic viết tay đạt được khoảng nửa hiệu quả một hệ học từ dữ liệu. Khớp bảng quyết định ở mục 4.
- Sculley et al., "Hidden Technical Debt in Machine Learning Systems" (NeurIPS 2015) — hệ học từ dữ liệu gánh nợ kỹ thuật của phần mềm thường, cộng rủi ro riêng như entanglement, hidden feedback loop — cơ sở cho luận điểm "bug dời từ code sang dữ liệu" ở mục 5.
8. Liên hệ các bài khác
- Bài 02 — Ba kiểu học — tách "học từ dữ liệu" nói chung ở bài này thành ba tín hiệu dạy model khác nhau.
- Bài 03 — Dữ liệu, nhãn và cách chia tập — trục (b) ở bài này mới nói tới số lượng ví dụ; bài 03 mổ xẻ chất lượng nhãn và cách chia tập.
- Bài 05 — Overfitting — hệ quả xa hơn của "luật nằm trong dữ liệu": tập huấn luyện có vấn đề khiến model học vẹt thay vì học đúng pattern.
- Bài 06 — LLM trên bản đồ — LLM là trường hợp cực đoan của học từ dữ liệu, huấn luyện trên lượng ví dụ khổng lồ.
- Mini-challenge — đọc mô tả một hệ AI — áp trực tiếp bốn câu hỏi quyết định vào một hệ thống mô tả bằng lời.
9. Tóm tắt
- Bốn câu hỏi chọn hướng: luật có ổn định và liệt kê hết được không, đủ ví dụ không, cần audit trail từng quyết định không, luật có trôi theo thời gian không.
- Chọn rule-based khi luật do pháp luật/hợp đồng quy định hoặc cần minh bạch tuyệt đối; chọn học từ dữ liệu khi luật ngầm, nhiều ngoại lệ, trôi theo thời gian.
- Điểm đắt nhất: học từ dữ liệu dời luật từ code vào dữ liệu — bug nằm trong tập huấn luyện, đọc code hay code review không bắt được.
- Hệ thống thực tế thường là lai: model ra quyết định chính, cộng vài luật cứng cho ca bắt buộc minh bạch tuyệt đối.
10. Tự kiểm tra
Q1Vì sao gọi machine learning là 'đánh đổi' thay vì 'nâng cấp' so với rule-based lại chính xác hơn?▸
Nâng cấp ngụ ý cùng cách làm nhưng tốt hơn; ở đây cách làm đổi hẳn — rule-based là kỹ sư viết luật tường minh, machine learning là model tự suy ra pattern từ ví dụ. Đánh đổi thật xảy ra: mất minh bạch (đọc được luật thành dòng if-else), đổi lấy khả năng bắt pattern ngầm con người không liệt kê hết được — nên không có hướng nào cao cấp hơn tuyệt đối, chỉ có hướng phù hợp hơn tuỳ bài toán.
Q2Đội gian lận thẻ trong bài áp bốn câu hỏi quyết định và ba trên bốn trục nghiêng về học từ dữ liệu. Trục nào không nghiêng hẳn, và vì sao nó không đủ để chặn quyết định chuyển sang học từ dữ liệu?▸
Trục (c) — yêu cầu giải thích quyết định. Hệ thống vẫn cần giải thích được lý do chặn khi khách khiếu nại, nhưng chỉ ở mức vừa phải, không phải truy mọi quyết định về đúng một điều khoản như tính lãi suất. Vì ràng buộc chỉ vừa phải, nó không phủ quyết ba trục còn lại — gợi ý một hệ lai: model ra quyết định chính, cộng vài luật cứng cho ca bắt buộc minh bạch tuyệt đối.
Q3Một fintech khác đang cân nhắc dùng model học từ dữ liệu để tự động tính phí phạt trả chậm dựa trên hợp đồng vay. Bạn khuyên gì, dựa trên bảng quyết định trong bài?▸
Giữ rule-based. Phí phạt trả chậm do điều khoản hợp đồng quy định sẵn — luật viết ra được, ổn định, và mỗi quyết định phải truy về đúng điều khoản khi khách hàng tranh chấp. Nhiều dữ liệu lịch sử không phải điều kiện đủ để chọn học từ dữ liệu; luật ổn định và yêu cầu audit tuyệt đối mới là yếu tố quyết định.
Q4Vì sao câu 'model học từ dữ liệu này đang phân biệt đối xử một nhóm khách hàng' có thể đúng dù không dòng code nào của hệ thống nhắc tới nhóm đó?▸
Vì luật không nằm trong code mà nằm ẩn trong tập ví dụ model học từ đó. Nếu dữ liệu huấn luyện lệch — ca 'đáng ngờ' tình cờ trùng một đặc điểm nào đó do cách thu thập dữ liệu — model học ra pattern lệch đó dù không ai lập trình nó. Đây là điểm đắt nhất của bài: bug chuyển từ code sang dữ liệu, đọc code hay code review không phát hiện ra.
Q5Vì sao 200 luật if-else chồng chéo (hook đầu bài) là dấu hiệu nên cân nhắc học từ dữ liệu, còn 10 luật tính biểu phí rõ ràng thì không?▸
200 luật chồng chéo là triệu chứng trục (a) thất bại: luật không viết ra được đầy đủ và ổn định, đội liên tục vá luật mới mà không dám xoá luật cũ. 10 luật biểu phí thì ít không phải vì chưa liệt kê hết, mà vì bài toán vốn hữu hạn và ổn định — vấn đề không nằm ở đếm số luật, mà ở việc luật đó có bản chất ổn định, liệt kê hết được hay không.
Bài tiếp theo: Ba kiểu học — tín hiệu nào dạy model
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