作者归档:joegh

电子商务网站用户分析

user-importance  前一篇文章主要是基于点击流数据的用户分析,适合所有网站,而对于一些特殊的网站,可以根据自身所能获取的数据将分析的指标进行扩展或根据自身的特征定制合适的指标,这里主要介绍的是适合一般的电子商务网站的用户分析方法。

  当用户在电子商务网站上有了购买行为之后,就从潜在客户变成了网站的价值客户。电子商务网站一般都会将用户的交易信息,包括购买时间、购买商品、购买数量、支付金额等信息保存在自己的数据库里面,所以对于这些用户,我们可以基于网站的运营数据对他们的交易行为进行分析,以估计每位用户的价值,及针对每位用户的扩展营销(Lead Generation)的可能性。

评价用户价值的指标

  对于评价指标的选择这里遵循3个原则:

  • 指标可量化:没办法,要做定量分析,这个是最基本的前提;
  • 尽可能全面:根据底层数据选择尽可能多的可以获取的指标,这样能够从多角度进行分析和评价;
  • 线性独立:即指标间尽量保持不相关。比如如果选择用户的购买次数和总消费额,那么一定是购买次数越多的用户总消费额越高,也就是导致了评价维度上的重合,而选择购买次数和平均每次交易额可以避免这种相关性产生的弊端。

  根据以上几个原则选取了以下几个指标(同样根据网站的特征选取合适的统计时间段):

  1. 最近购买时间:用户最近一次购买距当前的天数;
  2. 购买频率:用户在这段时间内购买的次数;
  3. 平均每次交易额:用户在这段时间内的消费总额/购买的次数;
  4. 单次最高交易额:用户在这段时间内购买的单词最高支付金额;
  5. 购买商品种类:用户在这段时间内购买的商品种类或商品大类。

用户评价模型的展示

  一样的,也可以用雷达图进行展示,同样也使用离差标准化的方法对每个指标进行消除度量单位的10分制评分。这里具体的方法就不再重复介绍了,请参照——网站用户忠诚度分析这篇文章。下面是一个雷达图的示例:

E-Commerce-user-RadarChart

  通过这个雷达图,我们可以读到比用户忠诚度更多的信息。图中的上面3个指标——最近购买时间、购买频率和购买商品种类可以用来评价用户的忠诚度,而下面的2个指标——平均每次交易额和单词最高交易额可以用来衡量用户的消费能力。如上图,用户1虽然购买频率和购买的广度不高,但其消费的能力较强,而用户2是频繁购买用户,对网站有一定的忠诚度,但其消费能力一般。所以图形的上半部分面积较大的用户拥有较高的忠诚度,而下半部分面积较大的用户具有更高的消费能力。这两类用户都是网站的有价值客户,但由于其类型的不同,在营销策略上可以分开对待。

用户交易行为分析的意义

  • 发现网站的高价值客户(VIP),为客户关系管理(CRM)及保持有价值客户提供支持;
  • 发掘网站的可发展用户,对于一些新客户或潜力客户进行针对性营销;
  • 及时发现可能流失的客户,及时采取有效措施;
  • 根据用户交易行为细分客户群,实施有针对性的营销策略。

网站用户忠诚度分析

