A/BTest

分离式组间试验,也叫对照试验,科研领域(药物测试)中已广泛应用。

简单来说,A/B测试在产品优化中的应用方法是:在产品正式迭代发版之前,为同一个目标制定两个(或以上)方案,将用户流量对应分成几组,在保证每组用户特征相同的前提下,让用户分别看到不同的方案设计,根据几组用户的真实数据反馈,科学的帮助产品进行决策。

 

PEMS04 LSTM对照实验 《对照试验》byh_mark_互斥

ABTest的一些特性:

先验性: A/B测试其实是一种“先验”的试验体系,属于预测型结论,与“后验”的归纳性结论差别巨大。同样是用数据统计与分析版本的好坏,以往的方式是先将版本发布,再通过数据验证效果,而A/B 测试却是通过科学的试验设计、采样样本代表性、流量分割与小流量测试等方式来获得具有代表性的试验结论,这样就可以用很少的样本量就能推广到全部流量可信。

并行性: A/B测试是将两个或以上的方案同时在线试验,这样做的好处在于保证了每个版本所处环境的一致性,便于更加科学客观地对比优劣。同时,也节省了验证的时间,无需在验证完一个版本之后再测试另一个。

科学性: 这里强调的是流量分配的科学性。A/B 测试的正确做法,是将相似特征的用户均匀的分配到试验组中,确保每个组别的用户特征的相似性,从而避免出现数据偏差,使得试验的结果更有代表性。

基于OpenResty的分流机制

Nginx 是俄罗斯人发明的, Lua 是巴西几个教授发明的,中国人章亦春把 LuaJIT VM 嵌入到 Nginx 中,实现了 OpenResty 这个高性能服务端解决方案。

通过 OpenResty,你可以把 nginx 的各种功能进行自由拼接, 更重要的是,开发门槛并不高,这一切都是用强大轻巧的 Lua 语言来操控。

PEMS04 LSTM对照实验 《对照试验》byh_mark_Nginx_02

PEMS04 LSTM对照实验 《对照试验》byh_mark_Nginx_03

PEMS04 LSTM对照实验 《对照试验》byh_mark_Nginx_03

稳定分流的实现:murmurHash算法

说道ketamahash,它是一致性哈希算法,一般说来都是由若干固定的虚拟节点来计算出每个虚拟节点的slots,数据存储的时候,算出key的slot值,然后存入相邻最近的虚拟节点。而murmurhash则是散列算法,由于其计算产生的结果足够剧烈,所以是目前最好的几种散列算法之一。它主要用来计算出key的slot值的。有人会问,java中的hashcode也能计算出来呀,但是hashcode计算出来的值的剧烈程度远远比不上murmurhash。拿abc和abd来说,hashcode计算出来的差值相差不大,但是murmurhash计算出来的差值则相差甚远。

二者结合,可以实现出类似redis cluster使用的路由算法,且效果也是很好的。目前已知的开源中,jedis,memcache,redis, Hbase等都有采用过,所以将这两种哈希算法吃透,可谓是如虎添翼。【参考:浅析ketamahash和murmurhash】

这边补充一些正交和互斥实验的区别。互斥是指两个实验流量独立,用户只能进入其中的一个实验。而正交意味着用户进入所有的实验之间没有必然联系。

PEMS04 LSTM对照实验 《对照试验》byh_mark_redis_05

 

【参考】

1. AppAdhoc A/B Testing使用文档

2. 马蜂窝ABTest多层分流系统的设计与实现