Hướng dẫn hypothesis testing in python - thử nghiệm giả thuyết trong python

Hướng dẫn hypothesis testing in python - thử nghiệm giả thuyết trong python

Nếu bạn hạ cánh trên trang này, bạn đã biết thử nghiệm A/B là gì, nhưng có lẽ bạn có một số nghi ngờ về cách phân tích kết quả trong khuôn khổ Bayes.

Để bắt đầu bài viết, sau đó, hãy để tôi chỉ cho bạn sự khác biệt thực tế của cách tiếp cận Bayes từ cổ điển, ‘thường xuyên, một sự khác biệt là ở dạng số liệu bạn muốn nghiên cứu thực sự. Đối với những người thường xuyên, nó là một con số đơn giản, trong khi đối với người Bayes, nó là một bản phân phối.

Mặc dù có một phân phối thay vì một số xuất hiện chỉ là một biến chứng, hóa ra nó cực kỳ hữu ích trong rất nhiều trường hợp và trong các thử nghiệm A/B. Và với bài đăng này, bạn sẽ thấy rằng trong thực tế không quá khó để đối phó với nó. Trong thực tế, chỉ một vài dòng mã.

Chỉnh sửa 18/01/2018: Mã trên trang này đã trở thành cơ sở của một công cụ thử nghiệm A/B hoạt động với Mixpanel.A/B testing tool which work with Mixpanel.

Thẳng vào mã

Tôi đã hứa một hướng dẫn dễ dàng. Vì vậy, trong phần này tôi sẽ chỉ cho bạn thấy mã, và trong phần tiếp theo, nếu bạn quan tâm, bạn sẽ thấy một số chi tiết ẩn đằng sau nó.

Lưu ý rằng không có phương pháp xấp xỉ nào được sử dụng: không có chuỗi Markov Monte Carlo (MCMC) hoặc bất kỳ quy trình ngẫu nhiên (và chậm) nào khác. Và vì vậy, không cần khung lập trình Proabilistic.

Hãy cùng giới thiệu dữ liệu mẫu: Chúng tôi đã chạy thử nghiệm A/B để kiểm tra tỷ lệ chuyển đổi (CR, kể từ bây giờ) của một trang web và kết quả nằm trong Bảng 1, bên dưới.

Bảng 1: Dữ liệu

Ở đây mã. Bạn chỉ cần cài đặt Scipy và Numba, chèn số của bạn và bạn sẽ nhận được kết quả của mình.

Và nội dung của mô -đun được nhập, calc_prob.py:

Dựa trên các con số trong Bảng 1, tùy chọn thử nghiệm hoạt động tốt hơn nhiều so với điều khiển: gần 60% nâng cao, với xác suất hơn 98% là tốt hơn.

Như bạn có thể thấy, đây là kết quả trần trụi, bất khả tri, kết quả. Wether họ tốt hoặc không phụ thuộc vào tình huống của bạn. Một sự cân nhắc sâu sắc hơn về các ngưỡng sẽ được xử lý trong một bài viết khác, nhưng tăng cường về xác suất, bất cứ điều gì trên 95% đều đủ tốt.

Dễ dàng, phải không? Bây giờ, hãy để đào một chút trong các chi tiết.

Các chi tiết

Trong mã, tôi đã khởi tạo hai hàm Beta Beta, một cho mỗi tùy chọn, cho chúng ăn với các số chúng tôi có trong bảng:

Trên thực tế, đó là các chức năng mô hình hóa dữ liệu cho thử nghiệm A/B. Để giới thiệu tốt hơn hành vi của họ, hãy kiểm tra hoạt hình dưới đây:

Hình 1: Hoạt hình của phân phối beta cho một CR cố định. Trục ‘X đã được phóng to.

Mỗi fucntion được xây dựng trên đỉnh của một căn hộ, không chính xác, được xác định bởi β (1,1). Càng nhiều thông tin (dữ liệu) chúng tôi thêm vào cơ sở này, chức năng càng hẹp.

