Tối ưu hóa quyết định với AI: Giải quyết bài toán Multi-Armed Bandit bằng Thompson Sampling

21 tháng 4, 2026·6 phút đọc

Bài viết này hướng dẫn cách xây dựng thuật toán Thompson Sampling bằng Python để giải quyết bài toán Multi-Armed Bandit. Thông qua mô phỏng thực tế, tác giả chứng minh phương pháp này vượt trội hơn so với việc chọn lựa ngẫu nhiên trong việc tối ưu hóa tỷ lệ mở email marketing.

Tối ưu hóa quyết định với AI: Giải quyết bài toán Multi-Armed Bandit bằng Thompson Sampling

Chúng ta đang sống trong thời đại hoàng kim của việc ra quyết định dựa trên dữ liệu. Các tổ chức không chỉ lưu trữ lượng khổng lồ thông tin mà còn phụ thuộc vào dữ liệu đó để định hướng chiến lược. Từ lưu lượng truy cập web đến thiết bị đeo tay (wearables), tốc độ và quy mô ra quyết định đang tăng trưởng theo cấp số nhân, thúc đẩy sự phổ biến của các khung trí tuệ nhân tạo (AI) và học máy (ML).

Trong các khung quyết định dựa trên dữ liệu, A/B testing là phương pháp nổi tiếng nhất. Tuy nhiên, nhược điểm lớn của A/B testing là thời gian. Sau khi kết thúc thử nghiệm, kết quả cần được phân tích và phê duyệt, gây ra sự chậm trễ. Vậy nếu có một thuật toán có thể tự động hóa quy trình này? Đó chính là lúc Thompson Sampling phát huy tác dụng.

Mô phỏng dữ liệu và thuật toánMô phỏng dữ liệu và thuật toán

Bài toán Multi-Armed Bandit là gì?

Hãy tưởng tượng bạn bước vào một sòng bạc và đứng trước ba máy đánh bạc (slot machines): Máy A, Máy B và Máy C. Bạn không biết máy nào có tỷ lệ trả thưởng cao nhất. Bạn quyết định kéo cần ngẫu nhiên vài lần đầu và ghi nhận kết quả:

  • Máy A: 40%
  • Máy B: 30%
  • Máy C: 50%

Tại thời điểm này, bạn quyết định kéo Máy C thường xuyên hơn một chút vì tin rằng nó có tỷ lệ thắng cao nhất, nhưng vẫn muốn thu thập thêm dữ liệu. Sau vài lượt nữa, kết quả cập nhật:

  • Máy A: 45%
  • Máy B: 25%
  • Máy C: 60%

Bây giờ, bạn tự tin hơn rằng Máy C là lựa chọn tốt nhất. Đây là ví dụ kinh điển đặt tên cho bài toán Multi-Armed Bandit (Kẻ cướp nhiều tay).

Thompson Sampling là một thuật toán Bayes được thiết kế để giải quyết vấn đề này. Nó hoạt động dựa trên sự đánh đổi giữa Khám phá (Exploration)Khai thác (Exploitation). Ban đầu, thuật toán khám phá các tùy chọn ngẫu nhiên để thu thập dữ liệu. Theo thời gian, nó dần chuyển sang khai thác (chọn) các tùy chọn mang lại phần thưởng trung bình cao hơn.

Ứng dụng thực tế: Tối ưu hóa tiêu đề Email

Để minh họa, hãy giả sử bạn chịu trách nhiệm về các chiến dịch email marketing. Thay vì dùng A/B testing truyền thống, bạn muốn áp dụng phương pháp Multi-Armed Bandit để nhanh chóng nhận ra giá trị.

Chúng ta sẽ xây dựng một mô phỏng bằng Python để so sánh phương pháp Thompson Sampling với phương pháp chọn lựa ngẫu nhiên (Random).

Xây dựng thuật toán với Python

Quá trình triển khai bao gồm việc tạo các lớp (class) Python để mô phỏng môi trường gửi email.

1. Lớp cơ sở (BaseEmailSimulation)

