作者:livan
来源:数据python与算法
Hash分流介绍
分流的方式有很多种,笔者这次来和大家聊一下Hash算法如何实现分流,Hash算法在融合MD5算法后,可以实现运算结果几乎不重复,而且方便多次分流随机呈现,在现在的AB系统中应用较为广泛。
AB-test又称作是桶测试,为什么叫桶测试呢?关键就在于分流的过程,我们先解释一下桶和试验组的关系:
假设试验有12个人,我们对这12个人进行编号,编号方法可以使用cookie,也可以使用session,总之获取到这12个人的唯一编码;当获取到唯一编码之后我们就可以开始分流了,我们对每个人的唯一编码进行hash处理,常规使用MD5进行hash计算,这样计算的好处在于MD5几乎不会重复,分流效果较好;计算好的hash值需要进行mod处理,图中有6个桶,我们就用6进行mod处理, 12个人按照余数分散到六个桶里面,原则上12个人的分流是随机的分散到各个桶里面,很难保证每个桶里的人数一致,但是从统计学的角度上讲,当数据量足够大时,数据会均匀的分散到各个桶里面。
桶分流完成后,我们需要处理的就是将这些桶平均分成两组,原则是保证随机性和平均分配,聪明如你,应该已经明白分流的原理了吧?
样本的平衡分布
三组数据的分流原则上需要尽可能平衡,即各个特征都能均匀的分布在三组试验中,这样才能符合AB-test控制变量的原则。生化试验中控制变量是一个较为简单的问题,不管是脊蛙反射还是肠胃蠕动试验,但是社会学中的试验,控制变量却异常复杂,因为面对大量人群,很难通过随机分配保证各个特征的平衡,而且有些隐含变量很难被发现,也难以做到平衡。
这样的问题称在生化试验中称作是系统误差,在互联网AB-test中则会引发辛普森悖论。生化试验中往往通过重复试验来避免,互联网下的AB-test很难进行重复试验,因为无法让一个人即使用A版本,又使用B版本,串行试验又会添加时间因素,所以只能采用其他的方式解决这个问题。
辛普森悖论
那么,什么是辛普森悖论呢?
我们用一个真实的医学 AB 测试案例来说明这个问题。这是一个肾结石手术疗法的 AB 测试结果:
看上去无论是对于大型结石还是小型结石,A疗法都比B疗法的疗效好。但是总计而言,似乎B疗法比A疗法要好。
这个AB测试的结论是有巨大问题的,无论是从细分结果看,还是从总计结果看,都无法真正判断哪个疗法好。
那么,问题出在哪里呢?这个AB测试的两个实验组的病历选取有问题,都不具有足够的代表性。参与试验的医生人为的制造了两个试验组本身不相似,因为医生似乎觉得病情较重的患者更适合A疗法,病情较轻的患者更适合B疗法,所以下意识的在随机分配患者的时候,让A组里面大结石病历要多,而B组里面小结石病历要多。
更重要的问题是,很有可能影响患者康复率的最重要因素并不是疗法的选择,而是病情的轻重!换句话说,A疗法之所以看上去不如B疗法,主要是因为A组病人里重病患者多,并不是因为A组病人采用A疗法。
所以,这一组不成功的AB测试,问题出在试验流量分割的不科学,主要是因为流量分割忽略了一个重要的“隐藏因素”,也就是病情轻重。正确的试验实施方案里,两组试验患者里,重病患者(也就是AB-test中的特征值)的比例应该保持一致。
我们再来聊一个互联网领域的场景,我们对APP上一个按钮进行了颜色调整,需要比较一下颜色调整前后用户UV点击率是否提高?经过一段时间的试验,我们得到了两组试验的数据,为了说明辛普森悖论的问题,我们单独抽离出了性别作为比较(原因有二:一是性别在这次试验中是重要特征,二是这一特征的数据不均衡,刚好出现了辛普森问题),计算出了两组试验的点击率,如下:
数据中我们发现,单独看这一试验,无论是女性特征和男性特征,数据表现都是A组中较好,但是,总计却是B组效果较好,其中的差异我想大家已经清楚了,性别特征并没有均衡的分布在两个试验组中。
这个解决方法就是——定向试验。
定向试验
在进行试验之前,先做一次试验分析,确定对试验影响较大的因素,然后通过分流的权重设置来均衡各个组之间的特征差异,因素确认用到的方法较多,比如GBDT等等。
如下图:
在进行试验同时,可以实现各分组特征中的监控,如果发现某一特征在某一组中偏小,就增加这一特征在这一组的分配权重,以保证特征一致性。但是这样也存在特征取舍的问题,具体就不展开来描述了,有兴趣的小伙伴可以自行查询一下,毕竟,能做到这一点的公司已经很不错了。
分层试验,交叉试验,定向试验是我们规避辛普森悖论的有力工具。
规避辛普森悖论,还要注意流量动态调整变化的时候新旧试验参与者的数据问题,试验组和对照组用户数量的差异问题,以及其他各种问题。而优秀的增长黑客,不会去投机取巧“制造数据”,而是认真思考和试验,用科学可信的数据来指导自己和企业的决策,通过无数次失败的和成功的AB测试试验,总结经验教训,变身能力超强的超级英雄。
◆ ◆ ◆ ◆ ◆
麟哥新书已经在京东上架了,我写了本书:《拿下Offer-数据分析师求职面试指南》,目前京东正在举行100-50活动,大家可以用相当于原价5折的预购价格购买,还是非常划算的:
点击下方小程序即可进入购买页面:
数据森麟公众号的交流群已经建立,许多小伙伴已经加入其中,感谢大家的支持。大家可以在群里交流关于数据分析&数据挖掘的相关内容,还没有加入的小伙伴可以扫描下方管理员二维码,进群前一定要关注公众号奥,关注后让管理员帮忙拉进群,期待大家的加入。
管理员二维码:
猜你喜欢
● 麟哥拼了!!!亲自出镜推荐自己新书《数据分析师求职面试指南》
● 厉害了!麟哥新书登顶京东销量排行榜!
● 笑死人不偿命的知乎沙雕问题排行榜
● 用Python扒出B站那些“惊为天人”的阿婆主!
● 你相信逛B站也能学编程吗
点击阅读原文,即可参与京东100-50购书活动