Bây giờ bạn có thể đang nghĩ: nó có thực sự đơn giản như vậy không? Tại sao tồn tại một hàm dường như được xây dựng chính xác cho các thử nghiệm mô hình A/B?

Câu trả lời nằm ở một định lý Bayes. Không đi quá nhiều vào các chi tiết, thông thường các giải pháp cho định lý Bayes rất khó (nếu không phải là không thể) được giải quyết chính xác, và đó là lý do tại sao một số phương pháp gần đúng đã được phát triển, như Markov Chain Monte Carlo (MCMC). Bạn có thể tìm thấy rất nhiều bài viết mà Web sử dụng các thủ tục như vậy.

Nhưng các thử nghiệm A/B là một trường hợp may mắn và chúng tôi thực sự có thể có một giải pháp chính xác dựa trên khái niệm về các linh mục liên hợp của Hồi giáo. Khi khái niệm này được áp dụng, hàm sau của định lý Bayes nằm trong cùng một gia đình của cái trước, và vì vậy chúng ta có thể xây dựng chức năng cuối cùng với một quy trình lặp.

Các thử nghiệm A/B là các thí nghiệm ngẫu nhiên với chính xác hai kết quả có thể xảy ra, thì chuyển đổi trực tuyến hoặc không có nghĩa là, và như vậy được mô tả là một thử nghiệm Bernoulli và phân phối beta là liên hợp trước cho một quá trình như vậy. Đó là lý do tại sao chúng ta có thể dám sử dụng nó theo cách đơn giản mà tôi đã làm. Nhưng nếu bạn vẫn còn nghi ngờ và/hoặc bạn muốn đào sâu hơn, bạn có thể kiểm tra các chi tiết toán học ở đây: ví dụ trong trang Wikipedia đó chính xác là trường hợp của chúng tôi.

Quay trở lại trường hợp của chúng tôi, hãy để tôi chỉ cho bạn hai bản phân phối:

Hình 2: Phân phối cho hai Cr.

Bạn có thể nhận thấy rằng các đỉnh của hai bản phân phối trùng với các giá trị bạn tính toán theo cách cổ điển:

Sự khác biệt, như đã nêu trước đây, là bạn có toàn bộ hàm mật độ xác suất (PDF) cho CR, thay vì một số đơn giản. Và nhờ vào điều này, bạn có thể tính toán, ví dụ, phương sai (thường nói ’lỗi lỗi) trên CRS, cũng được hiển thị trên nhãn trong lô.

Bây giờ bạn có thể tính toán cái được gọi là ‘uplift, tức là có bao nhiêu tùy chọn kiểm tra tăng CR đối với điều khiển:

Nhưng, tại thời điểm này, bạn cần phải khẳng định kết quả này đáng tin cậy như thế nào. Làm sao? Vâng, bạn có thể ước tính xác suất cho một tùy chọn tốt hơn so với lựa chọn khác!

Lưu ý rằng, trong mô hình cổ điển, thường xuyên, bạn không có cách nào tính toán xác suất đó. Theo cách tiếp cận đó, bạn thường tính toán 'giá trị p', sau đó kiểm tra xem nó có nằm dưới ngưỡng được chọn tùy ý hay không ('giá trị α', thường là 5%) và cuối cùng bạn có thể khai báo điều gì đó gần như không thể giải thích cho bất kỳ Người quản lý/Khách hàng/Hội đồng quản trị: Với mức độ tin cậy 95%, chúng ta có thể từ chối giả thuyết khống. Và sau đó, bạn phải giải thích rằng tuyên bố này rất khác so với giả thuyết này tốt hơn sau đó với xác suất 95%, đó là câu chính mà họ thực sự muốn nghe từ bạn.

Nhưng ở đây chúng ta đang ở trong thế giới Bayes, và ở đây chúng ta thực sự có thể nói điều đó. Trên thực tế, chúng tôi có các tệp PDF xác định CR của chúng tôi và xác suất được đưa ra bởi khu vực dưới đường cong. Đây là, thực tế, định nghĩa của PDF.

