首頁技術文章正文

什么是AB測試?AB測試如何實現?

更新時間:2020-07-15 來源:黑馬程序員 瀏覽量:

1594804324548_AB測試01.jpg


讓我們想象一下,在公司的某產品研發(fā)討論會上……

“這個功能要不要上?”

“我覺得沒問題,XX指標肯定能漲一大截?!?/p>

“我不這么想,XX指標說不定也會受到影響,你不能只想著可能的收益呀。”

blahblah無限循環(huán)爭吵中……

“好啦,別吵了,讓我們開個AB看一下效果吧。”

當現在越來越多的app都已經日活百萬千萬,新功能是絕對不敢、也絕無必要輕易上線的。(因為一旦全量上線引起用戶反感,損失不可估計。)這個時候,AB實驗就成為了大型功能上線前的必備利器——進行小流量的測試,利用測試的效果來預估上線后的效果。

1.什么是AB測試?

隨著移動互聯(lián)網流量紅利、人口紅利的逐漸衰退,越來越多的產品運營開始關注數據驅動的精細化運營方法,期望通過精細化運營在一片紅海中繼續(xù)獲得確定的用戶增長,而A/B測試就是一種有效的精細化運營手段。

A/B測試 是為 web 或 app 界面或流程制作兩個(A/B)或多個版本,在同一時間維度,分別讓組成成分相同(相似)的訪客群組(目標人群)隨機的訪問這些版本,收集各群組的用戶體驗數據和業(yè)務數據,最后分析、評估出最好版本,正式采用。

1594804334089_AB測試02.jpg


2008年奧巴馬競選美國總統(tǒng)的時候,有一個互聯(lián)網團隊專門負責競選相關活動的線上產品,例如奧巴馬的競選募捐網站。這個網站最核心的目標是:讓網站的訪客完成注冊并募捐競選資金。這個團隊當時做了一個非常成功的實驗:通過對6個不同風格的主頁進行AB測試,最優(yōu)的版本將網站注冊轉化率提升了40.6%,而這40.6%的新增用戶直接帶來了額外的5700萬美金募捐資金!

1594804342850_AB測試03.jpg


2.AB測試舉例

案例1:相機拍照類應用

1594804352199_AB測試04.jpg

以Camera360為案例,它選用Testin A/B測試服務幫助其進行產品優(yōu)化決策。該案例是其產品商業(yè)化過程中的一個嘗試,希望提升商店中表情包或道具的付費比例,但要完成付費指標,首先要提升商店入口點擊率。所以,他們設定了多個商店入口方案(更改圖標樣式、文案),通過A/B測試來驗證哪個方案可以最大化提升商店入口點擊率。在驗證過程中,他們也針對人群目標做了相關定向測試,如日本、中國、韓國等區(qū)域,最終他們針對這一入口同時上線7~8個測試版本,通過A/B測試,將整體點擊率提升了80%左右。


案例2

1594804365472_AB測試05.jpg


試驗目標:期望通過更改簽到按鈕的文案提高簽到的人數,從而提高留存率。

·新版本簽到按鈕平均點擊次數高于原始版本

·新版本的簽到次數比原始版本簽到次數提高4.17%

95%置信區(qū)間結果顯示小范圍人群的試驗結果推廣到全量用戶之后,有95%概率獲得1.7% 至 6.6%的提升;p-value小于0.05,顯示新老版本有顯著統(tǒng)計差異。

試驗過程:簽到按鈕文案試驗,流量第一天兩個版本各5%,第二天無錯誤后調節(jié)成50%原始版,50%新版本。

1594804374447_AB測試06.jpg


案例3:文案修改提升購買率

1594804384062_AB測試07.jpg


A/B測試目的:提升購買率指標

A/B測試實驗設計:

1.對用戶來說,核心觸發(fā)是預期收益率后邊的引導按鈕。

2.經過團隊頭腦風暴,認為用戶在感知“理財”、“存入”兩者之間會有不同考量。一部分團隊成員傾向于理財文案,另一部分提出新的想法,“存入”文案更能降低用戶對“理財”本身的風險意識。

3.設計了兩個版本,用立即理財,與立即存入兩個文案。

4.實驗進行2周,并得出顯著性結果。

1594804396003_AB測試08.jpg

可見,實驗存在顯著性差異。同時轉化率提升15.45%,并且置信區(qū)間在客戶能接受范圍內。該實驗,取得成功。

3.A/B測試的好處

·消除客戶體驗(UX)設計中不同意見的紛爭,根據實際效果確定最佳方案;

·通過對比試驗,找到問題的真正原因,提高產品設計和運營水平;

·建立數據驅動、持續(xù)不斷優(yōu)化的閉環(huán)過程;

·通過A/B測試,降低新產品或新特性的發(fā)布風險,為產品創(chuàng)新提供保障。

4.AB測試的基本步驟

AB測試是一個反復迭代優(yōu)化的過程,它的基本步驟如下圖所示可以劃分為:

1594804405653_AB測試09.jpg


1)現狀分析并建立假設:分析業(yè)務數據,確定當前最關鍵的改進點,作出優(yōu)化改進的假設,提出優(yōu)化建議;比如說我們發(fā)現用戶的轉化率不高,我們假設是因為推廣的著陸頁面帶來的轉化率太低,下面就要想辦法來進行改進了

2)設定目標,制定方案:設置主要目標,用來衡量各優(yōu)化版本的優(yōu)劣;設置輔助目標,用來評估優(yōu)化版本對其他方面的影響。