user-loyalty-analysis  忠诚用户不仅能为网站创造持续的价值,同时也是网站品牌口碑推广的重要渠道,所以目前网站对忠诚用户愈加重视。可能很多网站或者网站分析工具对用户做了“新用户”和“回访用户”的划分,但是单单区分新老用户是不够了,我们需要更加完善的指标来衡量网站用户的忠诚度。

  用户忠诚度(Loyalty),指的是用户出于对企业或品牌的偏好而经常性重复购买的程度。对于网站来说,用户忠诚度则是用户出于对网站的功能或偏好而经常访问该网站的行为。根据客户忠诚理论,忠诚度可以由以下4个指标来度量:

  • 重复购买意向(Repurchase Intention:购买以前购买过的类型产品的意愿;
  • 交叉购买意向(Cross-buying Intention:购买以前为购买的产品类型或扩展服务的意愿;
  • 客户推荐意向(Customer Reference Intention:向其他潜在客户推荐,传递品牌口碑的意愿;
  • 价格忍耐力(Price Tolerance:客户愿意支付的最高价格。

量化网站的用户忠诚度

  以上的4个指标对于电子商务网站而言,可能还有适用性,但对于大多数网站是不合适的,所以为了让分析具有普遍的适用性,同时为了满足所有的指标都可以量化(上面的客户推荐意向比较难以量化),以便进行定量分析的要求,这里可以选取Google Analytics中对用户忠诚度的4个度量指标:Repeated Times、Recency、Length of Visit、Depth of Visit,即用户访问频率、最近访问时间、平均停留时间、平均访问页面数,这些指标可以直接从网站的点击流数据中计算得到,对所有的网站都适用,下面看一下这些指标的定义及如何计算得到(一些网站度量的相关定义请参考——网站分析的基本度量):

  • 访问频率:用户在一段时间内访问网站的次数,即每个用户Visits的个数;
  • 最近访问时间:用户最近访问网站的时间,因为这个指标是个时间点的概念,所以为了便于度量,一般取用户最近访问时间距当前的天数。
  • 平均停留时间:用户一段时间内每次访问的平均停留时间,即每个用户Time on Site的和/Visits的个数;
  • 平均访问页面数:用户一段时间内每次访问的平均浏览页面数,即每个用户Page Views的和/ Visits的个数。

  统计数据的时间区间也是根据网站的特征来定的,如果网站的信息更新较快,用户访问较为频繁,那么可以适当选取较短的时间段,这样数据变化上的灵敏度会高些;反之,则选择稍长的时间段,这样用户的数据更为丰富,指标的分析结果也会更加准确有效。

用户忠诚度的展示和比较

  上面的4个指标均可以被量化统计得到,单一的指标也是没有意义的,我们需要通过比较来找出哪些是忠诚用户,哪些是流失用户,可以先对指标进行一些处理,以便使它们之间更具可比性,可以参考之前的文章——数据的标准化),这里我采用的是min-max标准化的方法,首先将所有指标的数值全部转换到[0,1]区间,再进行倍数放大,比如使用10分制进行评分,则可以乘10,数据就全部分布在[0,10]区间内了,如下图:

    访问频率 最近访问时间 平均停留时间 平均访问页面
用户1 数据 2次 15天前 150秒 3页
标准化 0.10 0.50 0.30 0.38
评分 1 5 3 3.8
用户2 数据 8次 2天前 120秒 5页
标准化 0.40 0.93 0.24 0.63
评分 4 9.3 2.4 6.3

——表中的数据只是简单的举例,实际情况需要根据每个指标的最大最小值进行计算

  根据上表的数据,我们已经将所有指标统一到了同一个评分区间,那么就可以使用雷达图对用户的忠诚度进行展示。用雷达图展示有以下几个优点:

  • 可以完整地显示所有评价指标;
  • 显示用户在各指标评分中的偏向性;
  • 可以简单分析用户忠诚度的综合评分,即图形围成的面积(假设四个指标的权重相等,若重要程度存在明显差异,则不能用的面积来衡量);
  • 可以用于用户间忠诚度的比较。

  下面是根据上表绘制的雷达图示例:

user-loyalty-RadarChart

用户忠诚度分析的意义

  那么基于这个展示的结果我们能做些什么呢?其实对于任何网站而言,有两个方向是一致的:保留忠诚用户减少流失用户。基于上面的用户忠诚度评价体系扩展开来就是:

  1. 分析忠诚用户的行为特征,努力满足他们的需求,提高他们的满意度;
  2. 从最近访问时间的指标数据机用户忠诚度变化趋势中发现一些可能正在流失的用户,分析他们流失的可能原因,并试图挽留流失用户;
  3. 比较忠诚用户和流失用户在指标数值上的差异,寻找哪些指标的差距导致了用户忠诚度的降低,优化网站在这些方面的表现。

  所以,我这里使用的是基于用户访问频率、最近访问时间、平均停留时间、平均访问页面数这4个指标来评价网站用户的忠诚度,并用雷达图进行展示和比较,也许你可以根据自己网站的特征找到更加适合的指标和展示方式,而最终需要做的是能够更加精确地找到网站的忠实用户,并努力留住他们。

网站转化率与漏斗模型

  前段时间刚完成了一个分析网站流程的每个步骤的流失率,并用漏斗模型进行展示的需求,这里跟大家来分享一下。分析过程可以从以下三步展开:确定需要分析的访问路径或操作流程,收集数据并分别统计出该路径中每一步的人数,最后用漏斗模型展示结果。

用户访问路径(Path Analysis)

  之前的从WEB日志到点击流这篇文章中对点击流的概念进行了介绍,其实一个点击流就是用户的一次访问路径。在大多数情况下用户的访问路径随意的,无序的,用户在访问一个网站时可能会经常使用后退、返回主页或者直接点击某个链接等,不同用户访问路径的重合度可能只有1%,分析这些无序的路径是毫无意义的。

  所以,我们要分析的是网站中的一些关键路径(Key Path),即用户是为了某个目标而进入了一个相对标准的有序的路径,用户的目标就是为了到达“出口”,而不是随意游荡。如电子商务网站的注册流程、购物流程,应用型网站的服务使用流程等。举一个电子商务网站购物流程的简单例子:

E-Commerce-Shopping-Process

  于是,我们就可以根据这些关键路径来计算每一步的转化率了。

转化率(Conversion Rate)

  转化率,顾名思义,就是从当一个页面进入下一页面的人数比率,比如访问我的博客首页的用户有30,而从首页点击进入本文的用户有12,那么从首页到这篇文章的转化率就是12/30=40%。当然,我们可以根据用户的访问路径计算每个页面到下个页面的转化率,同样这类工作大部分也是没有意义的,我们需要抓住重点——关键路径的转化率。

  以上面的购物流程为例,我们可以分别统计出这5步中每一步的人数,然后计算得到每一步的转化率:

  浏览 购物车 订单 支付 完成交易
人数 2071 622 284 235 223
上一步转化率 100% 30.0% 45.7% 82.7% 94.9%
总体转化率 100% 30.0% 13.7% 11.3% 10.8%

GA-E-Commerce-Funnel
  通过对这些数据的统计,我们已经可以初步判断该流程转化率的情况,及每一步的流失率情况。当然,为了让分析的结果更加具体形象,我们可以借助一些图表工具,漏斗模型用在这里正好恰当不过了。

漏斗模型(Funnel Model)

  漏斗模型不仅显示了用户在进入流程到实现目标的最终转化率,同时还可以展示整个关键路径中每一步的转化率。Google Analytics提供了漏斗模型很好的分析和展示方案,具体的方法可以参考蓝鲸的文章——Google Analytics功能篇—目标和渠道,Google Analytics中漏斗模型的展示可以见右边的截图。

  因为可以拿到原始数据,所以我选用了更加灵活,定制程度更高的excel表格来处理。为了能显示漏斗的效果,在网上找到了一个很实用的方法——设置占位数据,然后用条形堆栈图展示数据,并将占位数据的数据条颜色去除,显示效果上就是下面每个数据条都居中了,占位数据=(进入人数-当前人数)/2,结果如下图:

Funnel-Model

  这里的下面每个蓝条的左边都是占位数据条,只是它们被“隐形”了而已。

  需要注意的是,单一的漏斗模型对于分析来说没有任何意义,我们不能单从一个漏斗模型中评价网站某个关键流程中各步骤的转化率的好坏,所以必须通过趋势比较细分的方法对流程中各步骤的转化率进行分析:

  • 趋势(Trend:从时间轴的变化情况进行分析,适用于对某一流程或其中某个步骤进行改进或优化的效果监控; 
  • 比较(Compare:通过比较类似产品或服务间购买或使用流程的转化率,发现某些产品或应用中存在的问题;
  • 细分(Segment:细分来源或不同的客户类型在转化率上的表现,发现一些高质量的来源或客户,通常用于分析网站的广告或推广的效果及ROI。

  所以,漏斗模型适用于网站中某些关键路径的转化率的分析,以确定整个流程的设计是否合理,各步骤的优劣,是否存在优化的空间等。试着去了解用户来你的网站的真正目的,为他们提供合理的访问路径或操作流程,而不是一味地去提高转化率。

向上营销、交叉营销与关联推荐

  我们会发现很多网站都具备了内容推荐的功能,不仅是像B2C电子商务类的卓越的图书推荐,也包括兴趣类网站像豆瓣的豆瓣猜等。这类功能无疑在帮助用户发现需求,促进商品购买和服务应用方面起到了显著性的效果。那么这类的推荐是怎么得到的呢?其实跟网站数据分析不无相关,我们可以来简单看一下它的原理和实现。

  关联推荐在营销上被分为两类:

  向上营销(Up Marketing):根据既有客户过去的消费喜好,提供更高价值或者其他用以加强其原有功能或者用途的产品或服务。

  交叉营销(Cross Marketing):从客户的购买行为中发现客户的多种需求,向其推销相关的产品或服务。

  向上营销是基于同类产品线的升级或优化产品的推荐,而交叉营销是基于相似但不同类的产品的推荐。举个简单的例子,可以看一下苹果的产品线:

Apple-products-compare

当你购买一个ipod nano3的时候,向你推荐升级产品nano4、nano5或者功能类似的itouch就叫做“向上营销”;而推荐Iphone、Mac或ipad的时候就是“交叉营销”了。

  而关联推荐在实现方式上也可以分为两种:以产品分析为基础的关联推荐和以用户分析为基础的关联推荐。产品分析的关联推荐指的是通过分析产品的特征发现它们之间的共同点,比如《Web Analytics》和《Web Analytics 2.0》的作者都是Avinash Kaushik,而且书名都包含Web Analytics,都是网站分析类的书籍,同时也可能是同一个出版社……那么基于产品的关联就可以向购买了《Web Analytics》的用户推荐《Web Analytics 2.0》。而基于用户分析的推荐是通过分析用户的历史行为数据,可能会发现购买了《Web Analytics》的很多用户也买了《The Elements of User Experience》这本书,那么就可以基于这个发现进行推荐,这种方法就是数据挖掘中的关联规则(Association Rules)挖掘,其中最经典的案例就是沃尔玛的啤酒和尿布的故事。

beer-and-diapers

  目前很多的关联推荐还是基于产品层面的,因为实现上更为简单(对于网站而言,产品数据明显少于用户行为数据,而且可能相差好几个数量级,所以分析工作就会轻很多),基于产品的推荐更多地以上面所述的两种营销手段来实现,更偏向于传统的“推式”营销(个人对这种营销方式比较没有好感,尤其“捆绑销售”之类)。

基于用户行为分析的关联推荐

  所以个人更偏向于基于用户分析的实现方式,这样更有利于发现用户的潜在需求,帮助用户更好的选择它们需要的产品,并由用户决定是否购买,也就是所谓的“拉式”营销。通过向用户推荐产品或服务,激发用户的潜在需求,促使用户消费,更加符合“以用户为中心”的理念。所以下面主要简单描述下以用户行为分析为基础的关联推荐,无论你是电子商务网站或是其他任何类型的网站,其实都可以实现这个功能,只要你具备以下前提:

  1. 能够有效地识别网站用户;
  2. 保留了用户的历史行为数据(点击流数据(clickstream)或运营数据(outcomes));
  3. 当然还需要一个不错的网站数据分析师。

  这里以电子商务网站为例来说明一下关联规则的具体实现。目前大部分电子商务网站都提供用户注册的功能,而购物的用户一般都是基于登录的条件下完成的,所以这里为用户识别提供了最为有效的标示符——用户ID(关于用户识别的方法,请参考这篇文章——网站用户的识别);同时网站会把所有用户的购物数据储存在自己的运营数据库里面,这个为用户行为分析提供了数据基础——用户历史购物数据。所以满足了上述的前两个条件,我们就可以着手进行分析了。

  关联规则的实现原理是从所有的用户购物数据中(如果数据量过大,可以选取一定的时间区间,如一年、一个季度等),寻找当用户购买了A商品的基础上,又购买了B商品的人数所占的比例,当这个比例达到了预设的一个目标水平的时候,我们就认为这两个商品是存在一定关联的,所以当用户购买了A商品但还未购买B商品时,我们就可以向该类用户推荐B商品。如下图:

Relevance-Recommendation

  从上图可以看到其中牵涉3个集合:所有购买过商品的用户全集U、购买了A商品的用户集合A以及在购买了A商品之后又购买了B商品的用户集合G。基于这3个集合可以计算关联规则挖掘中的2个关键指标——支持度(Support)置信度(Confidence)

  支持度=购买了A和B商品(集合G)的人数/所有购买过商品(集合U)的人数

  置信度=购买了A和B商品(集合G)的人数/购买了A商品(集合A)的人数

  得到这两个指标之后,需要为这两个指标设立一个最低门槛,即最小支持度和最小置信度。因为在用户的购买行为中,购买A商品的用户可能不仅购买B商品,还购买了C、D、E……等一系列商品,所以我们需要分别算出所有这些组合的支持度和置信度,只有满足比如支持度>0.2,置信度>0.6的这些商品组合才可以认为是有关联的,值得推荐的。

  当然,如果你的网站不是电子商务网站,你同样可以用用户浏览网站的点击流数据实现关联推荐的功能。同样是基于用户历史行为,比如浏览了A页面的用户也浏览的B页面、观看了A视频的用户也观看了B视频、下载了A文件的用户也下载了B文件……

  数据挖掘中的关联规则挖掘一般采用基于频繁集的Apriori算法,是一个较为简单有效的算法,这里就不具体介绍了,有兴趣的朋友可以去查下资料。

在进行关联规则分析时需要注意的一些问题

  • 注意关联推荐的适用范围和前提条件,并不是每一类网站都适合或需要进行关联推荐的;
  • 最小支持度和最小执行度的设立需要根据网站运营的特征设定,不宜偏高或偏低,建议基于实验或实践的基础上不断优化,寻找一个最佳的权衡点。
  • 需要特别注意的是,在关联规则中A商品与B商品有关联,并不意味着B商品与A商品的关联也成立,因为两者的置信度算法是不同的,关联方向不可逆。
  • 关联规则分析在算法上其实并不难,但是要将其在网站上真正实现好,在满足上面3个前提的基础上还需要持续地优化算法,而更主要的是需要网站各部门的协作实现。

  所以,基于用户行为分析的关联推荐完全从用户的角度进行分析,比单纯地比较产品间的关联更为深入和有效,更加符合用户的行为习惯,有利于发现用户的潜在需求,不妨尝试一下。

从WEB日志到点击流

  我们平常在看网站分析相关文章的时候,时常会看到“点击流(Clickstream)”这个词,点击流数据是网站分析的主要来源。那么究竟什么是点击流数据,它又来源于何处,为什么它是网站分析的基础数据?关于这些问题的系统解释,推荐阅读《点击流数据仓库》这本书,这里先对这几个问题做下简单的回答。

  首先,点击流来源于何处?可能从文章标题就可以看出来了,点击流数据来源于网站日志,其实就是用户日常浏览你的网站时产生的日志信息(关于WEB日志,可以参阅这篇文章——WEB日志格式)。那为什么不直接叫网站浏览日志,而叫点击流数据呢?可以先看一下下面这张图:

clickstream

  从图上可以看出点击流这个概念更注重用户浏览网站的整个流程,网站日志中记录的用户点击就像是图上的“点”,而点击流更像是将这些“点”串起来形成的“线”。也可以把“点”认为是网站的Page,而“线”则是访问网站的Session。所以点击流数据是由网站日志中整理得到的,它可以比网站日志包含更多的信息,从而使基于点击流数据统计得到的结果更加丰富和高效。

  那么点击流数据是如何从WEB日志中扩展出来的呢?其实很简单,只要有Sessionid和站内Referrers就可以将这些“点”串联起来。其中Sessionid唯一地标识一条点击流,再通过Referrers确定这个Session中页面被依次访问的顺序,那么这条线就可以轻松地画出来了。

  通常我们会分两张表(数据库中)或两种格式的文件(文件系统中)来记录点击流数据,一张记录“点”的信息,另一张记录“线”的信息:

  线(Session)的信息:Sessionid(唯一标识符)、访问来源(Referrers)、进入页面(Entrance)、离开页面(Exit)、开始时间(Begin Time)、结束时间(End Time)、访问时长(Time on Site)、访问页面数(Depth of Visit)、访问用户(Cookie)……

  有没有发现,当你拥有这些信息时,很多网站分析度量的计算变简单了:来源(Sources)、进入页面(Entrances)、离开页面(Exits)可以直接获得,平均访问时间和平均浏览页面数也可以通过简单计算得到,连Bounce Rate的计算也变得简单了,只要选择那些访问页面数为1的“线”就行。

  点(Page)的信息:URL、点击时间(Hit Time)、页面停留时间(Time on Page)、位于Session的第几步(Step),Sessionid(在关系数据库中可以用于跟Session表的外键关联)……

track

  其实点的信息被简化了,当然你可以添加更多的信息,比如页面响应状态码,冗余访问用户的Cookie等。但是这里多了一个有意思的信息——Step,这个是基于Session的,通过Step你可以发现其实你已经追踪到了用户的访问足迹,这个信息在梳理网站的流程、计算转化率(Conversion Rate)的时候非常有用,也可以基于它做用户行为分析。

  其实这就是点击流,并没有那么复杂,但是可以注意到,当WEB日志转化成点击流数据的时候,很多网站分析度量的计算变得简单了,这就是点击流的“魔力”所在。基于点击流数据我们可以统计出许多常见的网站分析度量——网站分析的基本度量

网站分析的基本度量

metrics-of-web-analytics  我们在使用各种网站分析工具的时候,会看到很多不同的度量指标,可能不同的工具会有不同的命名和定义,这里列举一些常见的度量,简单说明一下它们是如何计算得到的。

  下面的度量都是来源于网站点击流数据,但根据点击流数据获取方式的不同(来源于网站原始日志文件或通过beacons和JavaScript的方式获取的网站日志,如同样免费的AWStats和Google Analytics)得到的度量也会有差异,某些度量只有通过特定的方式才能获得。关于网站日志的介绍,请参考这篇文章——WEB日志格式

Hits

  来源于网站原始日志,即用户浏览网站时发起的请求数,包括页面请求,也包括图片、CSS、Flash等,所以一般打开一个页面会发送多个请求,根据网页设计的差异Hits会是PV(Page Views,下面会有介绍)的N倍,比如我的博客的AWStats统计中Hits数一般是PV的3-5倍。

Page Views

  即PV,页面浏览数,页面被打开(请求)的次数,是网站分析中最常见的度量。注意Ajax架构或Flash下同一URL下可以浏览多个页面,进行多个操作,这些都无法在PV中体现。还需要注意Unique Page的定义,当一个页面被刷新多次时,其实用户浏览的始终是同一页面,所以这时的Unique Page Views还是1。

Visits

  访问量,也是常见度量之一,用于衡量用户的一次访问(从打开进入网站到离开网站,其中可能浏览了多个页面(PV))的数量,也就是网站Session的个数(关于Session,可以参考我的这篇文章——Session和Cookie的辨析)。

Unique Visitors

  UV,被用于标识访问网站的唯一用户数,关于如何识别用户,请参考这篇文章——网站用户的识别。注意一个Unique Visitors可能会有多个Visits。

Time on Page

  页面停留时间,即用户从打开页面到离开页面的时间间隔,这个度量一般只有当用户在你的网站中点击了下一个页面时才会有记录,否则是0,所以所有Visits的最后一个页面的Time on Page一般都为0,具体参见WEB日志的作用和缺陷中关于停留时间的说明。所以我们在计算页面平均停留时间(Avg. on Page)的时候一般会过滤Time on Page=0的记录。

Time on site

  即每个Visits的停留时间,一个Session的开始到结束。跟Time on Page同样需要注意其计算中存在的误差,取平均的时候注意过滤长度为1的session。

Bandwidth

  这个度量也一般只能从原始日志中获取,Bandwidth是AWStats中的命名,统计网站的流量,需要将所有请求的传输字节数相加得到结果。一般用于衡量网站的流量情况,服务器IO负荷,及某些限制了月流量最大值的虚拟主机流量使用情况。

Bounce Rate and Conversion Rate

  关于Bounce Rate ,有一句很形象的描述——“I came, I puked, I left.” 即进入你的网站,什么事都没干就直接离开了。关于Bounce Rate的注意点,请参考这篇文章——关于Bounce Rate定义的疑问

  如果一个访问没有Bounce,那么我们就可以跟踪其访问足迹统计Conversion Rate,即从上一步进入的访问率(Current Visits/ Previous Visits)。转化率对于某些网站的关键流程的优化可以起到重要作用,比如电子商务网站的购买流程等。

Entrances and Exit Rate

  Entrances一般用户衡量网站首页或Landing Page的进入情况,指First Page of Visits。Exit Rate可以作为每个页面的基本度量,衡量从该页面离开的比率,即该页面是整个Visits的最后一个页面。

Sources and Search Key Phrase

  来源于referrers的统计,Sources即网站的来源(搜索引擎、广告或其它),用于广告投放效果分析、SEM等。

  Search Key Phrase是基于来源是搜索引擎referrer的解析,统计来源的搜索关键词,Avinash Kaushik建议我们使用Key Phrase而非KeyWords。有助于SEO和发现用户需求。

Engagement

  参与度对于不同网站来说定义不一,可以是电子商务网站的购买、反馈行为,也可以是论坛的发帖、跟帖行为,还有视频网站的观看视频、游戏网站的线上游戏等。每个访问的参与度可以用Engagement Rate = Engagement Index / visits来计算,即参与度 = 参与标识/访问量。

Destinations

  即点击站外链接,一般通过JS代码来监控站外链接的点击,对于一些广告、宣传、推荐等点击情况跟踪比较有用,可以衡量网站对资源推广的能力和价值。

  上面列举的都是网站分析中一些比较基本的指标和度量,我们在网站分析过程中可以基于这些度量通过求和、比例、平均等方式获得更多我们希望得到的数据,进而为我们的分析结果提供更充分的依据。

关于Bounce Rate定义的疑问

bounce  Bounce Rate是网站分析中一个比较有意思的度量,也是Avinash Kaushik个人比较喜欢的一个度量,目前网上对它的讨论也比较多。目前用的比较多的是“跳出率”这个翻译,个人比较喜欢Sidney的翻译——崩失率,音译和意译兼备。原本一直以为Bounce Rate的定义就是只浏览了单个页面的访问量占总访问量比率,无论是Google Analytics的“Single PV Visits/Total Visits”还是Omniture的“Single Page Visits/Total Visits”,计算的方法都较为类似。但最近在翻Avinash Kaushik的《Web Analytics》时,发现Avinash Kaushik对Bounce Rate的定义推荐使用Time on Site,即访问的停留时间小于10秒或5秒的访问量所占的比例,不知道是不是因为这本书出版已经有点时间了的关系,不知道《Web Analytics 2.0》中对Bounce Rate的定义是怎么样的。

  但是无论用Visits的页面数还是Time on site来定义Bounce Rate,其实都存在陷阱,都会引起Bounce Rate过高。

Bounce Rate中的陷阱

  先来说说为什么Avinash Kaushik推荐使用Time on Site,据《Web Analytics》中Bounce Rate相关内容章节中的介绍,Avinash Kaushik是根据实践的经验得出用户在网站的停留时间小于10秒时,一般无法完成一次有效的交互(Engagement)。当然根据网站类型的不同,Bounce的Time on Site的可以在5-10秒这个区间里面选择一个合适的值。

  之所以使用停留时间,而不用浏览的页面数,是因为用单页面的访问来定义Bounce是不准确的。就像基于Wordpress的博客,可能很多用户只需要访问首页就可以浏览最新发布的文章,也就是说虽然只访问了一个页面但达到了期望的目的——浏览该博客最近发布的文章,基于RSS的订阅也是这种情况,那么我们就不能认为这类访问是Bounce的。再举个更直观的例子,Twitter上包括查看最近tweets或发布tweet,其实都是在同一URL——twitter.com下完成的,如果单纯使用单页面访问来定义Bounce Rate,估计Twitter.com的Bounce Rate会达到98%以上,这样就无法真正体现Bounce Rate指标的意义了。

  既然用Page或PV=1来衡量Bounce存在以上的弊端,那么为什么这么多的网站分析工具还是使用这一标准呢?首先我们必须清楚Avinash Kaushik推荐使用Time on Site是基于一定的前提的,即网站的停留时间可以进行准确的测量,而现在停留时间的普遍计算方法是存在缺陷的,可以参考我之前的文章——WEB日志的作用和缺陷中对停留时间缺陷的说明。当然也有一些特殊的方法是可以获得用户离开网站的时间点的,如用户点击链接时的页面重定向,关闭浏览器时弹出隐藏窗口等,这些技术因为其实现方式在某些程度上会影响用户的使用,或让用户感觉不适,被认为是不雅的手段,所以一般不建议使用。

pitfall

  所以一般我们是很难得到用户真正离开网站的时间点的,当前一些流行的分析工具也是如此,这就会导致Time on Site无法得到准确的测量,那结果就是所有单页面的Visits的Time on Site都是0,而那些0<Time on Site<10s的Visits其实只是那些从进入页面到离开页面停留时间小于10秒的访问,而不是真正的访问停留时间就一定小于10秒(我们无法知道他在最后一个页面的停留时间)。这种情况下的Time on Site将会把我们引入一个更深的陷阱,所以目前的大部分分析工具基于其本身获取数据的能力选择“单个页面的访问量占总访问量比率”作为Bounce Rate也是可以理解的,或者更像是一个无奈之举。

  所以,对于Bounce Rate其实可以保持谨慎的乐观,也许你的网站并没有分析数据上显示的这么糟。那么Bounce Rate这个有趣的度量有没有更加有效的定义方法呢?我目前还没有找到,欢迎大家回复讨论。

Abandonment Rate的影响因素

cart-abandonment  前几天看到了Sidney写的一篇文章——电子商务(B2C)网站的Abandonment Rate,里面详细介绍的B2C网站中购物车及付款流程可能造成交易的中断,客户放弃购买该商品的情况,也就是Abandonment Rate。文章中提到了Abandonment Rate可能涉及的影响因素,及如何降低Abandonment Rate的一些方法,感觉对提高电子商务网站商品的销售转化率十分有效。其中谈到Abandonment Rate与商品的价格或商品的销售组合之间可能存在某种联系,为了求证这类联系是否存在,我们可以使用一些定量分析的方法对可能影响Abandonment Rate的某些因素进行了分析。

哪些因素影响了Abandonment Rate

  一般B2C电子商务网站都会基于商品进行分类,如下图:

E-Commerce-Products

  以卓越销售的商品为例,卓越销售商品以图书音像为主、电子日用品为辅,其下的产品分为图书音像、消费电子、日用消费品等类目,之下还有子类目的划分,最底层就是其销售的商品,如图书Web Analytics 2.0、某品牌的手表等,那么可以整理得到如下的商品列表:

商品类目1 商品类目2 商品类目3 ……
商品1 商品3 商品4  
商品2   商品5  
……   ……  

  根据上面的表格,我们可以通过横向对比和纵向对比的方法对Abandonment Rate影响因素进行分析。因为不同的商品类目可能在商品的品牌口碑、本质特征、展示方式、购物车流程等方面存在差异,通过横向比较商品类目的Abandonment Rate是否存在显著性差异,可以确定这么因素的影响情况;而同一类目中商品的纵向对比,可以在控制商品的品牌口碑、本质特征、商品展示方式、购物车流程相似的条件下,比较商品的关注度、价格、购买数量、促销等因素的影响情况。

不同商品类目间的横向比较

  样本数据的选择:为了说明差异是有商品类目的不同说引起的,我们需要选择商品受关注程度、平均价格、销售情况、促销频率等较为相近的2个商品大类(如鼠标和帽子),以排除这些因素的影响。同时选取合适的时间跨度,你可以选择一个月、一个季度或者任意的时间区间来分析该时间段内样本数据特征。如:

categories-AR-compare

  样本数据是关于某时间发生频数的统计,所以比较两组样本间的差异可以选择四格表卡方检验的方法,这里的检验结果χ2=16.84,显著性水平p<0.01, 差异有高度统计学意义,拒绝零假设,认为两组数据存在显著性差异。

同一类目中不同商品的纵向比较

  样本数据的选择:同样我们需要选择关注度、价格、销售数量、促销频率等存在一定差异的相同类目下的商品(如不同品牌、价格和款式的手表)来进行比较分析。同样选取合适的数据时间段,如统计得到以下数据:

商品  关注度  价格 销售数量 促销比率 Abandonment Rate
1 3258 588 251 0.16 0.4487
2 1569 998 76 0.05 0.4711
3 2965 158 206 0.20 0.2639
4 236 2568 15 0 0.5714
5 985 1128 3 0 0.3843

  我们可以通过excel的数据分析功能获取各列间的相关系数r,首先可以根据r值的正负确定是正相关还是负相关,然后比对以下的相关系数与相关程度的对照表,确定相关性的强弱:

|r|>0.95 |r|>=0.8 0.5<=|r|<0.8 0.3<=|r|<0.5 |r|<0.3
显著性相关 高度相关 中度相关 低度相关 不相关

  那么根据结果可以得出以下结论:Abandonment Rate与价格高度正相关,与促销频率中度负相关,与关注度中度负相关,与销售数量低度负相关。

如何降低Abandonment Rate

cart-confirmed

  既然已经知道有这些因素影响了B2C的Abandonment Rate,那么我们如何通过网站优化来降低Abandonment Rate呢?其实Sidney在他的文章中已经提到的许多解决的方法是十分有效的,下面根据以上影响因素分析的结果分各因素来简要阐述下我们可以做些什么?

商品类目间的差异

  如果通过比较分析得出2个或多个商品类目间存在显著的差异,那么首先要确定这个差异是不是由于商品本质特征的不同会导致,因为商品的某些本质特征有时并不是能够人为控制的,诸如:

  • 商品的品牌口碑:网购的用户可能会偏向品牌型产品;
  • 规格的固定性:电子商品的规格确定性会高于衣物等日用品,所以鼠标的Abandonment Rate会低于帽子也不奇怪;
  • 售后服务:一般商品的售后服务由厂商提供,那么这个因素一般是电子商务网站无法控制的。

  由于以上原因造成的Abandonment Rate偏低的商品类目,网站方面可能就力不从心了,然而如果差异是由一下因素造成的,那么网站就得找找自己的原因的:

  • 商品展示方式的差异:布局、图片、商品描述、一些有误导性的信息……这些也会造成Abandonment Rate的偏高;
  • 购物车流程的差异化:用户可能在购买鞋子时因为需要填写尺码、颜色等信息而直接关闭浏览器离开了,但在购买图书是可能就不会出现这种情况;
  • 用户购买体验:如果网站提供了用户的交流平台,那么客服人员对某类商品的不熟悉或不耐烦也会造成该商品的Abandonment Rate过高。

商品个体因素的影响

  对于单个商品而言,关注度、价格、销售量、促销频率这些因素可能就决定了Abandonment Rate,但是麻烦来了,以上的这些因素可能很难做持续的改进,这时我们可以采取互补的方式,即通过提高某些有利因素来降低某些不利因素的影响。

  比如我们发现A产品由于价格过高而造成与同类商品相比Abandonment Rate偏高,而分析证明促销对于降低该类商品的Abandonment Rate有显著的有效性,那么我们可以是增加A产品的促销频率;或者提高关注度对降低Abandonment Rate有效,那么可以把A产品放到网站更加显眼的位置……

  当然,由于电子商务网站商业模式上的差异,对Abandonment Rate的影响因素可能各不相同,上面也只是举例说明了一部分因素。所以,最好根据自己网站的特点来选取可能的影响因素进行分析,方法可以借鉴上面的两种,如果你有更好地分析方法,欢迎跟我分享。

网站用户的识别

web-users  用户分析是网站分析中一个重要的组成部分,在分析用户之前我们必须首先能够识别每个用户,分辨哪些是”New Customer”,哪些是”Repeat Customer”。这样不但能够更加清晰地了解到底有多少用户访问了你的网站,分辨他们是谁(用户ID、邮箱、性别年龄等);同时也能够帮助你更好地跟踪你的用户,发现它们的行为特征、兴趣爱好及个性化的设置等,以便于更好地把握用户需求,提升用户体验。

  通常当你的网站提供了注册服务,而用户注册并登陆过你的网站,那么用户可以更容易地被识别,因为网站一般都会保存注册用户的详细信息;但是你的网站并不需要注册,而用户的行为以浏览为主,这是用户识别就会显得较为困难,下面提供了几种常用的用户识别的方法:

识别用户的几种方法

  当用户并未注册登录的情况下,识别用户的唯一途径就只剩下用户浏览行为的点击流数据,通常情况下它们会保存在WEB日志里面,关于WEB日志的详细说明可以参考我之前的文章——WEB日志格式。而WEB日志本身存在的缺陷可能导致用户识别的不准确性,关于WEB日志的缺陷可以参考之前的文章——WEB日志的作用和缺陷,所以我们在选择用户识别方法的过程中,在条件允许的情况下尽量选择更为准确的方法:

1、基于IP的用户识别

  IP地址是最容易获取的信息,任何的WEB日志中均会包含,但其局限性也较为明显:伪IP、代理、动态IP、局域网共享同一公网IP出口……这些情况都会影响基于IP来识别用户的准确性,所以IP识别用户的准确性比较低,目前一般不会直接采用IP来识别用户。

  获取难度:★

  准确度:★

2、基于IP+Agent的用户识别

  同样基于最简单形式的WEB日志,我们可以增加一项——Agent,来提高单一IP方式识别用户的准确性。Agent也是WEB日志中一般都会包含的信息,通过IP+Agent的方式可以适当提高IP代理、公用IP这类情况下用户的分辨度,同时通过Agent还可以识别网络爬虫等特殊“用户”,但同样准确度也欠高。

  获取难度:★

  准确度:★★

3、基于cookie的用户识别

  当你通过自定义Apache日志格式或者JavaScript的方法获得用户cookie的时候,其实你已经找到了一个更有效的用户识别的手段。cookie在未被清除的其前提下可以认为是跟某个访问客户端电脑绑定的(一个客户端有可能包含多个cookie),所以用cookie来标识用户其实指的是用户使用的客户端电脑,而并非用户本身。

  用cookie识别用户的方法当然也存在缺陷:最常见的就是cookie被清除而导致用户无法与原先记录实现对应;同时由于客户端电脑会被共用,或者用户会在不同的电脑上访问你的网站,这个时候cookie就无法直接对应到该用户了。

  获取难度:★☆

  准确度:★★☆

4、基于用户ID的用户识别

  基于用户ID的用户识别是最为准确,因为一般情况下用户不同共享他的用户ID,所以我们可以认为数据中的userid唯一地指向该用户,几乎不存在偏差。当然要使用用户ID来识别用户是需要一定的前提条件的:网站必须是提供用户注册登录服务的,并且可以通过一些手段在点击流数据中记录userid。

  获取难度:★★

  准确度:★★★

  所以对于一个需要用户ID注册登录的网站来说,用户唯一标识符的选择可以遵从以下顺序:当用户注册登录时以userid为准,当用户在未登录状态浏览时以用户的cookie为准,当用户未登录且cookie无法获取的情况下以IP+Agent为准;这样就能从最大程度上识别唯一用户。

  这里推荐一个网站日志中cookie项的自定义设置方法,以便更好地识别用户。cookie是从用户端存放的cookie文件记录中获取的,这个文件里面一般在包含一个cookieid的同时也会记下用户在该网站的userid(如果你的网站需要注册登陆并且该用户曾经登录过你的网站且cookie未被删除),所以在记录日志文件中cookie项的时候可以优先去查询cookie中是否含有用户ID类的信息,如果存在则将用户ID写到日志的cookie项,如果不存在则查找是否有cookieid,如果有则记录,没有则记为”-”,这样日志中的cookie就可以直接作为最有效的用户唯一标识符被用作统计。当然这里需要注意该方法只有网站本身才能够实现,因为用户ID作为用户隐私信息只有该网站才知道其在cookie的设置及存放位置,第三方统计工具一般很难获取。

获取用户信息的途径

  通过以上的方法实现用户身份的唯一标识后,我们可以通过一些途径来采集用户的基础信息、特征信息及行为信息,然后为每位用户建立起详细的Profile:

  1) 用户注册时填写的用户注册信息及基本资料;

  2) 从网站日志中得到的用户浏览行为数据;

  3) 从数据库中获取的用户网站业务应用数据;

  4) 基于用户历史数据的推导和预测;

  5) 通过直接联系用户或者用户调研的途径获得的用户数据;

  6) 有第三方服务机构提供的用户数据。

