Menu

Mô phỏng peeking trong A/B test

Hai nghìn bài test mà A và B là cùng một trang, chạy trên lưu lượng của bạn. Xem người hay xem kết quả mỗi ngày sẽ tuyên bố bao nhiêu phiên bản thắng, và cũng những bài test đó đánh lừa người chờ đến ngày kết thúc bao nhiêu lần.

Tác giả Nethanel Bar, Co-founder & CEO

Cập nhật lần cuối

Sẵn sàng học code thật sự?

Coddy dạy bạn bằng cách viết code thật ngay trên trình duyệt: bài học tương tác, phản hồi tức thì và AI hỗ trợ khi bạn bị kẹt.

Thói quen đắt giá nhất trong A/B test, mô phỏng trên số liệu của bạn

Thói quen là thế này. Bạn bắt đầu một bài test, và sáng nào cũng mở dashboard. Thanh kết quả nhích lên, tụt xuống, rồi lại nhích lên, và vào một ngày thứ Ba nó vượt 95%. Bạn chốt, triển khai phiên bản thắng rồi chuyển sang việc khác. Vấn đề là p-value luôn dao động. Ngay cả khi hai phiên bản giống hệt nhau, p-value vẫn tình cờ xuống dưới 0,05 vào một số ngày, rồi sau đó lại vượt lên. Dừng ở lần vượt ngưỡng đầu tiên nghĩa là bạn bắt đúng lúc nó đi ngang qua, và mức độ tin cậy mà bạn tưởng mình có đã biến mất.

Mức độ ảnh hưởng khiến nhiều người bất ngờ. Ở độ tin cậy 95%, một bài test chỉ đọc một lần lúc kết thúc sẽ đánh lừa bạn khoảng một lần trên hai mươi, đúng như cam kết bạn đã chấp nhận. Đọc cùng bài test đó mỗi ngày trong bốn tuần và dừng ở ngày xanh đầu tiên, trình mô phỏng thường cho thấy phiên bản thắng giả ở một phần tư số bài test trở lên, dù không có gì thay đổi. Bài viết gốc của Evan Miller ước tính con số này trên 20% với người xem mỗi ngày; Optimizely đã xây lại engine thống kê của mình vào năm 2015 vì tỷ lệ dương tính giả của khách hàng họ đã vượt quá mức đó. Xem mỗi tuần thay vì mỗi ngày giảm thiệt hại khoảng một nửa nhưng không loại bỏ được.

Phần mô phỏng ở đây minh bạch về cách nó hoạt động: mỗi bài test sinh lượt chuyển đổi theo đúng tỷ lệ thật cho cả hai nhánh, chạy z-test hai tỷ lệ thông thường ở mỗi lần xem trên toàn bộ dữ liệu thu được đến lúc đó, và ghi lại thời điểm người hay xem sớm sẽ dừng. Mỗi đường trên biểu đồ là một bài test; mỗi chấm là một buổi sáng ai đó lẽ ra đã công bố kết quả. Đặt mức tăng thật là +10% để thấy nửa còn lại của câu chuyện: người hay xem sớm bắt được hiệu ứng thật từ sớm nhưng với mức tăng bị phóng đại, và cũng sẽ "thắng" hăng hái y như vậy nếu hiệu ứng bằng không.

Trình mô phỏng cho thấy điều gì

  • P-value là một bước đi ngẫu nhiên. Theo giả thuyết không, ở bất kỳ lần xem nào nó cũng phân phối đều, nghĩa là vào một buổi sáng bất kỳ có 5% khả năng nó nằm dưới 0,05. Qua hai mươi tám buổi sáng, những khả năng đó cộng dồn lại.
  • Tỷ lệ dương tính giả phụ thuộc vào số lần bạn xem, không phải thời gian test chạy. Một bài test bốn tuần xem mỗi tuần ít bị đánh lừa hơn một bài test hai tuần xem mỗi ngày.
  • Dừng sớm làm phóng đại mức tăng. Khi người hay xem sớm dừng vào một ngày may mắn, mức tăng quan sát được hôm đó theo định nghĩa là lớn bất thường. Những phiên bản thắng "nhạt dần" sau khi ra mắt thường chính là trường hợp này.
  • Cách khắc phục là kỷ luật hoặc một loại test khác. Kỷ luật: chốt trước cỡ mẫu và ngày kết thúc, rồi chỉ đọc một lần. Loại test khác: các phương pháp tuần tự, như p-value luôn hợp lệ (always-valid) mà Optimizely, Statsig và Eppo dùng, được xây dựng để đọc liên tục, đổi lại cần cỡ mẫu lớn hơn.
  • Dashboard Bayes cũng không miễn nhiễm. Một xác suất là phiên bản tốt nhất mà bạn xem mỗi ngày và hành động khi nó vượt ngưỡng cũng gặp đúng vấn đề này, chỉ trong một lớp áo khác.

