A/B परीक्षण

Python में Bayesian डेटा विश्लेषण

Michal Oleszak

Machine Learning Engineer

A/B परीक्षण

  • रैंडमाइज़्ड प्रयोग: उपयोगकर्ताओं को दो समूहों (A और B) में बाँटें

 

 

दो उपयोगकर्ता समूह.

1 Picture: adapted from https://commons.wikimedia.org/wiki/File:A-B_testing_simple_example.png
Python में Bayesian डेटा विश्लेषण

A/B परीक्षण

  • रैंडमाइज़्ड प्रयोग: उपयोगकर्ताओं को दो समूहों (A और B) में बाँटें
  • हर समूह को किसी चीज़ का अलग वर्ज़न दिखाएँ (जैसे वेबसाइट लेआउट)

 

दो उपयोगकर्ता समूहों को दो अलग वेबसाइट लेआउट दिखाए जा रहे हैं.

1 Picture: adapted from https://commons.wikimedia.org/wiki/File:A-B_testing_simple_example.png
Python में Bayesian डेटा विश्लेषण

A/B परीक्षण

  • रैंडमाइज़्ड प्रयोग: उपयोगकर्ताओं को दो समूहों (A और B) में बाँटें
  • हर समूह को किसी चीज़ का अलग वर्ज़न दिखाएँ (जैसे वेबसाइट लेआउट)
  • देखें किस समूह का कोई मेट्रिक बेहतर है (जैसे click-through rate)

दो उपयोगकर्ता समूहों को दो अलग वेबसाइट लेआउट दिखाए जा रहे हैं, जिनमें से एक का क्लिक रेट अधिक है.

1 Picture: adapted from https://commons.wikimedia.org/wiki/File:A-B_testing_simple_example.png
Python में Bayesian डेटा विश्लेषण

A/B परीक्षण: frequentist तरीका

  • हाइपोथेसिस टेस्टिंग पर आधारित
  • जाँचें कि A और B का परफॉर्मेंस समान है या नहीं
  • यह नहीं बताता कि A, B से कितना बेहतर है
Python में Bayesian डेटा विश्लेषण

A/B परीक्षण: Bayesian तरीका

  • वेबसाइट लेआउट A और B के posterior click-through rates निकालें और तुलना करें
  • सीधे यह प्रायिकता निकालें कि A, B से बेहतर है
  • यह मापें कि कितना बेहतर है
  • गलत निर्णय पर expected loss का अनुमान लगाएँ
Python में Bayesian डेटा विश्लेषण

A/B परीक्षण: Bayesian तरीका

  • जब यूज़र वेबसाइट पर आता है, दो स्थितियाँ होती हैं:
    • क्लिक (सफलता)
    • नो क्लिक (विफलता)
  • बाइनॉमियल डिस्ट्रीब्यूशन का उपयोग करें! (success की probability = click rate)
Python में Bayesian डेटा विश्लेषण

बीटा posterior सिम्युलेट करें

हम जानते हैं कि यदि prior $Beta(a, b)$ है, तो posterior $Beta(x, y)$ होगा, जहाँ:

$x = \text{NumberOfSuccesses} + a$

$y = \text{NumberOfObservations} - \text{NumberOfSuccesses} + b$

def simulate_beta_posterior(trials, beta_prior_a, beta_prior_b):
    num_successes = np.sum(trials)
    posterior_draws = np.random.beta(
      num_successes + beta_prior_a, 
      len(trials) - num_successes + beta_prior_b, 
      10000
    )
    return posterior_draws
Python में Bayesian डेटा विश्लेषण

पोस्टेरियर की तुलना

1s (क्लिक्स) और 0s (नो क्लिक) की सूचियाँ:

print(A_clicks)
print(B_clicks)
[0 1 1 0 0 0 0 0 0 0 1 ... ]
[0 0 0 1 0 0 0 1 1 0 1 ... ]

 

हर लेआउट के लिए posterior ड्रॉ सिम्युलेट करें:

A_posterior = simulate_beta_posterior(A_clicks, 1, 1)
B_posterior = simulate_beta_posterior(B_clicks, 1, 1)

पोस्टेरियर्स प्लॉट करें:

sns.kdeplot(A_posterior, shade=True, label="A")
sns.kdeplot(B_posterior, shade=True, label="B")
plt.show()

दो posterior डेंसिटी प्लॉट, आंशिक ओवरलैप के साथ.

Python में Bayesian डेटा विश्लेषण

पोस्टेरियर की तुलना

B और A के बीच posterior अंतर:

diff = B_posterior - A_posterior

sns.kdeplot(diff, shade=True, label="difference: A-B")
plt.show()

एक डेंसिटी प्लॉट जिसमें लगभग सारा probability mass शून्य से ऊपर है.

B के बेहतर होने की प्रायिकता:

(diff > 0).mean()
0.9639
Python में Bayesian डेटा विश्लेषण

अपेक्षित हानि (Expected loss)

यदि हम खराब वेबसाइट वर्ज़न डिप्लॉय करें, तो कितने क्लिक्स गंवाएँगे?

# Difference (B-A) जब A बेहतर है 
loss = diff[diff < 0]


# Expected (औसत) loss expected_loss = loss.mean() print(expected_loss)
-0.0077850237030215215
Python में Bayesian डेटा विश्लेषण

Ads डेटा

print(ads)
                               user_id   product site_version                 time  banner_clicked
0     f500b9f27ac611426935de6f7a52b71f   clothes      desktop  2019-01-28 16:47:08               0
1     cb4347c030a063c63a555a354984562f  sneakers       mobile  2019-03-31 17:34:59               0
2     89cec38a654319548af585f4c1c76b51   clothes       mobile  2019-02-06 09:22:50               0
3     1d4ea406d45686bdbb49476576a1a985  sneakers       mobile  2019-05-23 08:07:07               0
4     d14b9468a1f9a405fa801a64920367fe   clothes       mobile  2019-01-28 08:16:37               0
...                                ...       ...          ...                  ...             ...
9995  7ca28ccde263a675d7ab7060e9ed0eca   clothes       mobile  2019-02-02 08:19:39               0
9996  7e2ec2631332c6c4527a1b78c7ede789   clothes       mobile  2019-04-04 03:27:05               0
9997  3b828da744e5785f1e67b5df3fda5571   clothes       mobile  2019-04-15 15:59:06               0
9998  6cce0527245bcc8519d698af2224c04a   clothes       mobile  2019-05-21 20:43:21               0
9999  8cf87a02f96327a1a8a93814f34d0d0c  sneakers       mobile  2019-03-02 21:27:57               0
Python में Bayesian डेटा विश्लेषण

चलो A/B टेस्ट करें!

Python में Bayesian डेटा विश्लेषण

Preparing Video For Download...