परिकल्पना निर्माण और वितरण

Python में A/B Testing

Moe Lotfy, PhD

Principal Data Science Manager

परिकल्पनाएँ परिभाषित करना

  • परिकल्पना क्या है:

    • किसी घटना की व्याख्या करने वाला कथन
    • आगे की जाँच का शुरुआती बिंदु
    • वह विचार जिसे हम जाँचना चाहते हैं
  • एक मज़बूत परिकल्पना:

    • परीक्षण योग्य, घोषणात्मक, संक्षिप्त, और तार्किक होती है
    • व्यवस्थित इटरेशन संभव बनाती है
    • सामान्यीकरण और समझ की पुष्टि आसान करती है
    • क्रियाशील/केंद्रित सिफारिशें देती है
Python में A/B Testing

परिकल्पना फ़ॉर्मेट

  • सामान्य फ्रेमिंग फ़ॉर्मेट:

    • X के आधार पर, हमें विश्वास है कि अगर हम Y करें
    • तो Z होगा
    • जिसे मेट्रिक(s) M से नापा जाएगा
  • वैकल्पिक परिकल्पना का उदाहरण:

    • यूज़र एक्सपीरियंस रिसर्च के आधार पर, हमें विश्वास है कि अगर हम अपने checkout पेज का डिज़ाइन अपडेट करें
    • तो ख़रीदारी करने वाले ग्राहकों का प्रतिशत बढ़ेगा
    • जिसे purchase rate से मापा जाएगा
  • शून्य परिकल्पना: ...ख़रीदारी करने वाले ग्राहकों का प्रतिशत नहीं बदलेगा...
Python में A/B Testing

सैंपल सांख्यिकियाँ निकालना

# 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
Python में A/B Testing

वितरणों का सिम्यूलेशन और प्लॉटिंग

n ट्रायल्स में खरीद की प्रायिकता p होने पर खरीदारों की संख्या Binomial रूप से वितरित होती है।

# 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()

चेकआउट ग्रुप A और B का Binomial वितरण

Python में A/B Testing

केंद्रीय सीमा प्रमेय

काफ़ी बड़े सैंपल आकार पर, सैंपल माध्य p का वितरण होगा

  • वास्तविक जनसंख्या माध्य के आसपास नार्मल
  • जिसका standard deviation = standard error of the mean होगा
  • आधारभूत डेटा के वितरण से स्वतंत्र

प्रोपोर्शन्स के लिए केंद्रीय सीमा प्रमेय का सूत्र

Python में A/B Testing

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()

Python में केंद्रीय सीमा प्रमेय का डेमो। सैंपल आकार बढ़ने पर वितरण नार्मल के क़रीब आता है

Python में A/B Testing

परिकल्पना का गणितीय निरूपण

# 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()

शून्य और वैकल्पिक परिकल्पनाओं के औसत में अंतर के प्लॉट्स

शून्य और वैकल्पिक परिकल्पनाओं का गणितीय निरूपण

Python में A/B Testing

अभ्यास करते हैं!

Python में A/B Testing

Preparing Video For Download...