童话说说技术创业美文职业
投稿投诉
职业母婴
职场个人
历史治疗
笔记技能
美文纠纷
幽默家庭
范文作文
乐趣解密
创业案例
社会工作
新闻家居
心理安全
技术八卦
仲裁思考
生活时事
运势奇闻
说说企业
魅力社交
安好健康
传统笑话
童话初中
男女饮食
周易阅读
爱好两性

AB测试:实现方法

7月7日 六壬会投稿
  上文介绍了AB测试的基本概念,接下来我们继续探讨如何实现AB测试。
  我们先来看一个图:
  (注:感谢Algo提供本图。)
  上图展示了AB测试的实现原理。从左到右,四条较粗的竖线代表了AB测试中的四个关键角色:客户端(Client)、服务器(Server)、数据层(Data)、数据仓库(DataWarehouse)。从上到下代表了三种访问形式:无AB测试的普通访问流程(NoABtest)、基于后端的AB测试访问流程(BackendABtest)、基于前端的AB测试访问流程(FrontendABtest)。
  一般情况下,用户在一次浏览中,会从客户端(Client)发起一个请求,这个请求被传到了服务器(Server),服务器的后台程序根据计算,得出要给用户返回什么内容(Data),同时向数据仓库(DataWarehouse)添加一条打点信息,记录本次访问的相关信息。这个过程也就是图上横向的流程。数据仓库收集到足够的数据之后,就可以开始进行分析(Analytics)了,这也即是图中右上角的部分。
  AB测试需要将多个不同的版本展现给不同的用户,即需要一个“分流”的环节。从上图中我们可以看到,分流可以在客户端做,也可以在服务器端做。传统的AB测试一般是在服务端分流的,即基于后端的AB测试(BackendABtest),当用户的请求到达服务器时,服务器根据一定的规则,给不同的用户返回不同的版本,同时记录数据的工作也在服务端完成。
  基于后端的AB测试技术实现上稍微简单一些,不过缺点是需要技术部工程资源介入,另外收集到的数据通常是比较宏观的PV(PageView)信息,虽然可以进行比较复杂的宏观行为分析,但要想知道用户在某个版本的页面上的具体行为往往就无能为力了。
  基于前端的AB测试则可以解决上面的问题。它的特点是,利用前端JavaScript方法,在客户端进行分流,同时,可以用JavaScript记录下用户的鼠标行为(甚至键盘行为,如果需要的话),直接发送到对应的打点服务器记录。这样的好处是不需要技术部(如果你们和我们一样,前端工程师与后端工程师分属不同部门的话)参与,并且可以比较精确地记录下用户在页面上的每一个行为,甚至包括后端方法难以记录到的无效点击!
  下面,我将重点介绍一下我们在基于前端的AB测试上的一些实践。
  一、分流
  首先遇到的问题是如何分流的问题。对于大部分需求来说,我们希望各个版本的访问人数平均分配。解决办法有很多种,比较简单的一种即是前面提到过的,根据某一个CookieID来划分用户,前提是你的网站上每一位访客在第一次访问时就要有一个不重复的CookieID,比如“123。180。140。。1267882109577。3”。然后,可以根据这个CookieID的最后一位(在本例中是“3”)来划分人群,比如单数的显示A版本,偶数的显示B版本。
  因为CookieID一般设定后不会轻易改变,基于CookieID的好处是我们能很好地对访客保持一致性,某个用户如果第一次看到的是A版本,那他刷新后看到的还是A版本,不会一会儿看到A版本一会儿看到B版本。但不足之处就是如果用户浏览器不支持Cookie的话,分流就不能正常进行了。不过,现代浏览器默认情况下都是支持Cookie的,如果真有用户的浏览器不支持Cookie,那也应该是极少数特殊情况,对结果的影响非常微小,对于这些特殊情况,我们一般可以安全地忽略掉。
  还有一点需要注意的是,AB测试的页面必须有较高的UV(UniqueVisitor,独立访客数),因为分流带有一定的随机性,如果页面UV太小,分到每一个版本的人数就更少,结果很有可能被一些偶然因素影响。而UV较大时,根据大数定理,我们得到的结果会接近于真实数据。就像想知道一个地方的成年人的平均身高,当然是取的样本越大结论越可信。
  二、展示
  决定向当前访问者显示哪个版本后,怎么用前端的方法加载对应的版本呢?这需要分情况处理。
  一般情况下,如果两个版本只有一个较小的区域不一样,我们可以同时将两个区域的HTML都加载到当前页面中,先用CSS把它们隐藏起来(也可以默认显示一个版本),等JS判断出该显示哪个版本后,再控制对应版本的CSS显示。
  有时候,测试区域比较大,代码比较多,或者需要后台较多的计算资源,如果一开始就把两个版本的HTML全加载到当前页面中,就会需要比较大的开销(比如带宽、后台计算量)。这种情况下,我们可以先把测试区留空,之后再用Ajax的方式延迟加载。
  还有的时候,测试区域非常大,几乎占了整个页面,或者完全就是不同的页面,这时,用Ajax方式加载也不适合了,可以将不同的版本做成不同的页面,然后再用JS跳转。不过这样的方式并不是很好,因为前端JS跳转需要一定的时间,这个过程很有可能被用户感受到,并且留下不好的体验。对这个问题,似乎没有很好的解决办法,至少在前端层面很难完美解决,所以并不是非常推荐这种跳转方式,如果真的需要跳转,最好是在服务器端由后端代码来操作。
  三、数据采集
  正确展示对应的版本后,就要开始采集需要的数据了。有一个可选的数据,是当前版本有多少PV(PageViews,访问量),如果需要记录这个数据的话,在正确版本加载完成之时就要发送一个打点信息。不过很多需求中,具体版本的PV的精确数值可能不是很重要,而且要收集这个信息需要多一次打点操作,所以一般情况下这个数据是可选的。
  必须的数据是测试区域内用户的点击信息。当用户在测试区域点击了鼠标左键(无论这个点击是点击在链接、文字、图片还是空白处),我们就需要发送一条对应的打点信息到打点服务器。一般来说,这个打点信息至少需要包含以下数据:
  当前AB测试以及版本标识
  点击事件的位置
  点击时间戳(客户端时间)
  当前点中的URL(如果点在非超链接区域,此项为空)
  用户标识(比如CookieID)
  用户浏览器信息
  为了尽可能精确地还原用户的点击位置,我们的页面对前端有比较高的要求,要求页面在不同的浏览器下有基本一致的表现,至少在IE6、7、8以及Fiefox下,页面横向的元素要精确一致,纵向上很难做到完全一致,但也要尽可能保持统一。另外,这样的测试也不太适合自适应宽度的页面,比较适合定宽的页面,为了避免不同分辨率下页面左右空白不同导致鼠标点击位置的不同,点击位置取的应该是相对于测试区域左上角的位置。除此之外,最好再记录一下测试区域相对于页面内容左上角的位置,在后面还原点击分布图以及绘制热区图时会用到这个数据。
  这一阶段的流程大致如下图所示:
  数据打点该如何发送以及如何存储呢?这要取决于你的打点服务器如何存储信息。
  四、数据存储
  我们使用了一台专用的服务器收集打点信息,为了能支持尽可多尽可能密集的打点请求,这台服务器的apache服务网站目录下只有两个静态文件,分别是abtest。html和abtest。gif,两者都是非常小的空白文件(空白图片)。访客端进行打点时,只需要以GET的方式带上相关的参数请求两个文件中的任意一个即可。比如:
  http:abtest。xxx。comabtest。gif?abid1clickBlockX244clickBlockY372clickBlockW392clickBlockH76clickTime
  1263264082137clickRX233clickRY47clickURLclickBeaconID
  123。180。140。。1267882109577。3browserTypeFireFox
  这个请求可以通过Ajax的方式发送,也可以通过JS在页面上创建newImage()对象的方式完成。
  对打点服务器来说,这只是一条普通的HTTP请求,它会在日志里留下一条普通的日志记录,形如:
