更新時(shí)間:2020年07月29日15時(shí)28分 來源:傳智播客 瀏覽次數(shù):
讓我們想象一下,在公司的某產(chǎn)品研發(fā)討論會(huì)上……
“這個(gè)功能要不要上?”
“我覺得沒問題,XX指標(biāo)肯定能漲一大截。”
“我不這么想,XX指標(biāo)說不定也會(huì)受到影響,你不能只想著可能的收益呀。”
blahblah無限循環(huán)爭(zhēng)吵中……
“好啦,別吵了,讓我們開個(gè)AB看一下效果吧。”
當(dāng)現(xiàn)在越來越多的app都已經(jīng)日活百萬千萬,新功能是絕對(duì)不敢、也絕無必要輕易上線的。(因?yàn)橐坏┤可暇€引起用戶反感,損失不可估計(jì)。)這個(gè)時(shí)候,AB實(shí)驗(yàn)就成為了大型功能上線前的必備利器——進(jìn)行小流量的測(cè)試,利用測(cè)試的效果來預(yù)估上線后的效果。
1.什么是AB測(cè)試?
隨著移動(dòng)互聯(lián)網(wǎng)流量紅利、人口紅利的逐漸衰退,越來越多的產(chǎn)品運(yùn)營(yíng)開始關(guān)注數(shù)據(jù)驅(qū)動(dòng)的精細(xì)化運(yùn)營(yíng)方法,期望通過精細(xì)化運(yùn)營(yíng)在一片紅海中繼續(xù)獲得確定的用戶增長(zhǎng),而A/B測(cè)試就是一種有效的精細(xì)化運(yùn)營(yíng)手段。
A/B測(cè)試 是為 web 或 app 界面或流程制作兩個(gè)(A/B)或多個(gè)版本,在同一時(shí)間維度,分別讓組成成分相同(相似)的訪客群組(目標(biāo)人群)隨機(jī)的訪問這些版本,收集各群組的用戶體驗(yàn)數(shù)據(jù)和業(yè)務(wù)數(shù)據(jù),最后分析、評(píng)估出最好版本,正式采用。
2008年奧巴馬競(jìng)選美國(guó)總統(tǒng)的時(shí)候,有一個(gè)互聯(lián)網(wǎng)團(tuán)隊(duì)專門負(fù)責(zé)競(jìng)選相關(guān)活動(dòng)的線上產(chǎn)品,例如奧巴馬的競(jìng)選募捐網(wǎng)站。這個(gè)網(wǎng)站最核心的目標(biāo)是:讓網(wǎng)站的訪客完成注冊(cè)并募捐競(jìng)選資金。這個(gè)團(tuán)隊(duì)當(dāng)時(shí)做了一個(gè)非常成功的實(shí)驗(yàn):通過對(duì)6個(gè)不同風(fēng)格的主頁(yè)進(jìn)行AB測(cè)試,最優(yōu)的版本將網(wǎng)站注冊(cè)轉(zhuǎn)化率提升了40.6%,而這40.6%的新增用戶直接帶來了額外的5700萬美金募捐資金!
2.AB測(cè)試舉例
案例1:相機(jī)拍照類應(yīng)用
以Camera360為案例,它選用Testin A/B測(cè)試服務(wù)幫助其進(jìn)行產(chǎn)品優(yōu)化決策。該案例是其產(chǎn)品商業(yè)化過程中的一個(gè)嘗試,希望提升商店中表情包或道具的付費(fèi)比例,但要完成付費(fèi)指標(biāo),首先要提升商店入口點(diǎn)擊率。所以,他們?cè)O(shè)定了多個(gè)商店入口方案(更改圖標(biāo)樣式、文案),通過A/B測(cè)試來驗(yàn)證哪個(gè)方案可以最大化提升商店入口點(diǎn)擊率。在驗(yàn)證過程中,他們也針對(duì)人群目標(biāo)做了相關(guān)定向測(cè)試,如日本、中國(guó)、韓國(guó)等區(qū)域,最終他們針對(duì)這一入口同時(shí)上線7~8個(gè)測(cè)試版本,通過A/B測(cè)試,將整體點(diǎn)擊率提升了80%左右。
案例2
試驗(yàn)?zāi)繕?biāo):期望通過更改簽到按鈕的文案提高簽到的人數(shù),從而提高留存率。
·新版本簽到按鈕平均點(diǎn)擊次數(shù)高于原始版本
·新版本的簽到次數(shù)比原始版本簽到次數(shù)提高4.17%
95%置信區(qū)間結(jié)果顯示小范圍人群的試驗(yàn)結(jié)果推廣到全量用戶之后,有95%概率獲得1.7% 至 6.6%的提升;p-value小于0.05,顯示新老版本有顯著統(tǒng)計(jì)差異。
試驗(yàn)過程:簽到按鈕文案試驗(yàn),流量第一天兩個(gè)版本各5%,第二天無錯(cuò)誤后調(diào)節(jié)成50%原始版,50%新版本。
案例3:文案修改提升購(gòu)買率
A/B測(cè)試目的:提升購(gòu)買率指標(biāo)
A/B測(cè)試實(shí)驗(yàn)設(shè)計(jì):
1.對(duì)用戶來說,核心觸發(fā)是預(yù)期收益率后邊的引導(dǎo)按鈕。
2.經(jīng)過團(tuán)隊(duì)頭腦風(fēng)暴,認(rèn)為用戶在感知“理財(cái)”、“存入”兩者之間會(huì)有不同考量。一部分團(tuán)隊(duì)成員傾向于理財(cái)文案,另一部分提出新的想法,“存入”文案更能降低用戶對(duì)“理財(cái)”本身的風(fēng)險(xiǎn)意識(shí)。
3.設(shè)計(jì)了兩個(gè)版本,用立即理財(cái),與立即存入兩個(gè)文案。
4.實(shí)驗(yàn)進(jìn)行2周,并得出顯著性結(jié)果。
可見,實(shí)驗(yàn)存在顯著性差異。同時(shí)轉(zhuǎn)化率提升15.45%,并且置信區(qū)間在客戶能接受范圍內(nèi)。該實(shí)驗(yàn),取得成功。
3.A/B測(cè)試的好處
·消除客戶體驗(yàn)(UX)設(shè)計(jì)中不同意見的紛爭(zhēng),根據(jù)實(shí)際效果確定最佳方案;
·通過對(duì)比試驗(yàn),找到問題的真正原因,提高產(chǎn)品設(shè)計(jì)和運(yùn)營(yíng)水平;
·建立數(shù)據(jù)驅(qū)動(dòng)、持續(xù)不斷優(yōu)化的閉環(huán)過程;
·通過A/B測(cè)試,降低新產(chǎn)品或新特性的發(fā)布風(fēng)險(xiǎn),為產(chǎn)品創(chuàng)新提供保障。
4.AB測(cè)試的基本步驟
AB測(cè)試是一個(gè)反復(fù)迭代優(yōu)化的過程,它的基本步驟如下圖所示可以劃分為:
1)現(xiàn)狀分析并建立假設(shè):分析業(yè)務(wù)數(shù)據(jù),確定當(dāng)前最關(guān)鍵的改進(jìn)點(diǎn),作出優(yōu)化改進(jìn)的假設(shè),提出優(yōu)化建議;比如說我們發(fā)現(xiàn)用戶的轉(zhuǎn)化率不高,我們假設(shè)是因?yàn)橥茝V的著陸頁(yè)面帶來的轉(zhuǎn)化率太低,下面就要想辦法來進(jìn)行改進(jìn)了
2)設(shè)定目標(biāo),制定方案:設(shè)置主要目標(biāo),用來衡量各優(yōu)化版本的優(yōu)劣;設(shè)置輔助目標(biāo),用來評(píng)估優(yōu)化版本對(duì)其他方面的影響。
3)設(shè)計(jì)與開發(fā):制作2個(gè)或多個(gè)優(yōu)化版本的設(shè)計(jì)原型并完成技術(shù)實(shí)現(xiàn):
4)分配流量:確定每個(gè)線上測(cè)試版本的分流比例,初始階段,優(yōu)化方案的流量設(shè)置可以較小,根據(jù)情況逐漸增加流量。
5)采集并分析數(shù)據(jù):收集實(shí)驗(yàn)數(shù)據(jù),進(jìn)行有效性和效果判斷:統(tǒng)計(jì)顯著性達(dá)到95%或以上并且維持一段時(shí)間,實(shí)驗(yàn)可以結(jié)束;如果在95%以下,則可能需要延長(zhǎng)測(cè)試時(shí)間;如果很長(zhǎng)時(shí)間統(tǒng)計(jì)顯著性不能達(dá)到95%甚至90%,則需要決定是否中止試驗(yàn)。
北極星指標(biāo)(North Star Metric),也叫作第一關(guān)鍵指標(biāo)(One Metric That Matters),是指在產(chǎn)品的當(dāng)前階段與業(yè)務(wù)/戰(zhàn)略相關(guān)的絕對(duì)核心指標(biāo),一旦確立就像北極星一樣閃耀在空中,指引團(tuán)隊(duì)向同一個(gè)方向邁進(jìn)(提升這一指標(biāo))。
6)做出決策:根據(jù)試驗(yàn)結(jié)果確定發(fā)布新版本、調(diào)整分流比例繼續(xù)測(cè)試或者在試驗(yàn)效果未達(dá)成的情況下繼續(xù)優(yōu)化迭代方案重新開發(fā)上線試驗(yàn)。
5.A/B測(cè)試的原理——假設(shè)檢驗(yàn)
因?yàn)锳B測(cè)試是檢驗(yàn)來自兩個(gè)組樣本平均數(shù)的差異性,從而判斷它們各自代表的總體的差異是否顯著,因此使用的是兩個(gè)總體均值之差的檢驗(yàn)。
統(tǒng)計(jì)量:
6.AB測(cè)試案例
6.1 案例背景
某公司給網(wǎng)站投放廣告的時(shí)候,一開始給用戶看到的落地頁(yè)是訪問課程資料,現(xiàn)在公司又推出了開始免費(fèi)試學(xué)這個(gè)落地頁(yè),現(xiàn)在需要檢驗(yàn)新落地頁(yè)是否優(yōu)于舊的落地頁(yè)。
假設(shè):新落地頁(yè)的轉(zhuǎn)化率優(yōu)于舊落地頁(yè)
制定方案、設(shè)計(jì)開發(fā):已完成
分配流量:通過對(duì)userid進(jìn)行hash,將用戶分成兩組old_page和new_page
采集數(shù)據(jù):下面是測(cè)試的24天數(shù)據(jù):
user_id是用戶的id;
timestamp 是用戶訪問頁(yè)面的時(shí)間;
group 表示把新的落地頁(yè)分到treatment組、把舊的落地頁(yè)分到了control組;
landing_page表示的是落地頁(yè);
converted 表示的是否轉(zhuǎn)化,1表示轉(zhuǎn)化;
6.2 代碼實(shí)現(xiàn)
·導(dǎo)包
import pandas as pd
·加載數(shù)據(jù)
# 讀取數(shù)據(jù),查看前5行
df = pd.read_csv("ab_test.csv")
df.head()
# 數(shù)據(jù)預(yù)覽,查看數(shù)據(jù)有多少行、多少列
df.shape
# 查看數(shù)據(jù)中是否有空值
df.isnull().any()
df.info()
·去掉錯(cuò)誤行
treatment和new_page對(duì)應(yīng),control和old_page對(duì)應(yīng),如果不對(duì)應(yīng),就是錯(cuò)誤數(shù)據(jù),需要去掉。
# 下面這句代碼,展示的就是group=treatment且landing_page=old_page和group=control且landing_page=new_page,這樣的錯(cuò)誤行;
num_error = df[(df.group == "treatment")!=(df.landing_page == "new_page")].shape[0]
num_error
# 去掉錯(cuò)誤行后,再次查看是否還存在錯(cuò)誤行
print("沒有刪除錯(cuò)誤行之前的記錄數(shù):", df.shape[0])
df2 = df[(df.group == "treatment")==(df.landing_page == "new_page")]
print("刪除錯(cuò)誤行之后的記錄數(shù):", df2.shape[0])
print("錯(cuò)誤行共有",str(df.shape[0]-df2.shape[0]),"條記錄")
num_error2 = df2[((df2.group == "treatment")!=(df2.landing_page == "new_page"))].shape[0]
num_error2
·去除重復(fù)數(shù)據(jù)
# 查看是否有重復(fù)行
print("數(shù)據(jù)的記錄數(shù)為:", df2.user_id.shape[0])
print("將user_id去重計(jì)數(shù)后的記錄數(shù)為:", df2.user_id.nunique())
# 去除重復(fù)的行
df3 = df2.drop_duplicates(subset=["user_id"],keep="first")
df3.shape[0]
·觀察兩組的轉(zhuǎn)化率
A = df3.query('group=="control"').converted#對(duì)照組
B = df3.query('group=="treatment"').converted#實(shí)驗(yàn)組
print('策略A的均值是:',A.mean())
print('策略B的均值是:',B.mean())
思考一下:根據(jù)上述結(jié)果,老頁(yè)面的轉(zhuǎn)化率比新頁(yè)面的轉(zhuǎn)換率好,是不是就可以說明老頁(yè)面好呢?
·假設(shè)檢驗(yàn)
·建立原假設(shè)和備擇假設(shè)
由于我們期望的是新方案由于舊方案,故建立如下假設(shè)
原假設(shè):$$\bar{X}B-\bar{X}A\leq0$$
備擇假設(shè):$$\bar{X}B-\bar{X}A>0$$
·選擇統(tǒng)計(jì)量
由于$$n_A$$和$$n_B$$都大于30,故為大樣本,選擇Z統(tǒng)計(jì)量做Z檢驗(yàn)
·使用scipy.stats完成檢驗(yàn)
import scipy.stats
z, pval = scipy.stats.ttest_ind(B,A) #表示B-A
print(z,pval)#-1.3109235634981506 0.18988462498742617
根據(jù) scipy.stats.ttest_ind(x, y) 文檔的解釋,這是雙邊檢驗(yàn)的結(jié)果。為了得到單邊檢驗(yàn)的結(jié)果,需要將 計(jì)算出來的 pvalue 除于2 取單邊的結(jié)果(這里取閾值為0.05)。
·做出決策
求得pvalue=0.18988462498742617,p/2 > alpha(0.05),所以不能夠拒絕假設(shè),暫時(shí)不能夠認(rèn)為新落地頁(yè)能帶來多的用戶轉(zhuǎn)化。
我們需要再延長(zhǎng)觀測(cè)時(shí)間或是修改新的頁(yè)面再進(jìn)行測(cè)試了
猜你喜歡:
Python單例設(shè)計(jì)與企業(yè)級(jí)電商業(yè)務(wù)秒殺功能解決方案
什么是RNN?RNN可以做什么?
北京校區(qū)