识别并获取用户信息的价值

  通过用户身份识别及用户基本信息的采集,我们可以通过网站分析的各种方法在网站是实现一些有价值的应用:

  • 基于用户特征信息的用户细分;
  • 基于用户的个性化页面设置;
  • 基于用户行为数据的关联推荐;
  • 基于用户兴趣的定向营销;
  • ……

WEB日志的作用和缺陷

log-file  Avinash Kaushik将点击流数据的获取方式分为4种:log files、web beacons、JavaScript tags和packet sniffers,其中包嗅探器(packet sniffers)比较不常见,最传统的获取方式是通过WEB日志文件(log files);而beacons和JavaScript是目前较为流行的方式,Google Analytics目前就是采用beacons+JavaScript来获取数据的,我们可以来简单看一下传统的网站日志和beacons+JavaScript方式各自的优缺点:

WEB日志文件

  优势:简单方便,不需要修改网页代码,可以自定义日志格式;较多的现成的日志分析工具的支持(AWStats、Webalizer等);获取网络爬虫数据的唯一途径;可以收集底层数据供反复的分析。

  缺陷:数据的质量较低,网站日志包含所有日志数据,包括CSS、图片、脚本文件的请求信息,所以过滤和预处理来提升数据质量必不可少;页面缓存导致浏览无日志记录,这个是比较致命的。