3)設計與開發(fā):制作2個或多個優(yōu)化版本的設計原型并完成技術實現:

1594804414440_AB測試10.jpg


4)分配流量:確定每個線上測試版本的分流比例,初始階段,優(yōu)化方案的流量設置可以較小,根據情況逐漸增加流量。


1594804423541_AB測試11.jpg


5)采集并分析數據:收集實驗數據,進行有效性和效果判斷:統(tǒng)計顯著性達到95%或以上并且維持一段時間,實驗可以結束;如果在95%以下,則可能需要延長測試時間;如果很長時間統(tǒng)計顯著性不能達到95%甚至90%,則需要決定是否中止試驗。

1594804432707_AB測試12.jpg


北極星指標(North Star Metric),也叫作第一關鍵指標(One Metric That Matters),是指在產品的當前階段與業(yè)務/戰(zhàn)略相關的絕對核心指標,一旦確立就像北極星一樣閃耀在空中,指引團隊向同一個方向邁進(提升這一指標)。

6)做出決策:根據試驗結果確定發(fā)布新版本、調整分流比例繼續(xù)測試或者在試驗效果未達成的情況下繼續(xù)優(yōu)化迭代方案重新開發(fā)上線試驗。

5.A/B測試的原理——假設檢驗

1594804441353_AB測試13.jpg



因為AB測試是檢驗來自兩個組樣本平均數的差異性,從而判斷它們各自代表的總體的差異是否顯著,因此使用的是兩個總體均值之差的檢驗。

統(tǒng)計量:

1594804450156_AB測試14.jpg



6.AB測試案例

6.1 案例背景

某公司給網站投放廣告的時候,一開始給用戶看到的落地頁是訪問課程資料,現在公司又推出了開始免費試學這個落地頁,現在需要檢驗新落地頁是否優(yōu)于舊的落地頁。

假設:新落地頁的轉化率優(yōu)于舊落地頁

制定方案、設計開發(fā):已完成

分配流量:通過對userid進行hash,將用戶分成兩組old_page和new_page

采集數據:下面是測試的24天數據:

1594804469387_AB測試15.jpg

user_id是用戶的id;

timestamp 是用戶訪問頁面的時間;

group 表示把新的落地頁分到treatment組、把舊的落地頁分到了control組;

landing_page表示的是落地頁;

converted 表示的是否轉化,1表示轉化;

6.2 代碼實現

·導包
import pandas as pd

·加載數據

# 讀取數據,查看前5行

df = pd.read_csv("ab_test.csv")

df.head()

# 數據預覽,查看數據有多少行、多少列

df.shape


# 查看數據中是否有空值

df.isnull().any()

df.info()


·去掉錯誤行
treatment和new_page對應,control和old_page對應,如果不對應,就是錯誤數據,需要去掉。

# 下面這句代碼,展示的就是group=treatment且landing_page=old_page和group=control且landing_page=new_page,這樣的錯誤行;

num_error = df[(df.group == "treatment")!=(df.landing_page == "new_page")].shape[0]

num_error

# 去掉錯誤行后,再次查看是否還存在錯誤行

print("沒有刪除錯誤行之前的記錄數:", df.shape[0])

df2 = df[(df.group == "treatment")==(df.landing_page == "new_page")]

print("刪除錯誤行之后的記錄數:", df2.shape[0])

print("錯誤行共有",str(df.shape[0]-df2.shape[0]),"條記錄")

num_error2 = df2[((df2.group == "treatment")!=(df2.landing_page == "new_page"))].shape[0]

num_error2

·去除重復數據

# 查看是否有重復行

print("數據的記錄數為:", df2.user_id.shape[0])

print("將user_id去重計數后的記錄數為:", df2.user_id.nunique())


#  去除重復的行

df3 = df2.drop_duplicates(subset=["user_id"],keep="first")

df3.shape[0]



·觀察兩組的轉化率

A = df3.query('group=="control"').converted#對照組

B = df3.query('group=="treatment"').converted#實驗組

print('策略A的均值是:',A.mean())

print('策略B的均值是:',B.mean())


1594804495126_AB測試16.jpg


思考一下:根據上述結果,老頁面的轉化率比新頁面的轉換率好,是不是就可以說明老頁面好呢?

·假設檢驗

·建立原假設和備擇假設

    由于我們期望的是新方案由于舊方案,故建立如下假設

    原假設:$$\bar{X}B-\bar{X}A\leq0$$

    備擇假設:$$\bar{X}B-\bar{X}A>0$$

·選擇統(tǒng)計量

    由于$$n_A$$和$$n_B$$都大于30,故為大樣本,選擇Z統(tǒng)計量做Z檢驗

·使用scipy.stats完成檢驗

import scipy.stats

z, pval = scipy.stats.ttest_ind(B,A)  #表示B-A

print(z,pval)#-1.3109235634981506 0.18988462498742617


根據 scipy.stats.ttest_ind(x, y) 文檔的解釋,這是雙邊檢驗的結果。為了得到單邊檢驗的結果,需要將 計算出來的 pvalue 除于2 取單邊的結果(這里取閾值為0.05)。

·做出決策

求得pvalue=0.18988462498742617,p/2 > alpha(0.05),所以不能夠拒絕假設,暫時不能夠認為新落地頁能帶來多的用戶轉化。

我們需要再延長觀測時間或是修改新的頁面再進行測試了

猜你喜歡:
Python+人工智能課程
Python基礎教程下載

分享到:
在線咨詢 我要報名
和我們在線交談!