投诉 评论 转载

网页设计师应具备的六大旁门左道我在前面的《抄袭网页设计师必备的本领之一》讲了设计师提升设计能力的一个方法。那么,除了提升设计能力外,想做为一个优秀的设计师还有些方面需要了解甚至是学习才能设计好网页。不得不说……互联网产品设计零碎记与部门同事做了个小小的交流,话题杂而浅,在此做一个小纪录。1、什么是设计工业设计、环境设计、建筑设计、平面设计、网页设计、服装设计、信息设计日常生活中,随处可听可见……AB测试:实现方法上文介绍了AB测试的基本概念,接下来我们继续探讨如何实现AB测试。我们先来看一个图:(注:感谢Algo提供本图。)上图展示了AB测试的实现原理。从左……基于LUCENE实现自己的推荐引擎采用基于数据挖掘的算法来实现推荐引擎是各大电子商务网站、SNS社区最为常用的方法,推荐引擎常用的ContentBased推荐算法及协同过滤算法(ItemBased、Userba……优雅地扩大链接响应区域合理地扩大页面链接响应区域可以提高网页的易用性。同时还要兼顾到链接的交互一致性以及视觉上的平衡,就需要做一些特殊的处理。实例一:一张图配一个链接。常规的做法有以下几……交互设计的“拟人趋势”,从海明威说起“海明威小说里的对话跟别人都不太一样。大部分作家写的对话都特别有逻辑,他们的对话都很连贯、很有逻辑。而海明威的对话,表面看上去好像是没逻辑的,有时候甚至是互相对不上,断断续续的……手机交互设计师的专业度手机交互设计师的专业度是对设计的分析能力、根据主要设计原则组织设计元素和对细节的挑剔程度,具体体现工作中的以下几个方面:美感。作为设计师,需要具备最基本的审美观。不管作品……从“告诉用户在哪里”说开去在网页设计里一提到“告诉用户在哪里”,我们最先想到的控件是面包屑,它不仅可以告诉用户在哪里,还能清晰的展现你所处的层级。当然还有一个控件也能“告诉用户在哪里”浏览器标题。而这两……前端开发中的一些用户体验细节用户体验已经是一个老生常谈的话题了。我非常赞同某位达人所说的,用户体验设计应该贯穿于产品从萌芽到出生的整个过程,产品原型、视觉设计、前端开发、后端开发甚至还包括产品测试大家都应……PeterSkillman浅谈用户体验创新“一款顶级设备要素构成中,设计只占5。市场营销、销售、分流以及采购构成了余下的95。”最近,ZUR网站有幸近距离与新任NokiaMeeGo设备用户体验和服务总负责人Pet……抄袭网页设计师必备的本领之一在前面的文章《减少你服务中的痛苦服务于优质的网站设计客户》里面谈了找优质客户。那么设计师如想确保优质客户继续合作下去。那首要就是要保证客户能够认可你的设计能力。关于这个话……从用户角度看百度说吧用户体验恐惧与信任最近一段的时间里,IT界里三大巨头一共有三条头条新闻,第一是Apple在国内发行Ipad掀起Apple迷的发狂般的购买高潮,第二就是微软发行InternetExplorer9装……
SaaS平台:数据列表设计实例解析:如何借助共情力为用户研究“降噪”?API接口设计,需要注意这4点海外贸易报关流程分析B端产品如何画好流程图?设计师的2019年终总结,分享10点思考产品面试系列:如何设计一款产品?八年,快手产品的变与不变【译】谷歌HEART框架如何助力设计成果评估?埋点设计指南:拆解拼多多双十二营销活动(上)2020年产品设计的10大趋势一文详解ToB业务调研特斯拉将关闭加州工厂ModelS和ModelX或迎来改款2021年什么时候春分2021年春分可以结婚吗湖人全新首发五虎来了,法尔签约新疆,蔡崇信放弃签约134前锋青团用什么水拌面?男神屌丝只在这一发之间时尚发型让你速变男神光谷有轨电车开通第四天发生第一撞法院判离婚诉讼费由谁承担尿酸增高的加速器已找到,这3种食物再爱吃,也要及时忌口车间噪音对身体的影响寄胡介描写清明节习俗的黑板报清明节扫墓烟雨荷塘,梦里水乡的访客

友情链接:中准网聚热点快百科快传网快生活快软网快好知文好找作文动态热点娱乐育儿情感教程科技体育养生教案探索美文旅游财经日志励志范文论文时尚保健游戏护肤业界