AI Core cho lập trình viên
2/54
Bài 2 / 54~13 phútBản đồ AI & học từ dữ liệuMiễn phí… lượt xem

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 việc 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à một cách khác để giải bài toán: thay vì viết luật, bạn đưa cho model training data (dữ liệu huấn luyện) đã có sẵn đáp án đúng để nó tự rút ra pattern. Cái giá là model 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, đứng yên và 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 với engineer: bug giờ có thể nằm trong tập huấn luyện chứ không nằm trong code, và 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 là viết luật. Giao dịch trên 50 triệu thì gắn cờ; nửa đêm mà số tiền kha khá thì gắn cờ; quẹt ở quốc gia lạ so với thói quen chủ thẻ thì gắn cờ. Tuần đầu, 8 luật đã bắt được phần lớn ca gian lận lộ liễu.

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. Team không làm ẩu. Đây 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 vào nghề và thẩm định viên 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 cỡ X thì kiểm tra, khách đi một mình sau 11 giờ đêm thì hỏi giấy tờ. Checklist chạy tốt khi người viết đã lường trước gần hết tình huống.

Người thẩm định gian lận 15 năm thì không tra checklist nào. Họ nhìn một hồ sơ và thấy "có gì đó không ổn" dù hồ sơ không khớp quy tắc nào từng viết ra. Trực giác ấy đến từ hàng chục nghìn hồ sơ thật đã qua tay, hồ sơ nào cũng biết kết cục. Chẳng ai lập trình cho họ luật "nếu X thì gian lận"; họ tự rút ra pattern từ ví dụ.

Đời thườngMachine learning
Checklist viết sẵn cho bảo vệ mớiRule-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ựuModel học pattern từ training data, tập ví dụ đã biết đáp án
Checklist đọc, sửa được từng dòngTrực giác không tách được thành từng luật để đọ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ách nhớ

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. Vì sao học từ dữ liệu là đánh đổi chứ 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 từ gốc: rule-based và học từ dữ liệu là hai cách khác nhau để tạo ra hành vi cho chương trình, và chọn cái nào là một đánh đổi chứ không phải leo 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:

Plain Text
function la_giao_dich_dang_ngo(giao_dich, tai_khoan):
    if giao_dich.so_tien > 50_000_000: return true            -- luật 1: tiền lớn
    if gio_dem(giao_dich.gio) and giao_dich.so_tien > 5_000_000:
        return true                                            -- luật 2: khuya + tiền khá
    if giao_dich.quoc_gia != tai_khoan.quoc_gia_thuong_dung:
        return true                                            -- luật 3: quốc gia lạ
    -- ... còn 197 luật nữa, mỗi luật vá một ca thật từng lọt lưới
    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ỏ. Đến 200 luật chồng chéo không ai dám xoá thì chẳng còn gì minh bạch nữa.

Với học từ dữ liệu, kỹ sư thôi viết luật "gian lận là gì". Họ đưa model hàng chục nghìn giao dịch cũ đã gắn nhãn gian lận hay hợp lệ, để model tự tìm pattern phân biệt hai nhóm. Model suy ra luật từ ví dụ, và không dòng nào đọc được thành "nếu X thì Y" như code viết tay.

Cái giá nằm ở đó: bạn đổi luật minh bạch lấy một hộp đen thống kê. Nó đú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. Ba câu hỏi nào quyết định có nên học từ dữ liệu?

Áp ba 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à đứng yên không? Không. Kẻ gian đổi chiêu liên tục, chiêu mới ra đời ngay khi chiêu cũ bị chặn. Chiêu phổ biến hôm nay có thể khác hẳn sáu tháng nữa, nên tập luật viết tay nào cũng sẽ lỗi thời, còn model thì học lại được khi có dữ liệu mới. Đây là câu duy nhất có thể đẩy thẳng bài toán về rule-based.

(b) Có đủ ví dụ đã biết đáp án 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 hay hợp lệ qua khiếu nại, hoàn tiền, xác minh thủ công. Nếu câu trả lời là "chưa", bạn vẫn chưa thể học: chạy heuristic viết tay trước, vừa chạy vừa gom nhãn.

(c) Mỗi quyết định có phải truy về đúng một điều khoản không? Chỉ ở mức vừa phải. Khi khách khiếu nại cần giải thích được vì sao giao dịch bị chặn, nhưng không ai đòi truy từng quyết định về một điều khoản như khi tính lãi suất. Nếu có vài ca bắt buộc như vậy, đội thường xây hệ lai: model ra quyết định chính, cộng vài luật cứng cho đúng những ca đó.

Kết luận không phải "học từ dữ liệu luôn thắng". Chỉ câu (a) có quyền trả bài toán về rule-based; hai câu còn lại quyết định bạn học ngay, học sau, hay học kèm luật cứng.