Một ví dụ đơn giản: Bạn có muốn xác suất cho tùy chọn thử nghiệm CR CR lớn hơn, giả sử, 0,003 không? Chà, nó chỉ là khu vực dưới đường cong thử nghiệm giữa 0,003 đến 1,0, được tô bóng trong Hình 3.

Hình 3: Xác suất cho tùy chọn thử nghiệm CR lớn hơn 3E-03.

Trong ngôn ngữ toán học, bạn tính toán khu vực bằng cách tích hợp trên đường cong giữa hai giới hạn: 0,003 (giới hạn mà chúng tôi chọn) và 1 (giới hạn cứng).

Với Python, chúng ta có thể tính toán chính xác này (vẫn không cần Monte Carlo), lịch sự của Thư viện MPMath:

Trong ví dụ này, chúng tôi chỉ xem xét một phân phối (thử nghiệm), nhưng để đo lường tính tin cậy của sự nâng cao của chúng tôi, chúng tôi phải xem xét cả hai bản phân phối (kiểm soát và kiểm tra), và do đó để hình dung tình huống chúng tôi phải thêm một chiều. Do đó, xác suất chúng ta sẽ đo được được xác định không phải bởi một khu vực nữa, mà là một khối lượng thay thế. Cụ thể, khối lượng trong phân phối xác suất chung của thử nghiệm và kiểm soát trong đó thử nghiệm lớn hơn điều khiển. Hãy để xem nó là gì:

Hãy tưởng tượng cốt truyện của Hình 4 ở bên trái là hình ảnh của một ngọn núi, và quan điểm của nó từ một vệ tinh nằm trong cốt truyện bên phải. Tập trung vào cốt truyện bên phải, bạn có thể thấy đường màu xám là đường viền giữa vùng đất thuộc tùy chọn thử nghiệm (tam giác trên) và đất của tùy chọn điều khiển. Trong kịch bản này, câu hỏi trở thành: Bài kiểm tra của Mountain có bao nhiêu hơn là kiểm soát?

Cập nhật (13/05/2019): Vì tôi có một số yêu cầu về điều này, bên dưới bạn có thể tìm mã để tạo lại cốt truyện của Hình 4, phải. Điều này sử dụng lấy mẫu Monte Carlo và rất nhiều điểm cần thiết để có một con số tốt để xem:: Since I had several requests about this, below you can find the code for recreate the plot of Figure4, right. This uses Monte Carlo sampling, and a lot of points are needed to have a figure nice to see:

Mã để tạo đúng sơ đồ của Hình 4.

Để tính toán khối lượng này (trong tam giác trên của Hình 4), tôi đã thấy rất nhiều bài đăng trên web, một lần nữa, sử dụng các phương thức gần đúng (như Monte Carlo). Chà, những người đã viết chúng không biết rằng một phương pháp chính xác đã được John Cook triển khai vào năm 2005 (Chương 2, ở đây). Mã trong mô -đun calc_prob.py sao chép công thức đó và gần như đầy đủ từ một phiên bản ban đầu được viết bởi Antti Rasinen.

Trong trường hợp của chúng tôi, khu vực này là 0,98, điều đó có nghĩa là tùy chọn ‘thử nghiệm hoạt động tốt hơn so với’ điều khiển, một xác suất 98%.

Hãy để tôi nhấn mạnh rằng nếu kết quả là, về mặt truyền thông, 50%, so với ngọn núi được chia sẻ hoàn hảo và điều này có nghĩa là không có tùy chọn nào tốt hơn so với giá trị khác, trong khi giá trị nhỏ hơn tùy chọn thử nghiệm thực sự tồi tệ hơn so với điều khiển.

Đó là tất cả.

Như bạn thấy, các chi tiết đằng sau một vài dòng mã khi bắt đầu các bài đăng này là sâu sắc, và không quá đơn giản. Nhưng tôi hy vọng tôi đã rõ ràng và đơn giản trong việc mô tả các khái niệm, như tôi đã nêu trong tiêu đề.