bpython使用_使用Python实现一个简单的A/B测试
A/B 測試(雙獨立樣本檢驗)可以看成一種實驗,將一個頁面的兩個或多個不同版本隨機呈現給目標用戶,通過對用戶行為的統計分析來確定哪個版本更利于目標轉換。下面通過一個簡單的A/B測試來熟悉A/B測試的基本流程及Python實現。
這是兩種不同的鍵盤布局(A版本、B版本),目標是想要知道哪個鍵盤布局對用戶來說打字的體驗更好。
首先,我們需要設置目標來衡量兩個版本對用戶來說的用戶體驗。在這個鍵盤布局案例里,我們可以將目標定為不同鍵盤布局對用戶打字時拼錯字的影響。
確立目標以后,下一步是采集數據。在這一部分,用戶會隨機分配到不同版本鍵盤布局中,他們與鍵盤布局的交互行為會被直接檢測,并收集起來作為數據分析的重要數據。
我們隨機抽取實驗者,將實驗者分成2組,每組25人,A組使用鍵盤布局A,B組使用鍵盤布局B。讓他們在一定時間內打出一定數量的詞語,然后記錄打錯字的數量。
1、描述統計分析
#導入包
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
#導入數據
fileNameStr='\\鍵盤AB測試.xlsx'
#讀取Ecxcel數據,先按照字符串讀入,再進行轉換
xls = pd.ExcelFile(fileNameStr, dtype='object')
data = xls.parse('Sheet1',dtype='object')
data.head()查看數據描述統計信息格式轉換
#樣本平均值
a_mean=data['A'].mean()
b_mean=data['B'].mean()
#樣本標準差
a_std=data['A'].std()
b_std=data['B'].std()
A版本平均值= 5.08 單位:打錯字數量;
B版本平均值= 7.8 單位:打錯字數量;
A版本樣本大小25,樣本標準差= 2.05993527406 單位:打錯字數量;
B版本樣本大小25,樣本標準差= 2.64575131106 單位:打錯字數量。
2、推論統計分析
2.1 提出問題
要研究的問題是:哪個鍵盤布局對用戶來說體驗更好?
① 零假設和備選假設
零假設:A版本和B版本沒有差別,也就是A版本打錯字數量平均值等于B版本平均值。
備選假設:A版本和B版本有差別,也就是A版本打錯字數量平均值不等于B版本平均值。
② 檢驗類型
這里兩組樣本分別為A和B,為不同的對象,所以是雙獨立樣本檢驗。
③ 抽樣分布類型
在這個案例中,樣本大小是25(小于30),屬于小樣本。那小樣本的抽樣分布是否滿足t分布呢?t分布還要求數據集近似正態分布,所以看下差值數據集的分布是什么樣子的。
#導入包
import seaborn as sns
#查看數據集分布
sns.distplot(data['A'])
plt.title('A版本數據集分布')
plt.show()
sns.distplot(data['B'])
plt.title('B版本數據集分布')
plt.show()
通過觀察上面數據集分布圖,兩個樣本數據集都近似正態分布,滿足t分布的使用條件,所以抽樣分布為t分布。
④ 檢驗方向
因為備選假設是A版本和B版本有差別,也就是A版本平均值不等于B版本平均值,存在不等號,所以使用雙尾檢驗。
2.2、尋找證據
'''
Scipy的雙獨立樣本t檢驗不能返回自由度,對于后面計算置信區間不方便。
所以我們使用另一個統計包(statsmodels)。
'''
import statsmodels.stats.weightstats as st
'''
ttest_ind:獨立雙樣本t檢驗,
usevar='unequal'兩個總體方差不一樣
返回的第1個值t是假設檢驗計算出的(t值),
第2個p_two是雙尾檢驗的p值
第3個df是獨立雙樣本的自由度
'''
t,p_two,df=st.ttest_ind(data['A'],data['B'],
usevar='unequal')
#自由度一般只保留整數部分
print('t=',t,'p_two=',p_two,',df=',df)
out:t= -4.05593853686 p_two= 0.000194574553072 df= 45.2781333114
2.3、判斷標準
#判斷標準(顯著水平)使用alpha=5%
alpha=0.05
顯著水平取5%。
2.4、得出結論
'''
雙尾判斷條件:
p_two(雙尾檢驗的p值) < 判斷標準(顯著水平)alpha 時,
拒絕零假設,有統計顯著,也就是有顯著差異
'''
#做出結論
if(p_two< alpha):
print('拒絕零假設,有統計顯著,也就是接受備選假設')
print('備選假設:A版本和B版本有差異')
else:
print('接受零假設,沒有統計顯著')
print('零假設:A版本和B版本沒有差異')
拒絕零假設,有統計顯著,也就是接受備選假設。備選假設:A版本和B版本有差異。
2.5、置信區間
'''
1)置信水平對應的t值(t_ci)
查t表格可以得到,95%的置信水平,自由度是n-1對應的t值
2)計算上下限,
置信區間上限a=樣本平均值 - t_ci ×標準誤差
置信區間下限b=樣本平均值 - t_ci ×標準誤差
'''
t_ci=2.0141
#樣本大小n
a_n = 25
b_n = 25
'''
numpy.square 平方
numpy.sqrt開方
'''
se=np.sqrt( np.square(a_std)/a_n + np.square(b_std)/b_n )
'''
對于雙獨立樣本檢驗
置信區間的樣本平均值=A版本平均值 - B版本平均值
'''
sample_mean=a_mean - b_mean
#置信區間上限
a=sample_mean - t_ci * se
#置信區間下限
b=sample_mean + t_ci * se
這里與之前不同,獨立雙樣本檢驗考慮的是兩個平均值差異的置信區間。因此,兩個平均值差異的置信區間,95置信水平 CI=[-2.762316,-2.677684] 。
也就是說,置信區間是[-2.76,-2.68],平均下來,使用A鍵盤的錯誤數量要比B鍵盤的要少大約2~3個。
2.6、效應量
'''
效應量:差異指標Cohen's d
這里的標準差,因為是雙獨立樣本,需要用合并標準差(pooled standard deviations)代替
'''
#合并標準差
sp=np.sqrt(((a_n-1)*np.square(a_std) + (b_n-1)* np.square(a_std) ) / (a_n+b_n-2))
#效應量Cohen's d
d=(a_mean - b_mean) / sp
print('d=',d)
out:d= -1.32042983789
同樣的,雙獨立樣本采用合并標準差(pooled standard deviations)代替。
3、推論數據分析報告
3.1、描述統計分析
A版本打錯字數量為平均5.08個,標準差是2.06個;
B版本打錯字數量為平均7.8個,標準差是2.65個。
3.2、推論統計分析
① 假設檢驗
獨立雙樣本t(25)=-4.05 ,
p=.00019 (α=5%) , 雙尾檢驗,
拒絕零假設,且統計顯著。
② 置信區間
兩個平均值差值的置信區間,
95%置信水平 CI=[-2.76,-2.68]。
③ 效應量
d= - 1.32。
總結
以上是生活随笔為你收集整理的bpython使用_使用Python实现一个简单的A/B测试的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 访问地址指向本机地址_详解MySql通过
- 下一篇: mysql command line c