Cách dùng trình mô phỏng

  1. Nhập tỷ lệ chuyển đổi và số lượt truy cập mỗi ngày

    Trình mô phỏng sinh lượt chuyển đổi theo tỷ lệ thật của bạn, nên sự dao động của p-value khớp với mức nhiễu bạn sẽ gặp trong thực tế.

  2. Đặt thời lượng dự kiến và tần suất xem

    Mỗi ngày, ba ngày một lần hoặc mỗi tuần. Khoảng cách giữa tỷ lệ của người hay xem sớm và tỷ lệ của bài test trung thực chính là cái giá của thói quen đó.

  3. Giữ mức tăng thật ở mức không

    Như vậy mọi bài test đều là A/A test: bất kỳ phiên bản thắng nào cũng là báo động giả. Sau đó chuyển sang +10% hoặc +30% để xem người hay xem sớm xử lý một hiệu ứng thật.

  4. Đọc hai con số lớn

    Tỷ lệ của người hay xem sớm cho biết người xem mỗi ngày tuyên bố phiên bản thắng bao nhiêu lần. Tỷ lệ tại ngày kết thúc phải gần với mức alpha bạn chọn; nếu đúng vậy, bài test trung thực đang làm đúng như cam kết.

  5. Chạy lại

    Mỗi lần chạy sinh ra các bài test ngẫu nhiên mới. Các tỷ lệ thay đổi một chút, nhưng khoảng cách thì không.

Tỷ lệ dương tính giả điển hình trên A/A test

Ở độ tin cậy 95%, đọc trung thực một lần lúc kết thúc bị đánh lừa khoảng 5% số lần. Số liệu ước lượng từ trình mô phỏng và các nghiên cứu, cho người hay xem sớm dừng ở lần xem có ý nghĩa thống kê đầu tiên.

Tần suất xemSố lần xem trong 4 tuầnPhiên bản thắng giả
Một lần, lúc kết thúc1khoảng 5%
Mỗi tuần4khoảng 10 đến 13%
Ba ngày một lần9 đến 10khoảng 15 đến 20%
Mỗi ngày28khoảng 25 đến 30%
Mỗi ngày trong 12 tuần84trên 35%

Ba thói quen, được mô phỏng

Người xem mỗi ngày

Tỷ lệ chuyển đổi 5%, 1.000 lượt truy cập mỗi ngày, 28 ngày, xem mỗi sáng. Trong lần chạy của chúng tôi: người hay xem sớm tuyên bố phiên bản thắng ở khoảng 28% trong 2.000 bài A/A test; đọc một lần lúc kết thúc thì là 4,5%.

Gấp sáu lần tỷ lệ báo động giả, cho một bài test tưởng là cẩn thận vì có người theo dõi mỗi ngày. Một nửa số "phiên bản thắng" đó gọi tên B và nửa còn lại gọi tên A, vì vốn chẳng có gì để tìm.

Người xem mỗi tuần

Cùng lưu lượng, cùng thời lượng, xem mỗi tuần một lần. Trong lần chạy của chúng tôi: khoảng 12% với người hay xem sớm, so với 5% lúc kết thúc.

Xem bốn lần thay vì hai mươi tám lần giúp ích rất nhiều nhưng vẫn làm tỷ lệ cam kết tăng hơn gấp đôi. Ngoài con số một, không có số lần xem nào giữ được cam kết.

Mức tăng thật +10%

Đặt mức tăng thật của B là +10% trên cùng lưu lượng. Bài test trung thực ở 28 ngày có power hạn chế với mức tăng nhỏ như vậy ở lưu lượng này; người hay xem sớm dừng sớm thường xuyên hơn, vào những ngày may mắn.

Đây là trường hợp dễ bị cám dỗ: người hay xem sớm có vẻ tìm ra kết quả nhanh hơn. Nhưng những ngày họ dừng lại là những ngày mức tăng trông lớn nhất, nên con số được báo cáo khi triển khai bị thổi phồng, và cùng thói quen đó cũng sẽ tìm ra "phiên bản thắng" khi mức tăng được đặt bằng không.

