支付宝营销策略效果分析(AB测试原理与流程)
案例文件與代碼下載地址:DataScience
目標:以支付寶某次營銷活動的數據為例,通過分析廣告點擊率,比較兩組營銷策略的廣告投放效果
數據準備
import pandas as pd import numpy as np import matplotlib.pyplot as plt import seaborn as sns數據描述
- dmp_id:營銷策略編號(源數據文檔未作說明,這里根據數據情況設定為1:對照組,2:營銷策略一,3:營銷策略二)
- user_id:支付寶用戶ID
- label:用戶當天是否點擊活動廣告(0:未點擊,1:點擊)
| 1 | 1000004 | 0 | 1 |
| 1 | 1000004 | 0 | 2 |
| 1 | 1000006 | 0 | 1 |
| 1 | 1000006 | 0 | 3 |
| 1 | 1000007 | 0 | 1 |
刪除重復行
重復的多條數據,會影響最終的計算比例,對結果造成干擾
data.drop_duplicates(inplace=True) data.shape (2632974, 3)查看是否有缺失值
data.isnull().sum() user_id 0 label 0 dmp_id 0 dtype: int64處理重復用戶
可能存在一個用戶多次點擊的情況,這種情況下,多次點擊的用戶的用戶群體的權重就會增大,導致結果出現誤差。
(data.user_id.value_counts() > 1).sum() 201265 data = data.drop_duplicates(subset=['user_id'])確定樣本量
計算對照組的廣告點擊率
data[data.dmp_id == 1].label.mean() 0.012551019015964006計算樣本量:網頁鏈接
輸入:
不同營銷組的樣本量
data.dmp_id.value_counts() 1 1905662 2 411107 3 316205 Name: dmp_id, dtype: int64可以看到樣本量均符合要求
方法1:假設檢驗
不同策略的廣告點擊率
data.groupby(['dmp_id'])['label'].mean().plot(kind='bar') <matplotlib.axes._subplots.AxesSubplot at 0x1bfbfee9280>假設檢驗
當樣本量>30時,均可認為樣本為大樣本,使用Z檢驗
H 0 : p 對 照 組 ≥ p 實 驗 組 H0:p_{對照組}\ge p_{實驗組} H0:p對照組?≥p實驗組?
H 1 : p 對 照 組 < p 實 驗 組 H1:p_{對照組}\lt p_{實驗組} H1:p對照組?<p實驗組?(我們想證明的結論)
# 對照組樣本數量 n_control = data[data.dmp_id==1].shape[0] # 營銷活動二的樣本數量 n_test = data[data.dmp_id==3].shape[0]c_control = data[(data.dmp_id==1) & (data.label==1)].shape[0]c_test = data[(data.dmp_id==3) & (data.label==1)].shape[0]# 對照組的廣告點擊率 r_control = c_control/n_control # 營銷活動二樣本數量 r_test = c_test/n_test from statsmodels.stats.proportion import proportions_ztestz_score,p = proportions_ztest([c_control,c_test],[n_control,n_test])print("檢驗統計量z:",z_score,",p值:", p) 檢驗統計量z: -59.44164223047762 ,p值: 0.0結論
計算得到P值為0.0<0.05,因此否定原假設,認為備擇假設成立,營銷活動對廣告點擊率有明顯的提升。
方法二:蒙特卡洛法
通過假設對照組和實驗組之間的廣告點擊率不存在差異,按照樣本數量進行多次抽樣模擬,從而得到一個新的樣本,然后計算實驗組和對照組的指標差,得到一個指標差的分布。
通過判斷原始樣本中實驗組和對照組的指標差,在生成樣本之間的罕見比例,從而可以判斷A/B測試的結果是否顯著。
# 假設所有策略的點擊率一樣 p_all = data.label.mean() p_all 0.014620729259005216模擬抽樣
diff = []for i in range(1000):p_new_diff = np.random.choice(2,size = n_test,p=[1-p_all,p_all]).mean()p_old_diff = np.random.choice(2,size = n_control,p=[1-p_all,p_all]).mean()diff.append(p_old_diff - p_new_diff) diffs = np.array(diff) plt.hist(diffs) plt.axvline(r_control-r_test) <matplotlib.lines.Line2D at 0x1bfc798b250> (diffs < r_control-r_test).mean() 0.0結果
如上圖所示,柱狀圖部分是蒙特卡洛方法模擬出來的 ( p 對 照 組 ? p 實 驗 組 ) (p_{對照組}-p_{實驗組}) (p對照組??p實驗組?)的分布情況,左邊的線表示了實際測驗時的 ( p 對 照 組 ? p 實 驗 組 ) (p_{對照組}-p_{實驗組}) (p對照組??p實驗組?),可以看到只有0%的樣本落在了垂線的左邊,因此可以認為實驗結果顯著
A/B測試的其他知識
A/B測試流程
一個完整的A/B test主要包括如下幾部分:
1、分析現狀,建立假設:分析業務,確定最高優先級的改進點,作出假設,提出優化建議。
2、設定指標:設置主要指標來衡量版本的優劣;設置輔助指標來評估其他影響。
3、設計與開發:設計優化版本的原型并完成開發。
4、確定測試時長:確定測試進行的時長。
5、確定分流方案:確定每個測試版本的分流比例及其他分流細節。
6、采集并分析數據:收集實驗數據,進行有效性和效果判斷。
7、給出結論:①確定發布新版本;②調整分流比例繼續測試;③優化迭代方案重新開發,回到步驟1。
A/B注意點
注意點:
-
同時性:分流應該是同時的,測試的進行也應該是同時的。
-
同質性:也可以說是相似性,是要求分出的用戶群,在各維度的特征都相似。可以基于用戶的設備特征(例如手機機型、操作系統版本號、手機語言等)和用戶的其他標簽(例如性別、年齡、新老用戶、會員等級等)進行分群,每一個A/B測試試驗都可以選定特定的用戶群進行試驗。
- 判斷同質性的方法:
- AAB測試,對兩組對照組的結果進行方差檢驗,判斷結果是否存在差異
- 判斷同質性的方法:
-
唯一性:即要求用戶不被重復計入測試。
-
均勻性:要求各組流量是均勻的。
參考資料:
Analyse ab testing results
一文入門A/B測試(含流程、原理及示例) - 寐語的文章 - 知乎
總結
以上是生活随笔為你收集整理的支付宝营销策略效果分析(AB测试原理与流程)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 百度贴吧图片爬取,利用 pillow 将
- 下一篇: 如何使用 Win32 Disk Imag