beacons+JavaScript

  优势:只需要在页面代码中操作,不需要配置服务器;数据的获取有较高的可控性,可以只在需要统计的页面植入代码;能够获取点击、响应等数据;不需要担心缓存等的影响,数据的准确度较高;可用第三方cookie实现多网站跟踪比较。

  缺陷:当浏览器禁止接收图片或者禁用JS时,都可能导致数据获取的失败;只在应用服务层操作,无法获取后台的数据;对图片、文件等请求信息的获取难度相对较大;过多地JS可能导致页面性能的下降,虽然这方面的影响一般可以忽略。

无论通过何种方式,最终数据都是通过日志文件来记录的,只是通过JS可以更容易控制想要获取的数据,并通过在URL带参数的方式记录到日志文件中共解析和统计。所以底层的数据形式无非就是记录在日志文件中的那几项,在WEB日志格式一文中,已经对网站日志的类型和组成做了基本的介绍,这里就再来解析下WEB日志中各项对网站数据分析的作用,以及存在的不确定性和缺陷。

WEB日志中各项的作用

  根据WEB日志的组成,下面来介绍下各项在网站数据统计和分析中的作用。其中IP一般在为记录cookie的情况下被用于识别唯一用户的标准,标识符和授权用户一般情况下都为空,而日期时间标识日志生成的时间戳,是一个必备信息。