Lỗi thường gặp khi xem kết quả sớm

  • Dừng ở buổi sáng đầu tiên có ý nghĩa thống kê. Đây là toàn bộ nội dung trang này. Độ tin cậy chỉ đúng với ý nghĩa của nó khi bạn đọc kết quả một lần.
  • Kéo dài một bài test "gần đạt rồi". Quyết định chạy lâu hơn vì kết quả gần có ý nghĩa thống kê là peeking theo chiều ngược lại, và làm tăng tỷ lệ dương tính giả y như vậy.
  • Xem mỗi ngày "chỉ để chắc là không có gì hỏng". Theo dõi bug thì được; theo dõi p-value thì không. Hãy xem cách chia lưu lượng và tỷ lệ lỗi, không xem mức tăng, cho đến ngày kết thúc.
  • Tin rằng dashboard Bayes khiến peeking trở nên an toàn. Hành động theo một ngưỡng xác suất mà bạn xem mỗi ngày cũng bị thổi phồng tương tự.
  • Báo cáo mức tăng của đúng ngày bạn dừng. Nếu buộc phải dừng sớm, hãy báo cáo khoảng tin cậy, và chuẩn bị tinh thần rằng mức tăng thật nhỏ hơn ước lượng điểm.

Câu hỏi thường gặp về peeking

Vấn đề peeking trong A/B test là gì?

Là việc đọc đi đọc lại một bài test có thời hạn cố định và dừng ngay lần đầu nó trông có ý nghĩa thống kê. Vì p-value dao động trong lúc dữ liệu đổ về, mỗi lần xem là thêm một cơ hội vượt ngưỡng do may mắn. Một bài test được đọc mỗi ngày trong một tháng ở độ tin cậy 95% sẽ cho phiên bản thắng giả khoảng một phần tư số lần khi không có gì thay đổi, thay vì 5% như độ tin cậy cam kết.

Xem bài test trước khi kết thúc có sai không?

Xem thì không sao; hành động mới là vấn đề. Hãy kiểm tra lưu lượng có được chia đều không, cả hai phiên bản có tải được không và lượt chuyển đổi có được ghi nhận không. Đừng đọc mức tăng hay độ tin cậy, và đừng để những gì bạn thấy làm thay đổi ngày kết thúc theo bất kỳ hướng nào.

Làm A/B test thế nào nếu muốn theo dõi liên tục?

Dùng một phương pháp tuần tự. P-value luôn hợp lệ, thiết kế tuần tự theo nhóm và các phương pháp tương tự được xây dựng để đọc bất cứ lúc nào; cái giá phải trả là cỡ mẫu lớn hơn cho cùng mức power. Hầu hết các nền tảng hiện đại đều có. Trình mô phỏng này dựng bài test có thời hạn cố định kinh điển, vì đó là cách phần lớn các phép tính trên bảng tính và dashboard hoạt động, kể cả các tab khác trên trang này.

Nếu xem mỗi tuần thì peeking có còn là vấn đề không?

Ít hơn, nhưng vẫn có. Bốn lần xem trong bốn tuần ở độ tin cậy 95% thường làm tỷ lệ dương tính giả tăng gấp đôi. Số lần xem duy nhất giữ đúng tỷ lệ cam kết là một.

Vì sao trình mô phỏng dùng A/A test?

Vì khi hai nhánh giống hệt nhau, mọi phiên bản thắng đều là báo động giả, nên tỷ lệ mà trình mô phỏng báo cáo chính là tỷ lệ dương tính giả của thói quen đang được mô phỏng. Bật một mức tăng thật sẽ cho thấy mặt còn lại: người hay xem sớm dừng sớm vào những ngày may mắn và báo cáo một hiệu ứng bị thổi phồng.

Test theo phương pháp Bayes có giải quyết được vấn đề peeking không?

Tự nó thì không. Một xác suất Bayes được đọc liên tục và hành động theo một ngưỡng cố định cũng làm tăng quyết định sai theo cách tương tự, như Georgi Georgiev và những người khác đã chỉ ra. Phương pháp Bayes với quy tắc quyết định đúng đắn và một prior phù hợp có thể hoạt động tốt khi theo dõi liên tục, nhưng chỉ riêng chữ "Bayes" thì không phải là lời giải.

Công cụ lập trình khác

Hình minh họa các ngôn ngữ lập trình của Coddy

Học lập trình cùng Coddy

Bắt đầu