數據分析師必知必會:AB測試項目覆盤(附PPT、python源碼)

↑ 點擊上方 凹凸數據” 關注 + 星標 ~ 

每天更新,大概率是晚9點  


近期和團隊完成了一次AB測試,期間發現有些小夥伴對AB測試的理解還不夠透徹,剛好項目結束,結合實際情況,對AB測試做一次完整梳理,一方面算是覆盤實際項目,另一方面也算是個總結,以幫助更多的初級數據分析師快速掌握一些高階方法,促進晉升。

在做AB測試時,如果你沒有想過需要做一些假設檢驗,或者是統計分佈,那更應該好好看看這篇文章,這裏不僅是理論框架,以及實操中的注意事項,還有一個完整實例數據案例,建議收藏,在實操時可以跟着一步步操作,更能加強理解(文末附數據來源)。

本篇文章共分爲四個部分:走進AB測試、拓展AB測試、實戰AB測試以及代碼實操

目錄

首先進入第一部分:

1、走進AB測試

第 1 部分:走進AB測試
AB測試來源

AB測試最早來源於醫學中的“雙盲測試”,即讓隨機產生的兩組病人,在不知情的情況下分別服用安慰劑和測試用藥,經過一段時間觀察,比較兩組病人是否具有顯著差異,以決定測試用藥是否有效。

AB測試要點

針對定義分析可以看出,AB測試的關鍵要求爲“同一時間維度”和“成分相同(相似)的訪客羣組”,通過“收集用戶體驗數據和業務數據”,以“分析評估最好版本正式採用”。

AB測試應用場景

AB測試的主要應用場景一共有兩個:界面設計、算法優化。

  • 界面設計:調整界面顏色、按鈕顏色、界面外觀等因素,通過視覺效果達到吸引用戶的作用。

例如:在界面設計方面,早期重點推薦的是寫實風格,即頁面中的元素更逼真化,而近幾年的界面設計更偏向於扁平風格,雖然不是逼真如實物,也能讓用戶快速判斷圖標的作用;早期比較推崇的是單一顏色的界面風格,而近幾年,漸變色風格逐漸開始佔據一定地位。

  • 算法優化:重點針對頁面中顯示的元素進行優化,如根據推薦算法向用戶推薦一些高頻搜索或者關注的內容,或者調整不同小版塊的出現順序或者所在位置,幫助用戶在最短時間內到達自己需要的功能。

例如:在算法上,在微信上使用任何主要功能時,操作基本上都控制在3個操作步驟以內。

AB測試實施步驟

AB測試從計劃開始到最終結束,主要分爲7個步驟。

測試流程

想要推進AB測試,切不能一次性給全部用戶推進,如果最初設定的優化方向後期需要調整,那帶給公司的損失是不可估量的。

AB測試推進節奏

推進AB測試時,不僅要考慮推進節奏,還有注意以下三個問題:

AB測試注意事項(一)
AB測試注意事項(二)
AB測試注意事項(三)

經過以上的學習,只是掌握了AB測試中最爲基本的部分,要想深入理解AB測試,還需要對其進行深層次理解,接下來就開始第二部分:

2、拓展AB測試

第 2 部分:拓展AB測試

在計劃推進AB測試時,如果在同一個上有多個優化方案,如在設計登錄界面的按鈕顏色時,可以一次性測試多個顏色對用戶的影響,此時需要推行的就是AB測試的升級版本——ABN測試了。

ABN測試

在進行AB測試時,可能會有各種情況會對最終的結果產生影響,因此,可以使用AA測試,以及其升級版本——ANB測試方式進行推進,避免偶然因素對目標產生誤差。

ANB測試

既然AB測試能爲產品的優化帶來極大的益處,那麼快速迭代就能幫助企業更快發展,對此,可以針對多個維度同時進行AB測試,這也就是爲什麼有些公司一年內能對同一款產品完成上千次AB測試。

什麼,你沒有感受到AB測試對你的影響,怎麼可能這麼多?那就對了,有些測驗版本也不能保證有效,故此只有一小部分用戶體驗到了,絕大部分用戶是不會知道的,作爲用戶的你就不會感受到了。

具體如何實施呢,看看下面的介紹:

多維測試

但是這樣的測試有一個弊端,那就是每個測試羣中的用戶數量較少,不一定能反映真實用戶情況,故此,需要進行改進:

多維測試優化

那麼作爲數據分析師,在AB測試中需要擔任什麼樣的角色,以及在每一個環節中,需要完成哪些任務,注意哪些問題呢?

任務與職責(數據分析師)
任務與職責 - 專題分析
任務與職責 - 優化方向
任務與職責 - 分析體系
任務與職責 - 流量分配
任務與職責 - 測試優化
任務與職責 - 分析總結
任務與職責 - 文件歸檔

以上,我們對數據分析的內容已經瞭解的比較深入了,也明確了作爲數據分析師在進行AB測試時需要完成哪些任務與要求,在本篇的最後,將會使用一個實際案例的數據帶你認識具體需要如何操作。