请求(request)

  请求类型比较少会被用于统计,只有少数的统计表单提交情况是会被用到,而版本号对统计来书基本是无用的。

  请求的资源一般跟域名(domain,一般在包含子域名需要分开统计,或者多个站点的日志被收集到同一日志服务器是,会在网站日志里面自定义加入域名信息以区分)一起决定本次请求的具体资源,页面点击、图片获取或者其他。当然在URL后面加入一些自定义的参数可以获得一些特殊的统计数据,Google Analytics就是通过这种方式实现session和cookie的定义和获取的。

状态码(status)

   状态码比较常被用于一些请求响应状态的监控,301页面重定向或者404错误,统计这些信息可以有效地改进页面的设计,提高用户体验。

传输字节数(bytes)

  也比较少被用到,可以判断页面是否被完全打开,文件是否已被读取,操作是否被中断。但在动态页面无法判断。

来源页面(referrer)

  referer涉及的统计较为常见,一般是统计访问的来源类型、搜索引擎、搜索关键字等;同时也是点击流中串连用户访问足迹的依据。

用户代理(agent)

  识别网络爬虫;统计用户的系统、浏览器类型、版本等信息,为网站开发提供建议,分析各类浏览器的使用情况和出错概率等。

session和cookie

  关于session和cookie,可以参考session和cookie的辨析。session被用于标识一个连续的访问,用户统计visits这个度量;而cookie主要用于用户识别,也是统计Unique Visitor的依据。

  另外还有一种特殊的网站日志,即记录服务器的提示、警告及错误信息,这类日志可以被用于分析用户的错误。

