之前写过几篇关于ABtest系统的文章,其中一直没有写的一个点是,也是实验中经常看大家犯的问题是,看数据的方法不准确,就会导致很多的结论性错误,今天总结一下ABtest系统中,到底怎么看实验结果。
一、一个实验策略上线几天了,该看哪些数据?
1、首先要看的,是整体大盘的数据,如果实验组跟对照组,大盘的核心指标变化很大,尤其是负向很严重,立刻下掉实验或者调低流量,永远不要带着很大的负向影响在线上查问题。
2、其次不是看指标,是一定回忆清楚,自己做这个实验的时候的假设,因果逻辑,这个策略会影响用户的哪些行为,哪些指标会涨,哪些指标会降低,这个很关键,因为这个是预期,预期跟现实数据的对比才能得到结论。
3、从原因数据出发一步一步找结果数据,或者从结果数据出发一步一步倒推原因数据,用每一步的数据,证明逻辑的合理性。很多时候,策略上线后,策略自身的影响几乎为0,但是大盘涨了,完全是外部影响带来的,却被归因为牛逼策略。
二、怎么知道看的数据是可信的
1、尽量看触达用户的数据,而不是看大盘(就是上面说的策略真实影响的用户)
2、去除噪音数据,对异常数据带来的干扰做规避,实验组跟对照组一样的filter。
3、看数据置信度,不是所有的数据变化都是可信任的,一般认为P值到达95%是比较可信的。因为信息流里大量的二项分布,所以分享一下计算方法:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31 #二项分布置信度计算
def Confidence():
#获取相关信息
print("请输入实验组人数")
n_shiyan=int(input())
print("请输入对照组组人数")
n_duizhao=int(input())
print("请输入实验组二项分布事件发生的概率")
p_shiyan=float(input())
print("请输入对照组二项分布事件发生的概率")
p_duizhao=float(input())
#计算z-soce,二项分布
fenzi=p_shiyan-p_duizhao
fenmu=((p_shiyan*(1-p_shiyan)/n_shiyan)+(p_duizhao*(1-p_duizhao)/n_duizhao))**0.5
z_score=abs((p_shiyan-p_duizhao)/fenmu)
#根据z-score计算P值
if z_score<1.96:
result='不显著'
if 1.96 <= z_score<2.58:
result='一般显著'
Confidence_interval_top=(p_shiyan-p_duizhao)+1.96*fenmu
Confidence_interval_down=(p_shiyan-p_duizhao)-1.96*fenmu
return "实验结果:{0},区间为:[{1},{2}]".format(result,Confidence_interval_down,Confidence_interval_top)
if 2.58<=z_score:
result='非常显著'
Confidence_interval_top=(p_shiyan-p_duizhao)+1.96*fenmu
Confidence_interval_down=(p_shiyan-p_duizhao)-1.96*fenmu
return "实验结果:{0},区间为:[{1},{2}]".format(result,Confidence_interval_down,Confidence_interval_top)