案例實戰 | Python 玩轉 AB 測試中的分層抽樣與假設檢驗!(附代碼和數據集)

2021-02-08 Python綠色通道

↑ 關注 + 星標 ,每天學Python新技能
後臺回復【大禮包】送你Python自學大禮

作者:蘿蔔

今天給大家分享一篇AB測試乾貨~

本文會將原理知識穿插於代碼段中,相關代碼和數據集空降文末可以獲取。

前言

在電商網站 AB 測試非常常見,是將統計學與程序代碼結合的經典案例之一。儘管如此,裡面還是有許多值得學習和注意的地方。

A/B 測試用於測試網頁的修改效果(瀏覽量,註冊率等),測試需進行一場實驗,實驗中控制組為網頁舊版本,實驗組為網頁新版本,實驗還需選出一個指標來衡量每組用戶的參與度,然後根據實驗結果來判斷哪個版本效果更好。

通過這些測試,我們可以觀察什麼樣的改動能最大化指標,測試適用的改動類型十分廣泛,上到增加元素的大改動,下到顏色小變動都可使用這些測試。

背景

在本次案例研究中,我們將為教育平臺 「 不吹牛分析網 」 分析 A/B 測試的結果,以下是該公司網站的客戶漏鬥模型:瀏覽主頁 > 瀏覽課程概述頁面(課程首頁) > 註冊課程 > 付費並完成課程

越深入漏鬥模型,分析網就會流失越多的用戶(正常現象),能進入最後階段的用戶寥寥無幾。為了提高參與度,提高每個階段之間的轉化率,z哥試著做出一些改動,並對改動進行了 A/B 測試,我們將幫z哥分析相關測試結果,並根據結果建議是否該實現頁面改版。

因為利用 Python 進行 A/B 測試在每個數據集上的使用大同小異,所以我們這裡只展示課程首頁的A/B測試過程,其餘頁面的數據集會一併提供給大家作為練習。

Python實戰數據讀入
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
import seaborn as sns
plt.rc('font',**{'family':'Microsoft YaHei, SimHei'})

 # 設置中文字體的支持
# 實現 notebook 的多行輸出
from IPython.core.interactiveshell import InteractiveShell
InteractiveShell.ast_node_interactivity ='all' #默認為'last'
course = pd.read_csv('course_page_actions.csv')
course.info(); course.sample(5)

參數說明:

action:用戶行為,view--僅瀏覽;enroll--瀏覽並註冊duration:瀏覽界面時長(瀏覽越久,可能越感興趣,就越有可能註冊)註冊率分析

點擊率 (CTR: click through rate)通常是點擊數與瀏覽數的比例。因為網站頁面會使用 cookies,所以我們可以確認單獨用戶,確保不重複統計同一個用戶的點擊率。為了進行該實驗,我們對點擊率作出如下定義:CTR: 單獨用戶點擊數 /  單獨用戶瀏覽數,這一需要注意的點可以使用 pandas 中的 nunique() 函數來快捷完成

同理,實驗組的計算方式相同,結果分析如下:

根據已有數據,我們通常會猜測會不會是新界面更加能夠吸引用戶停留並瀏覽,從而達到用戶瀏覽時間越長,就越有可能註冊課程

瀏覽時長分析可視化分析

這裡的我們將使用 seaborn 結合 markdown 公式的方式來實現快捷又強大的數據可視化

結果分析

新界面的註冊率有所提高,而瀏覽時長方面均呈現輕微的右偏實驗組的瀏覽時長平均值比控制組高 15mins 左右,方差差別不大

所以我們可以初步判斷新改版的課程首頁更吸引用戶,後續將進行假設檢驗來進一步驗證我們的猜想

假設檢驗

我們將從控制組和實驗組中各抽取一定數量的樣本來進行假設檢驗,下面是置信水平 α 的選擇經驗:

樣本量過大,α-level 就沒什麼意義了。為了使假設檢驗的數據樣本更加合理,我們可以使用分層抽樣。Python 沒有現成的庫或函數,可以使用前人的輪子。

from mysampling import get_sample
# df: 輸入的數據框 pandas.dataframe 對象

# sampling:抽樣方法 str
 ## 可選值有 ["simple_random","stratified","systematic"]
 ## 按順序分別為: 簡單隨機抽樣、分層抽樣、系統抽樣
 
# stratified_col: 需要分層的列名的列表 list,只有在分層抽樣時才生效

# k: 抽樣個數或抽樣比例 int or float
    ## (int, 則必須大於0; float,則必須在區間(0,1)中)
    ## 如果 0< k <1, 則 k 表示抽樣對於總體的比例
    ## 如果 k >=1, 則 k 表示抽樣的個數;當為分層抽樣時,代表每層的樣本量

data =get_sample(df=course, sampling='stratified', 
                  stratified_col=['group'], k=300)
data.sample(4); data.info()

因為總體未知,所以我們可以使用兩獨立樣本 T 檢驗,其實雙樣本 Z 檢驗也能達到類似的效果

# 總體未知,可採用兩獨立樣本T檢驗
from scipy import stats

exp_duration = data.query('group == "experiment"')['duration']
con_duration = data.query('group == "control"')['duration']

print('兩獨立樣本 T 檢驗...')
stats.ttest_ind(a=exp_duration, b=con_duration)
print('-'*45)
print('雙樣本 Z 檢驗...')
import statsmodels.  api as sm
sm.stats.ztest(x1=exp_duration, x2=con_duration)

不難發現,有時雙樣本 Z 檢驗同樣可以達到兩獨立樣本 T 檢驗的效果。

綜述,我們將拒絕零假設,接受 「 新界面的瀏覽時長顯著不同於(高於)舊界面 」 的這個假設。

AB測試的不足

但 A/B 測試也有不足之處。雖然測試能幫你比較兩種選擇,但無法告訴你你還沒想到的選擇,在對老用戶進行測試時,抗拒改變心理、新奇效應等因素都可能使測試結果出現偏差。

抗拒改變心理:老用戶可能會因為純粹不喜歡改變而偏愛舊版本,哪怕從長遠來看新版本更好。新奇效應:老用戶可能會覺得變化很新鮮,受變化吸引而偏愛新版本,哪怕從長遠看來新版本並無益處。

所以在設計 A/B 測試、基於測試結果得出結論時都需要考慮諸多因素。下面總結了一些常見考慮因素:

要做出最佳決策,需選用最佳指標(如營收 vs 點擊率);應進行足夠的實驗時長,以便解釋天/周/季度事件引起的行為變化;轉化率需具備現實指導意義(推出新元素的開支 vs 轉化率提高帶來的效益);對照組和實驗組的測試對象要有一致性(兩組樣本數失衡會造成辛普森悖論等現象的發生)。代碼&數據集下載

https://alltodata.cowtransfer.com/s/93491d4160e541

