最近做了一個AB,有幾點經驗值得記錄一下。
背景
用戶每日都可以打卡到微信,引導關注公衆號。近期關注率有下降,懷疑與微信屏蔽有關,(微信抵制誘導分享引流到公衆號)。
因此申請一個新公衆號做測試,新老兩個公衆號內容均一致,觀測兩個公衆號的關注率是否有差異。
關注指標:關注用戶數/打卡用戶數
過程
AB實驗 1號上線,上線時全量切origin,2號開始1:1切
分析
step1
觀察當天新進入分組的用戶,在當天打卡發出的場景二維碼帶來的訂單。連續觀測多天數據,對每日即多日彙總數據進行假設檢驗
原假設: origin >= v2, 備則假設: origin < v2
p值 ≈ 0.002 <0.01,可以拒絕原假設,接受備則假設,即 新公衆號關注率高於老公衆號
##### 假設檢驗
n1 = c(3935,2329); d1 = c(304, 209)
n2 = c(2431,2538); d2 = c(180, 203)
n3 = c(2016,2015); d3 = c(146, 167)
n4 = c(1524,1475); d4 = c(122, 152)
alt = "less"
num_tests = 4
nt = 0; dt = 0;
for (i in 1:num_tests) {
nx = eval(parse(text = paste0("n",i)))
dx = eval(parse(text = paste0("d",i)))
nt = nt + nx; dt = dt + dx;
p = prop.test(n = nx, x = dx, conf.level = .9, alternative = alt)
cat('test result', i, ':', p$p.value, '\n')
if (i == num_tests) {
pt = prop.test(n = nt, x = dt, conf.level = .9, alternative = alt)
cat('test result for all :', pt$p.value)
}
}
test result 1 : 0.04517291
test result 2 : 0.2321899
test result 3 : 0.1186704
test result 4 : 0.01692163
test result for all : 0.002388452
然而,發現ab結論是v2高於origin,但從大盤看自AB上線開始,整體大盤的關注率卻在下降,需要進一步排查。
step2
首先,看AB分組是否平均,用戶質量是否有差異
對進入分組的用戶進行維度拆分,查看各維度AB兩組分佈是否均勻。
觀察城市等級、平臺、年齡、性別等維度後分布都均勻
其次,這部分是重點
思考AB是否無偏差,而是真的AB
以這個案例來說,用戶每天都可以打卡,可能存在很多人關注過老的公衆號, 所以開新號的效率高一些。
爲驗證該想法,查看數據,發現關注新號的用戶中,12% 關注過老號 查詢SQL。對於這部分已關注老號的用戶,本身可能意願較強,看到新號也願意關注看看。
所以這個AB是有偏的,爲矯正這部分偏差,排除v2關注用戶中之前已關注過老號的用戶。
再將結果進行假設檢驗,發現兩組用戶無顯著差異.