Xây dựng giả thuyết và phân phối

A/B Testing bằng Python

Moe Lotfy, PhD

Principal Data Science Manager

Xác định giả thuyết

  • Giả thuyết là:

    • phát biểu giải thích một hiện tượng
    • điểm xuất phát cho điều tra tiếp theo
    • ý tưởng cần kiểm định
  • Một giả thuyết tốt:

    • kiểm định được, khẳng định, ngắn gọn, logic
    • hỗ trợ lặp lại có hệ thống
    • dễ khái quát và củng cố hiểu biết
    • dẫn tới khuyến nghị khả thi/tập trung
A/B Testing bằng Python

Mẫu định dạng giả thuyết

  • Khuôn mẫu chung:

    • Dựa trên X, chúng tôi tin rằng nếu làm Y
    • Thì Z sẽ xảy ra
    • Đo bằng chỉ số M
  • Ví dụ giả thuyết đối:

    • Dựa trên nghiên cứu trải nghiệm người dùng, chúng tôi tin rằng nếu cập nhật thiết kế trang thanh toán
    • Thì tỷ lệ khách mua hàng sẽ tăng
    • Đo bằng tỷ lệ mua
  • Giả thuyết không: ...tỷ lệ khách mua hàng sẽ không đổi...
A/B Testing bằng Python

Tính thống kê mẫu

# Calculate the number of users in groups A and B
n_A = checkout[checkout['checkout_page'] == 'A']['purchased'].count()
n_B = checkout[checkout['checkout_page'] == 'B']['purchased'].count()
print('Group A users:',n_A)
print('Group B users:',n_B)
Group A users: 3000
Group B users: 3000
# Calculate the mean purchase rates of groups A and B
p_A = checkout[checkout['checkout_page'] == 'A']['purchased'].mean()
p_B = checkout[checkout['checkout_page'] == 'B']['purchased'].mean()
print('Group A mean purchase rate:',p_A)
print('Group B mean purchase rate:',p_B)
Group A mean purchase rate: 0.820
Group B mean purchase rate: 0.847
A/B Testing bằng Python

Mô phỏng và vẽ phân phối

Số người mua trong n lần thử với xác suất mua p tuân theo phân phối Nhị thức.

# Import binom from scipy library 
from scipy.stats import binom 
# Create x-axis range and Binomial distributions A and B
x = np.arange(n_A*p_A - 100, n_B*p_B + 100) 
binom_a = binom.pmf(x, n_A, p_A)
binom_b = binom.pmf(x, n_B, p_B) 
# Plot Binomial distributions A and B
plt.bar(x, binom_a, alpha=0.4, label='Checkout A')
plt.bar(x, binom_b, alpha=0.4, label='Checkout B')
plt.xlabel('Purchased')
plt.ylabel('PMF')
plt.title('PMF of Checkouts Binomial distribution')
plt.show()

Phân phối Nhị thức của nhóm thanh toán A và B

A/B Testing bằng Python

Định lý giới hạn trung tâm

Với cỡ mẫu đủ lớn, phân phối của trung bình mẫu, p, sẽ

  • phân phối chuẩn quanh kỳ vọng dân số thật
  • có độ lệch chuẩn = sai số chuẩn của trung bình
  • bất kể phân phối dữ liệu gốc

Công thức định lý giới hạn trung tâm cho tỷ lệ

A/B Testing bằng Python

Định lý giới hạn trung tâm trong Python

# Set random seed for repeatability 
np.random.seed(47)
# Create an empty list to hold means
sampled_means = []
# Create loop to simulate 1000 sample means
for i in range(1000):
    # Take a sample of n=100
    sample = checkout['purchased'].sample(100,replace=True)
    # Get the sample mean and append to list
    sample_mean = np.mean(sample)
    sampled_means.append(sample_mean)
# Plot distribution
sns.displot(sampled_means, kde=True)
plt.show()

Minh họa Python cho định lý giới hạn trung tâm. Phân phối tiến gần chuẩn khi cỡ mẫu lớn hơn

A/B Testing bằng Python

Biểu diễn toán học của giả thuyết

# Import norm from scipy library 
from scipy.stats import norm
# Create x-axis range and normal distributions A and B
x = np.linspace(0.775, 0.9, 500)
norm_a = norm.pdf(x, p_A, np.sqrt(p_A*(1-p_A) / n_A))
norm_b = norm.pdf(x, p_B, np.sqrt(p_B*(1-p_B) / n_B))
# Plot normal distributions A and B
sns.lineplot(x=x, y=norm_a, ax=ax, label='Checkout A')
sns.lineplot(x=x, y=norm_b, color='orange', \
             ax=ax, label= 'Checkout B')
ax.axvline(p_A, linestyle='--')
ax.axvline(p_B, linestyle='--')
plt.xlabel('Purchased Proportion')
plt.ylabel('PDF')
plt.legend(loc="upper left")
plt.show()

Biểu đồ chênh lệch trung bình của giả thuyết không và giả thuyết đối

Biểu diễn toán học của giả thuyết không và giả thuyết đối

A/B Testing bằng Python

Ayo berlatih!

A/B Testing bằng Python

Preparing Video For Download...