相關焦點

  • 使用Python進行機器學習的假設檢驗(附代碼)
    在假設檢驗中,顯示關鍵區域的正常曲線稱為α區域;II型錯誤:當我們接受零假設但它是錯誤的。II型錯誤用beta表示。在假設檢驗中,顯示接受區域的正常曲線稱為β區域。單尾測試:統計假設的測試,其中拒絕區域僅在採樣分布的一側,稱為單尾測試。
  • 獨家|使用Python進行機器學習的假設檢驗(附連結&代碼)
    什麼是假設檢驗的重要參數?假設檢驗是一種統計方法,用於使用實驗數據進行統計決策。假設檢驗基本上是我們對人口參數做出的假設。例如:你說班裡的學生平均年齡是40歲,或者一個男生要比女生高。我們假設所有這些例子都需要一些統計方法來證明這些。無論我們假設什麼是真的,我們都需要一些數學結論。假設檢驗是統計學中必不可少的過程。
  • Python視頻教程網課編程零基礎入門數據分析網絡爬蟲全套Python...
    20爬蟲scrapy框架及案例 21數據分析 22機器學習 23深度學習 24數據結構和算法 25python網絡爬蟲 26機器學習入門篇 27機器學習入門篇2 28機器學習提升篇 29數據挖掘篇 30深度學習必備原理與實戰 31深度學習必備原理與實戰
  • 一文入門 A/B 測試(含流程、原理及示例)
    但具體的流程和實施方法是怎樣的呢?本文將對a/b test進行詳細的介紹,帶你從入門到實戰。————【以下是正文】————本文的主要目的是儘量用簡單的語言來整理A/B測試的流程和原理及注意事項,最後用一個例子來演示假設檢驗的過程,會採用直接計算、蒙特卡羅法(模擬法)、python內置函數計算三種方法,希望能從理論上和直觀上都給出對假設檢驗的理解(數據及代碼附在文末)。
  • 數據分析必備統計學(二):假設檢驗
    但在移動網際網路時代,千人千面講究用戶差異化的時代,產品經理在面對海量用戶流量,就可以實現ABtest,過程:抽樣小規模流量,進行灰度測試,檢驗新需求是否有正收益,如果觀察周期校驗效果顯著,則大規模上線測試迭代,直至全流量覆蓋。
  • 實體-關係信息抽取上線使用F1值87.1% (附數據集)
    43萬三元組數據、21萬中文句子及50個已定義好的schema,表1中展示了SKE數據集中包含的50個schema及對應的例子。數據集中的句子來自百度百科和百度信息流文本。數據集劃分為17萬訓練集,2萬驗證集和2萬測試集。其中訓練集和驗證集用於訓練,可供自由下載。項目代碼和數據集  獲取:關注微信公眾號 datayx  然後回復  文本標註  即可獲取。
  • [理論+spss實戰]假設檢驗——單樣本t檢驗
    小概率思想是指小概率事件(P<0.01或P<0.05)在一次試驗中基本上不會發生。反證法思想是先提出假設(檢驗假設H0),再用適當的統計方法確定假設成立的可能性大小,如可能性小(即最後計算出P值小於0.05),則認為假設不成立。 假設檢驗其實就是驗證你事先提出的假設是落在了置信區間內部,還是落在了置信區間外部(稱為:拒絕域)。
  • CFA一級框架:抽樣估計和假設檢驗都是些什麼?
    今天欣欣老師要帶大家複習一遍抽樣估計和假設檢驗,同學們都來一起快速複習一遍吧!抽樣估計包括抽樣方法、數據形態、中心極限定理、評判標準、區間估計、偏差等概念。假設檢驗包括定義假設、檢驗統計量、顯著性、拒絕域、P值、一類和二類錯誤等概念。戳我查看大圖▼戳我查看大圖▼
  • 【R語言實用技巧】隨機排序、隨機抽樣與分層抽樣
    然後,皇帝拜託作為內務總管的你去走一下基層,從中隨機抽取5%的人上門或者打電話了解一下情況。在這裡,問題相當於從這個有1000行的數據框中隨機抽取5%,即50行的數據。 dplyr中的sample_n與sample_frac函數實現對數據框的觀測隨機抽樣與隨機排序。其中,sample_n是按照個數取樣;而sample_frac是按照比例取樣。
  • 假設檢驗、Z檢驗與T檢驗
    概述假設檢驗是統計學、分析學和數據科學中的一個關鍵概念了解假設檢驗的工作原理、Z檢驗和t檢驗之間的區別以及其他統計概念介紹冠狀病毒大流行使我們大家都成了一個統計學家。我們不斷地核對數字,對大流行將如何發展做出自己的假設,並對何時出現「高峰」提出假設。
  • python:抽樣和抽樣方法
    知道總體分布、樣本分布和抽樣分布知道常用的抽樣方法某糖果公司研發了一種超長效口香糖,為了得到口味持續時間的數據,公司聘請了試吃者幫忙完成檢驗,結果卻讓人大跌眼鏡!>樣本分布抽取的樣本中數據的概率分布:抽取的某個樣本糖果數據的概率分布假設總體大小為m,樣本大小為n,n趨近於m時,樣本分布趨近於總體分布樣本分布又稱經驗分布
  • 基於python的大數據分析-pandas數據讀取(代碼實戰)
    、soapui、Appium、python、團隊管理、面試、職業發展等。長按上方二維碼加入千人QQ群基於python的大數據分析實戰學習筆記-Anaconda基於python的大數據分析實戰學習筆記-pandas(數據分析包)基於python的大數據分析實戰學習筆記-pandas之DataFrame我們常見的數據存儲格式無非就是csv、excel、txt以及資料庫等形式
  • Stacking 模型融合詳解(附python代碼)
    上面說的投票法和平均法都是很有效的結合策略,還有一種結合策略是使用另外一個機器學習算法來將個體機器學習器的結果結合在一起,這個方法就是Stacking。  在stacking方法中,我們把個體學習器叫做初級學習器,用於結合的學習器叫做次級學習器或元學習器(meta-learner),次級學習器用於訓練的數據叫做次級訓練集。次級訓練集是在訓練集上用初級學習器得到的。
  • 常用統計檢驗的Python實現和結果解釋
    前言今天給大家整理了一些使用python進行常用統計檢驗的命令與說明,請注意,本文僅介紹如何使用python進行不同的統計檢驗,對於文中涉及的假設檢驗、統計量、p值、正態性檢驗是檢驗數據是否符合正態分布,也是很多統計建模的必要步驟,在Python中實現正態性檢驗可以使用W檢驗(SHAPIRO-WILK TEST)檢驗原假設:樣本服從正態分布Python命令 stat,
  • 從零開始學Python數據分析【21】--線性回歸(實戰部分)
    關於如何構建並求解多元線性回歸模型的理論部分我們已經在《從零開始學Python數據分析【20】--線性回歸(理論部分)》中做了詳細的梳理,包括模型的偏回歸係數的計算、模型的顯著性檢驗和偏回歸係數的檢驗。如果你對理論部分還不是很明白的,建議你先看一下我之前寫的文章。
  • 利用python進行17種統計假設檢驗
    ,並提供Python中的示例代碼。雖然有數百種統計假設檢驗可以使用,但只有一小部分子集可能需要在機器學習項目中使用。在這篇文章中,你將看到一個機器學習項目中最流行的統計假說檢驗的手冊,其中有使用Python API的例子。
  • 教你用Python解決非平衡數據問題(附代碼)
    本文為你分享數據挖掘中常見的非平衡數據的處理,內容涉及到非平衡數據的解決方案和原理,以及如何使用Python這個強大的工具實現平衡的轉換。最簡單粗暴的辦法就是構造1:1的數據,要麼將多的那一類砍掉一部分(即欠採樣),要麼將少的那一類進行Bootstrap抽樣(即過採樣)。但這樣做會存在問題,對於第一種方法,砍掉的數據會導致某些隱含信息的丟失;而第二種方法中,有放回的抽樣形成的簡單複製,又會使模型產生過擬合。
  • 帶你和Python與R一起玩轉數據科學: 探索性數據分析(附代碼)
    本系列將介紹如何在現在工作中用兩種最流行的開源平臺玩轉數據科學。先來看一看數據分析過程中的關鍵步驟 – 探索性數據分析。內容簡介本系列將介紹如何在現在工作中用兩種最流行的開源平臺玩轉數據科學。所有的這些都是為了更快地找到線索,而不用糾結在數據細節和美觀上。EDA的主要目的是為了了解我們的數據,了解它的趨勢和質量,同時也是為了檢查我們的假設甚至開始構建我們的假設算法。了解了以上內容,我們將解釋如何用描述統計學、基本繪圖和數據框來回答一些問題,同時指導我們做進一步的數據分析。
  • 從數據產品經理視角,聊聊科學的AB Test
    隨著ab測試在網際網路行業用戶增長方面的推廣,各家都搭建了自己的ab測試平臺(不限於BAT) 或者 購買了ab測試服務。今天就來看下AB測試的前世今生,能為企業解決什麼問題,如何標準化ab測試流程,如何搭建一個ab測試平臺。
  • 手把手學機器學習算法中數據預處理(附代碼)
    查看數據開始動手的階段了。開啟你的電腦跟著本文一起敲代碼吧。這裡假設你已經裝好了Jupyter notebook了,如果讀者對Jupyter notebook不了解,可以參考本公眾號之前的另一篇文章Jupyter notebook使用指南。