Cây quyết định ba câu hỏi: luật viết ra được và đứng yên thì rule-based; chưa đủ ví dụ đã biết đáp án thì chạy heuristic tay và gom nhãn dần; mỗi quyết định phải truy về điều khoản thì làm hệ lai model cộng luật cứng; qua cả ba thì học từ dữ liệu

4. Bảng quyết định

Tình huốngNên dùngVì sao
Tính lãi suất, hạn mức vay, biểu phí, thuếRule-basedLuậ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 từng quyết định về đúng một điều khoảnRule-based hoặc hệ laiModel 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 tinHeuristic tay, gom nhãnModel học từ vài trăm ví dụ dễ nhầm nhiễu thành pattern
Lọc spam, phát hiện gian lận, gợi ý nội dungHọc từ dữ liệuLuật ngầm, nhiều ngoại lệ, đối thủ đổi chiêu liên tục
Thế nào là "đúng" trôi theo thời gian hoặc theo hành vi người dùngHọc từ dữ liệuLuật viết tay phải sửa mỗi lần lỗi thời; model học lại được khi có dữ liệu mới

5. Luật không biến mất, nó chuyển nhà

Đây là chỗ dễ nghĩ sai nhất khi mới đụng tới machine learning: học từ dữ liệu không xoá luật đi, nó 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. Giả sử đa số ca "gian lận" trong tập đó tình cờ 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 giờ có thể nằm trong tập huấn luyện chứ không nằm trong code. Đọc lại mấy dòng gọi model không tìm ra gì, vì code không sai. Code review cũng không bắt được, vì reviewer đọc diff code chứ đâu đọc hàng chục nghìn dòng dữ liệu. Câu hỏi debug đúng lúc này là: dữ liệu huấn luyện có đại diện đúng thực tế không? Đó là một kỹ năng khác hẳn đọc code.

Thử ngẫmnếu phần lớn hồ sơ "đáng ngờ" trong dữ liệu huấn luyện tình cờ đều nộp vào cuối tuần, model học ra điều gì, và đọc lại code chấm điểm rủi ro có phát hiện ra không?

6. Pitfall tổng hợp

❌ Nhầm 1: coi machine learning là "code thông minh hơn if-else". ✅ Đó là một cách giải bài toán khác hẳn, đổi minh bạch lấy khả năng bắt pattern ngầm. Không hướng nào cao cấp hơn tuyệt đối.

❌ Nhầm 2: nghĩ rule-based lạc hậu, có dữ liệu là nên chuyển sang học. ✅ 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, dù dữ liệu lịch sử nhiều cỡ nào.

❌ Nhầm 3: nghĩ bug trong hệ 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 so với thực tế. Đọc code không tìm ra.

7. Đào sâu

📚 Nguồn gốc: đọc khi muốn xuống tầng sâu hơn

Tài liệu chính chủ:

  • Google, Rules of Machine Learning, Rule #1 (Martin Zinkevich): đừng ngại ship sản phẩm chưa có machine learning, vì heuristic viết tay thường đạt khoảng nửa hiệu quả của một hệ học từ dữ liệu. Khớp với lối "heuristic tay, gom nhãn dần" ở mục 3.
  • 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 thêm rủi ro riêng như entanglement và hidden feedback loop. Đây là 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

9. Tóm tắt

  • Chỉ câu "luật có viết ra được và đứng yên không" mới đẩy thẳng bài toán về rule-based; thiếu nhãn hay cần truy điều khoản chỉ đổi cách làm.
  • 200 luật chồng chéo không ai dám xoá là triệu chứng, không phải lỗi của team: luật ngầm không liệt kê hết được.
  • Chọn học từ dữ liệu là chấp nhận hộp đen thống kê; cần giải thích từng quyết định thì tính tới hệ lai.
  • Tập huấn luyện lệch sinh ra luật ngầm sai (ví dụ "cuối tuần đáng ngờ") mà không dòng code nào chứa nó.

10. Tự kiểm tra

Tự kiểm tra
0/5 câu đã trả lời
  1. Q1
    Vì 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?
  2. Q2
    Trong bài toán gian lận thẻ, câu hỏi (c) về việc truy quyết định về điều khoản chỉ ở mức vừa phải. Vì sao nó không chặn việc chuyển sang học từ dữ liệu, và nó gợi ý thiết kế gì?
  3. Q3
    Một fintech khác định dùng model học từ dữ liệu để tự động tính phí phạt trả chậm theo hợp đồng vay. Bạn khuyên gì?
  4. Q4
    Vì sao câu 'model 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 nhắc tới nhóm đó?
  5. Q5
    Vì 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?

Bài tiếp theo: Ba kiểu học: model biết mình đúng sai nhờ đâu

Bài này có giúp bạn hiểu bản chất không?

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.

Thảo luận & góp ý

Hỏi đáp về bài này

Bài tiếp theo

Ba kiểu học: phân biệt bằng tín hiệu dạy model