日志的不准确性

  WEB日志在技术层面的获取方式及各类外部因素的影响使基于网站日志的数据分析会存在许多的不准确性,下面来介绍下WEB日志中那些项目可能造成数据的不准确,以及造成这些缺陷的原因。

客户端的控制和限制

  由于一些浏览网站的用户信息都是有客户端发送的,所以用户的IP、Agent都是可以人为设置的;另外cookie可以被清理,浏览器出于安全的设置,用户的可以在访问过程中限制cookie、referrer的发送。这些都会导致用户访问数据的丢失或者数据的不准确,而这类问题目前很难得到解决。

缓存

  浏览器缓存、服务器缓存、后退按钮操作等都会导致页面点击日志的丢失及referrer的丢失,目前主要的处理方法是保持页面信息的不断更新,可以在页面中添加随机数。当然如果你使用的JavaScript的方法,那么就不需要担心缓存的问题。

跳转

  一些跳转导致referrer信息的丢失,致使用户的访问足迹中断无法跟踪。解决方法是将referer通过URL重写,作为URL参数带入下一页面,不过这样会是页面的URL显得混乱。

代理IP、动态IP、局域网(家庭)公用IP

  IP其实准确性并不高,现在不止存在伪IP,而且局域网共享同一公网IP、代理的使用及动态IP分配方式,都可能使IP地址并不是与某个用户绑定的,所以如果有更好的方法,尽量不要使用IP来识别用户。

session的定义与多cookie

  不同的网站对session的定义和获取方法可能差异,比如非活动状态session的失效时间、多进程同时浏览时sessionid的共享等,所以同一个网站中session的定义标准必须统一才能保证统计数据的准确。cookie的不准确一方面是由于某些情况下cookie无法获取,另一方面是由于一个客户端可以有多个cookie,诸如chrome、Firefox等浏览器的cookie存放路径都会与IE的cookie存放路径分开,所以如果你是用不同的浏览器浏览同一网站,很有可能你的cookie就是不同的。

停留时间

  停留时间并不是直接获取的,而是通过底层日志中的数据计算得到的,因为所有日志中的时间都是时刻的概念,即点击的时间点。这里不得不提的是一个session的最后一个页面的停留时间是无法计算得到的,可以来看一下停留时间的计算过程:

  假设一个用户在一个session里面依次点击了A->B->C这3个页面,并在点完C之后关闭了浏览器,或者长时间的禁止导致了session的中断。那么我们可以从日志中获得的数据为3个页面的点击时间(HitTime),假设A、B、C点击时间分别为HTA、HTB、HTC,那么A和B页面的停留时间(StayTime)就可以通过计算得到:STA= HTB-HTA,STB= HTC- HTB,而因为我们无法获取session结束的时间,所以STC是无法通过计算得到的,所以一般session最后页面的停留时间是0,而session得停留时间,即一次访问的时间(Time on site)是HTC- HTA,其实是从打开第一个页面到打开最后一个页面的时间间隔,也是不准确的。

  另外,我们也无法获知用户在浏览一个页面的时候到底做了什么,是不是一直在阅读博客上的文章或者浏览网站上展示的商品,用户也有可能在期间上了个厕所、接了通电话或者放空的片刻,所以计算得到的停留时间并不能说明用户一直处于Engagement的状态。