一起走進第三部分:實戰AB測試。

3、實戰AB測試

本部分先是對整個實操過程進行了一次框架講解,最後附所有代碼腳本、講解以及數據。

第 3 部分:實戰AB測試

開始實操之初,先對數據的商業背景做一個完整的認識:

商業理解

作爲數據分析師,一定要認真理解數據情況:

數據理解

面對本次數據,經過查驗,需要作出以下優化:

數據整理

結合上述對數據的理解,以及對業務環境的熟悉,制定了以下數據分析步驟:

數據分析

在完成數據分析之後,最終得到了以下結論:

形成結論

最終經過分析,建議延長本次AB測試的時間,繼續觀察再確定結論。

4、代碼實操

接下來是代碼實操部分:

1)導入相關Python庫

import numpy as np
import pandas as pd

2)導入數據並查看前5行

# 導入數據
df = pd.read_csv('ab_data.csv')

# 查看數據前5行
df.head()
前5行數據情況

3)查看數據形狀

# 查看數據大小
df.shape

(294478, 5)

4)查看數據信息

# 查看數據信息
df.info()
數據信息

5)查看缺失值

# 查看缺失值
df.isnull().sum()  # 沒有缺失值
缺失值信息

6)基於業務理解校驗數據

# 查看對於treatment和 new_page,或者control和old_page會出現不一致的行
df.loc[(df['group'] == 'treatment') != (df['landing_page'] == 'new_page')].count()
無效數據

7)剔除無效數據

# 去除無效數據,並將其賦值到df2中
df2 = df.loc[~((df['group'] == 'treatment') != (df['landing_page'] == 'new_page'))]
df2.count()
保留有效數據

8)校驗重複值

# 查看是否有重複數據
df2.user_id.nunique()   # 從用戶ID確定有重複數據

# 查看重複的用戶ID,以及相關信息
df2[df2['user_id'].duplicated(keep=False)]    # 重複的用戶ID爲773192
重複用戶數據

9)刪除重複值,並查看數據情況

# 刪除重複值
df2 = df2.drop_duplicates(subset=['user_id'], keep='first')  # 保留重複項中的第一項

# 查看df2的形狀
print(df2.shape)

# 查看df2中是否還有重複值
print(df2.user_id.nunique())

(290584, 5)

290584

10)計算用戶轉化率

# 整體轉化率
df2['converted'].mean()  #整體轉化率爲11.96%

0.11959708724499628
# 新頁面轉化率
df2[df2['landing_page'] == 'new_page']['converted'].mean()   # 新頁面的轉化率爲11.88%

0.11880806551510564
# 舊頁面轉化率
df2[df2['landing_page'] == 'old_page']['converted'].mean()   # 舊頁面的轉化率爲12.04%

0.1203863045004612
# 用戶收到新頁面的概率
df2[df2['landing_page'] == 'new_page'].shape[0] / df2.shape[0]   # 用戶收到新頁面的概率爲50%

0.5000619442226688

通過以上數據可以看出:整體頁面轉化率爲11.96%,新頁面轉化率爲11.88%,舊頁面的轉化率爲12.04%,用戶收到新舊頁面的概率參半。

看似使用舊頁面效果更好,是本身就是如此,還是由於一些隨機因素導致的呢?對此需要進行顯著性檢驗:

11)設計AB測試

由於目標是新頁面轉化率高於舊頁面轉化率,設計原假設和備擇假設如下:

H0: P_new - P_old <= 0

H1: P_new - P_old > 0

# 新頁面轉化率
p_new = df2[df2['landing_page'] == 'new_page']['converted'].mean()
p_new

0.11880806551510564
# 舊頁面轉化率
p_old = df2[df2['landing_page'] == 'old_page']['converted'].mean()
p_old

0.1203863045004612
# 新頁面數量
n_new = df2[df2['landing_page'] == 'new_page'].shape[0]
n_new

145310
# 舊頁面數量
n_old = df2[df2['landing_page'] == 'old_page'].shape[0]
n_old

145274
# 引入SciPy庫
from scipy.stats import norm

# 計算顯著性檢驗Z值
z_score = (p_old - p_new) / np.sqrt(p_old * (1 - p_old) / n_old + p_new * (1 - p_new) / n_new)
z_score

1.3109271488301917
# 計算置信區間
norm.ppf(1-0.05)

1.6448536269514722

結論:由於z_score=1.31小於norm.ppf(1-0.05)=1.64,落在95%的置信區間中,所以無法拒絕原假設,建議延長測試時間,繼續觀測情況。

以上,是對AB測試做完了一次完整的梳理,歡迎大家繼續關注。

如果對本文源數據、源碼感興趣,網頁打開鏈接直接下載  

https://alltodata.cowtransfer.com/s/b6eddb13746642

後臺回覆「進羣」,加入讀者交流羣~

點擊紅字積分瞭解積分規則~

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章