爲什麼計算置信度?
在推薦場景下,我們會研發一些策略,來提升業務指標,在做AB實驗的時候,實驗組跟base組的指標對標,並非穩定的勝利或者穩定的失敗,觀察7天或者14天的指標數據,會有正有負,那麼怎麼衡量勝利的置信度吶?這屬於碰到統計學中的假設檢驗問題,可以使用常見的卡方檢驗、t檢驗以及正態性檢驗等,去檢驗論證某個設想,並通過統計學的方法做解釋。
置信度是什麼?
理論與應用
t檢驗,通常會應用於三種情況的檢驗,分別是單樣本t檢驗、雙樣本t檢驗和配對樣本t檢驗。
這裏着重說下配對樣本t檢驗,跟工作中的AB實驗吻合。
配對樣本t檢驗
配對樣本t檢驗,是針對同一組樣本在不同場景下,某數值型指標均值之間的差異。實際上讀者也可以將該檢驗理解爲單樣本t檢驗,檢驗的是兩配對樣本差值的均值是否等於0,如果等於0,則認爲配對樣本之間的均值沒有差異,否則存在差異。所以,該檢驗也遵循兩個前提假設,即正態性分佈假設和樣本獨立性假設。下面利用統計學中的四步法完成配對樣本的t檢驗:
步驟一:提出原假設和備擇假設
步驟二:構造t統計量
其中,xbar爲配對樣本差的均值,s爲配對樣本差的標準差。在原假設滿足的情況下,t統計量服從自由度爲n-1的t分佈。
步驟三:計算t統計量
根據步驟二中的計算公式,可以計算得到配對樣本t檢驗的統計量值。這裏使用了AB實驗兩組數據的差作爲t統計量。
可以選擇實現單樣本t檢驗的ttest_1samp函數,也可以直接選擇實現配對樣本t檢驗的ttest_rel函數。接下來結合這兩個函數,完成可支配收入的t檢驗。
置信度計算代碼:
#!/usr/bin/python
# -*- coding: UTF-8 -*-
from scipy import stats
def load_data(input_file):
value = []
with open(input_file, 'r') as f:
for line in f:
l = line.strip()
if len(l) > 0:
value.append(float(l))
return value
def save_p_value():
data = load_data('data.txt')
print(data)
result = stats.ttest_1samp(data,0)
print('statistic: ' + str(result[0]))
print('p-value: ' + str(result[1] / 2))
print('置信度:' + str(1 - result[1] / 2))
def main():
save_p_value()
舉個例子
需要計算置信度的數據保存於data.txt中:
0.011756813
0.007696947
-0.003020396
0.015364271
0.047068377
0.001973821
-0.004978872
0.016051776
0.030067915
-0.025374734
0.04177658
-0.013990472
運行上面的代碼,p_value.py,得到如下結果:
[0.011756813, 0.007696947, -0.003020396, 0.015364271, 0.047068377, 0.001973821, -0.004978872, 0.016051776, 0.030067915, -0.025374734, 0.04177658, -0.013990472, -0.082597621]
statistic: 0.35054762661433364
p-value: 0.36600218285336517
置信度:0.6339978171466348
置信度越大越好,上面這個例子可以解釋爲:實驗組的指標沒有帶來較大的提升。
參考: