Ratio metrics และ delta method

A/B Testing ด้วย Python

Moe Lotfy, PhD

Principal Data Science Manager

Ratio metrics กับ A/B testing

  • Mean metrics

ตัวอย่าง mean metrics: mean order value และ mean time on page

  • หน่วยของการวิเคราะห์ (Unit of analysis):

    • เอนทิตีที่ใช้วิเคราะห์ใน A/B test
    • ตัวส่วนใน ratio metrics
  • หน่วยของการสุ่ม (Randomization unit):

    • กลุ่มตัวอย่างที่ถูกสุ่มจัดสรรไปยังแต่ละ variant
A/B Testing ด้วย Python

Ratio metrics กับ A/B testing

  • Ratio metrics รายผู้ใช้ (Per-user Ratio metrics)

ตัวอย่าง ratio metrics: click-through-rate และ revenue per session

A/B Testing ด้วย Python

แรงจูงใจในการใช้ delta method

print(checkout.groupby('checkout_page')[['order_value','purchased']].agg({'sum','count','mean'}))
              order_value                     purchased              
                     mean           sum count      mean     sum count
checkout_page                                                        
A               24.956437  61417.791564  2461  0.820333  2461.0  3000
B               29.876202  75915.430125  2541  0.847000  2541.0  3000
C               34.917589  90890.484142  2603  0.867667  2603.0  3000
checkout.groupby('checkout_page')['order_value'].sum()/
checkout.groupby('checkout_page')['purchased'].count()
checkout_page
A    20.472597
B    25.305143
C    30.296828
dtype: float64
A/B Testing ด้วย Python

ความแปรปรวนของ delta method

  • การประมาณค่าความแปรปรวนของ ratio metrics ด้วย delta method:{

สูตรความแปรปรวนของ delta method

# Delta method variance of ratio metric
def var_delta(x,y): 
    x_bar = np.mean(x)
    y_bar = np.mean(y)
    x_var = np.var(x,ddof=1)
    y_var = np.var(y,ddof=1)
    cov_xy = np.cov(x,y,ddof=1)[0][1]
    # Note that we divide by len(x) here because the denominator of the test statistic is standard error (=sqrt(var/n))
    var_ratio = (x_var/y_bar**2 + y_var*(x_bar**2/y_bar**4) - 2*cov_xy*(x_bar/y_bar**3))/len(x)
    return var_ratio
1 Budylin, Roman & Drutsa, Alexey & Katsev, Ilya & Tsoy, Valeriya. (2018). Consistent Transformation of Ratio Metrics for Efficient Online Controlled Experiments. 55-63. 10.1145/3159652.3159699.
A/B Testing ด้วย Python

Delta method z-test

# Delta method ztest calculation 
ztest_delta(x_control,y_control,x_treatment,y_treatment, alpha = 0.05)

อาร์กิวเมนต์ที่รับเข้า:

  • x_control: คอลัมน์ตัวเศษของ ratio metric ระดับผู้ใช้สำหรับกลุ่ม control
  • y_control: คอลัมน์ตัวส่วนของ ratio metric ระดับผู้ใช้สำหรับกลุ่ม control
  • x_treatment: คอลัมน์ตัวเศษของ ratio metric ระดับผู้ใช้สำหรับกลุ่ม treatment
  • y_treatment: คอลัมน์ตัวส่วนของ ratio metric ระดับผู้ใช้สำหรับกลุ่ม treatment
  • alpha: ระดับนัยสำคัญ

ผลลัพธ์ที่ได้:

  • mean_control: ค่าเฉลี่ย ratio metric ของกลุ่ม control
  • mean_treatment: ค่าเฉลี่ย ratio metric ของกลุ่ม treatment
  • difference: ความแตกต่างระหว่างค่าเฉลี่ยของกลุ่ม treatment และ control
  • diff_CI: ช่วงความเชื่อมั่นของความแตกต่างในค่าเฉลี่ย
  • p-value: ค่า p-value แบบ two-tailed z-test
1 https://medium.com/@ahmadnuraziz3/applying-delta-method-for-a-b-tests-analysis-8b1d13411c22
A/B Testing ด้วย Python

ตัวอย่างใน Python

# Create DataFrames for per user metrics for variants A and B
A_per_user = pd.DataFrame({'order_value':checkout[checkout['checkout_page']=='A'].groupby('user_id')['order_value'].sum()
                            ,'page_view':checkout[checkout['checkout_page']=='A'].groupby('user_id')['user_id'].count()})
B_per_user = pd.DataFrame({'order_value':checkout[checkout['checkout_page']=='B'].groupby('user_id')['order_value'].sum()
                           ,'page_view':checkout[checkout['checkout_page']=='B'].groupby('user_id')['user_id'].count()})

# Assign the control and treatment ratio columns
x_control = A_per_user['order_value']
y_control = A_per_user['page_view']
x_treatment = B_per_user['order_value']
y_treatment = B_per_user['page_view']

# Run a z-test for ratio metrics
ztest_delta(x_control,y_control,x_treatment,y_treatment)
{'mean_control': 20.472597188012,
 'mean_treatment': 25.30514337484097,
 'difference': 4.833,
 'diff_CI': '[4.257, 5.408]',
 'p-value': 5.954978880467735e-61}
A/B Testing ด้วย Python

มาฝึกกันเถอะ!

A/B Testing ด้วย Python

Preparing Video For Download...