Lớp này lưu trữ các tiêu đề email và "tỷ lệ mở thực tế" (true open rates) - những giá trị mà thuật toán sẽ không biết trước và phải tìm hiểu. Nó cũng chứa các hàm để giả lập việc gửi email (trả về kết quả 1 nếu mở, 0 nếu bỏ qua) dựa trên phân phối nhị thức (binomial distribution).

2. Lớp mô phỏng ngẫu nhiên (RandomSimulation)

Đây là nhóm đối chứng (benchmark), mô phỏng cách A/B testing hoạt động khi việc phân chia người dùng không được tối ưu hóa theo thời gian thực. Hàm select_headline() sẽ chọn ngẫu nhiên một tiêu đề bất kỳ.

3. Lớp Thompson Sampling (BanditSimulation)

Đây là phần cốt lõi. Thuật toán sử dụng phân phối Beta để mô hình hóa xác suất thành công của từng tiêu đề (cánh tay).

  • Ban đầu, mỗi tiêu đề có các tham số alphabeta khởi tạo (thường là 1).
  • Sau mỗi lần gửi email, thuật toán cập nhật alpha (nếu email được mở) hoặc beta (nếu bị bỏ qua).
  • Hàm select_headline() sẽ lấy mẫu từ phân phối Beta của các tiêu đề và chọn tiêu đề có giá trị mẫu cao nhất. Điều này đảm bảo rằng các tiêu đề có khả năng thành công cao sẽ được chọn nhiều hơn, nhưng các tiêu đề chưa được thử nhiều vẫn có cơ hội được khám phá.

Mã hóa thuật toán PythonMã hóa thuật toán Python

Kết quả so sánh và Hiệu suất

Chúng ta chạy thử nghiệm với 5 tiêu đề email có tỷ lệ mở thực tế khác nhau và so sánh hiệu quả qua các vòng lặp (iterations) từ 100 đến 1.000.000 lần.

Kết quả cho thấy:

  • Ở 100 và 1.000 lần lặp đầu tiên, không có sự khác biệt rõ rệt giữa phương pháp ngẫu nhiên và Thompson Sampling. Thậm chí, đôi khi phương pháp ngẫu nhiên có thể may mắn hơn.
  • Tuy nhiên, khi số lượng lượt tăng lên (10.000 trở lên), Thompson Sampling bắt đầu thể hiện sức mạnh. Nó liên tục vượt trội hơn phương pháp ngẫu nhiên khoảng 20%.

Biểu đồ kết quả mô phỏngBiểu đồ kết quả mô phỏng

Mặc dù 20% có vẻ không nhiều, nhưng với một doanh nghiệp lớn gửi hàng triệu email, con số này tương đương với hàng triệu đô la doanh thu tăng thêm.

Khi nào nên sử dụng Thompson Sampling?

Thompson Sampling là một công cụ mạnh mẽ, nhưng không phải lúc nào cũng phù hợp. Dưới đây là danh sách kiểm tra để xác định xem bạn có nên áp dụng nó hay không:

  1. Một chỉ số KPI rõ ràng: Thuật toán phụ thuộc vào một kết quả phần thưởng duy nhất. Bạn cần một chỉ số thành công đơn giản (ví dụ: email được mở hoặc không).
  2. Cơ chế phần thưởng gần như tức thì: Phần thưởng cần đến nhanh chóng (tức thì hoặc trong vài phút) để thuật toán học hỏi và tối ưu hóa ngay lập tức.
  3. Ngân sách cho số lượng lượt lớn: Thuật toán cần đủ dữ liệu để học. Số lượng lượt thử nghiệm càng lớn, kết quả càng chính xác.
  4. Nhiều tùy chọn khác biệt: Các biến thể (ví dụ: tiêu đề email) cần phải khác biệt nhau để thuật toán có thể khám phá và khai thác sự khác biệt này.

Thompson Sampling là một giải pháp thay thế tuyệt vời cho A/B testing truyền thống trong các chiến dịch digital marketing và hệ thống gợi ý, giúp tự động hóa việc ra quyết định và tối đa hóa hiệu quả kinh doanh.

Bài viết được tổng hợp và biên soạn bằng AI từ các nguồn tin tức công nghệ. Nội dung mang tính tham khảo. Xem bài gốc ↗