月度归档:2010 年十月

userfly—网站可用性测试工具

  博客之前介绍过网站点击热图的测试工具,同样是用于分析和优化网站的用户体验,而这篇文章中介绍的这个工具更加全面和可视化,叫做userfly

  userfly几乎可以监控用户在网站上的所有操作,通过视频的方式录制并提供回放和下载,可以记录的用户行为包括:

  • 监控鼠标的移动、点击和选取;
  • 监控文本框的输入、选择框的选取;
  • 记录页面的缩放、上下滚动和页面浏览的跳转;
  • 监控对链接、按钮的有效点击;
  • 排除对用户输入密码的记录,保护隐私。

  我看到的就是这些,也许还有更多,这里将试用该工具录制下来的网页录制成了Flash视频:

[swfobject]833[/swfobject]

  看到Demo的效果时,我有被这个工具吓到,上面是我在自己博客中的试用,可以看到几乎一切的操作都被录制了下来,包括所有的移动、点击和输入,也包括在浏览文章时可能出现的走神或者离开去做了其他事情,这些都一览无余。我怀疑这是否在一定程度上侵犯了用户的隐私,当然现在我的博客上的监控代码已经撤下来了,大家不用担心自己的操作会被“偷窥”,这里也建议如果你的网站准备使用这类工具最好事先提醒下用户:他们的操作可能会被记录监控,这是对用户的一种尊重。

  当然这种功能强大的工具不可能让你完全享受免费的午餐,你可以有一个月10次的免费捕捉用户行为的机会,如果需要更多,那么就要支付相应的费用了。建议研究网站用户体验的同学可以去试用下这个工具。

维(Dimension)和立方(Cube)

    博客之前的两篇文章:数据仓库的多维模型数据立方体与OLAP中分别对多维模型和OLAP的一些基本概念进行了介绍,这篇文章是基于那两篇文章的深入扩展,主要介绍的是多维OLAP中两个重要构成元素——维和立方的结构和组成。可能内容会偏向于模型构建方面,对那方面不太感兴趣的同学可以直接跳过。 ;-)

维(Dimension)

  维是用于从不同角度描述事物特征的,一般维都会有多层(Level),每个Level都会包含一些共有的或特有的属性(Attribute),可以用下图来展示下维的结构和组成:

Dimension

  以时间维为例,时间维一般会包含年、季、月、日这几个Level,每个Level一般都会有ID、NAME、DESCRIPTION这几个公共属性,这几个公共属性不仅适用于时间维,也同样表现在其它各种不同类型的维。其中ID一般被视为代理主键(Agent),它只被用于作为唯一性标志,并且是多维模型中关联关系的代理者,在业务层面并不具有任何意义;NAME一般是业务主键(Business),在业务层面限制唯一性,一般作为数据装载(Load)时的关联键;而DESCRIPTION则记录了详细描述信息,在多维展示和分析时我们都会选择使用DESCRIPTION来表述具体含义。这3个属性一般是所有Level都会共用的,而比如用于描述星期几的属性weekid可能只会用于“日期”这层,因为年月都不具备这一信息。所以图中我将Attributes放到了一个层面上,就如同是不同的Level从底层的多个Attributes中选取自身所需的属性,Attributes层是包含着各个Level的共有和特有属性的集合。

Hierarchy

  因为不知道怎么翻译好,所以还是用英文吧。Hierarchy(等级、层级的意思),中文的OLAP相关文档中普遍翻译为“层次”,而上面的Level被普遍翻译为“级别”,我经常会被这样的翻译搞混淆,所以我上面也一直用Level,至少对我来说这样看起来反而清晰点 :)

  因为上面这个结构的维是无法直接应用于OLAP的,我前面的文章有介绍,其实OLAP需要基于有层级的自上而下的钻取,或者自下而上地聚合。所以每一个维必须有Hierarchy,至少有一个默认的,当然可以有多个,见下图:

Hierarchy

  有了Hierarchy,维里面的Level就有了自上而下的树形结构关系,也就是上层的每一个成员(Member)都会包含下层的0个或多个成员,也就是树的分支节点。这里需要注意的是每个Hierarchy树的根节点一般都设置成所有成员的汇总(Total),当该维未被OLAP中使用时,默认显示的就是该维上的汇总节点,也就是该维所有数据的聚合(或者说该维未被用于细分)。Hierarchy中的每一层都会包含若干个成员(Member),还是以时间维,假设我们建的是2006-2015这样一个时间跨度的时间维,那么最高层节点仅有一个Total的成员,包含了所有这10年的时间,而年的那层Level中包含2006、2007…2015这10个成员,每一年又包含了4个季度成员,每个季度包含3个月份成员……这样似乎顺理成章多了,我们就可以基于Hierarchy做一些OLAP操作了。

  每个Hierarchy都包含了一个树形结构,但维中也可以包含多个Hierarchy,正如上图所示,维中的Hierarchy相互独立地构建了自己的树形结构。还是以时间维为例,时间维可以根据日历(Calendar)时间组建日历的Hierarchy,也可以根据财务(Fiscal)时间组建财务的Hierarchy,而其中财务季度的划分可能并不与日历一致,基于这种多样的Hierarchy,我们在组建多维模型时可以按需选择合适的,比如给财务部的数据分析模型选用财务Hierarchy,而其他部门的分析人员显然希望看到日历样式的Hierarchy,这样就完美地满足了不同的需求。多种的Hierarchy划分同样适用于产品维,根据产品类型、产品规格等划分 Hierarchy,对于按多种条件的产品筛选和检索是十分有效的,实例可以参见淘宝搜索商品界面和太平洋电脑中产品报价界面分类筛选模块,这里不再截图了。

立方(Cube)

  这里所说的立方其实就是多维模型中间的事实表(Fact Table),它会引用所有相关维的维主键作为自身的联合主键,加上度量(Measure)计算度量(Calculated Measure)就组成了立方的结构:

Cube

  度量是用于描述事件的数字尺度,比如网站的浏览量(Pageviews)、访问量(Visits),再如电子商务的订单量、销售额等。度量是实际储存于物理表中的,而计算度量则没有,计算度量是通过度量计算得到的,比如同比(如去年同期的月利润)、环比(如上个月的利润)、利率(如环比利润增长率)、份额(如该月中某类产品利润所占比例)、累计(如从年初到当前的累加利润)、移动平均(如最近7天的平均利润额)等,这些计算度量在Oracle中都可以借助分析函数直接计算得到,相信大部分的OLAP组件都会提供类似在时间序列上的分析功能。而这些计算度量往往对于分析而言更具意义,立方中借助与各个维的关联关系从不同的角度和层面来展现这些度量。

  The end,因为最近在看相关方面的资料,这篇文章就作为读书笔记,如果有哪里表述不准确的,还望指正。

为网站选择合适的KPIs

KPI-Selection    KPI(Key Performance Indicators,关键绩效指标),似乎是一个很熟悉的名词了,很多企业都设置了各种各样的KPI来作为日常绩效考核的指标。公司会用KPI来评估员工的表现,同样网站也需要用KPI来衡量网站的表现,选择好合适的KPI有利于正确地把握网站的运营状况,迅速地做出调整和改进。

网站KPI的定义

  KPI的设定本来就是基于目标管理的基础上的,用定量的方式来评估目标的实现情况。对于网站而言,KPI是直接与网站目标(Goal)挂钩的,下面是我对网站KPI的一些理解:

  1. KPI并不等于网站目标,而是反映目标实现过程中网站在各方面的表现情况的指标;
  2. 每个网站对KPI的选择都会存在差异;
  3. KPI往往能够直接反映网站的目标实现情况,并且可以被量化;
  4. 分析KPI可以发现运营中的问题,并直接指导决策和行为的执行。

  同时,网站可以设定多个KPI,从多个层面来评估网站的表现,这也是我在标题中用KPIs的原因。

选择KPI的原则

  基于上面对网站KPI的定义,我们在选择KPI的时候需要注意以下几个原则:

  首先根据KPI的定义,知道KPI由网站目标决定,所以在选择KPI之前先要明确网站的战略和目标。什么,你不知道你的网站目标是什么?那就问下自己网站存在的意义是什么,或者你建立这个网站是为了实现什么目的。

  既然网站目标决定了KPI,而对于每个网站而言战略目标都会存在差异,即使网站的类型再相似,其在市场、运营和发展战略上面必然不尽相同,所以就导致了上面KPI定义第二项的差异性;而网站战略会不断变化,所以KPI应该根据网站目标的变化做出调整

KPI-Rule  网站分析的指标何其之多,我们应该选择哪些指标作为KPI?所以必须把握这个原则:KPI能够直接反映网站目标的实现程度。其实很多网站分析的指标都能反映网站的基本状况,比如访问数(Visits),但它只能反映网站的受欢迎程度,而并非目标,比如Visits的数量无法直接决定电子商务网站的利润,也没法确定那些访问用户是否能够成为博客的忠实读者。所以我们需要寻找更接近目标的指标,Avinash Kaushik先生在他的博客中也一再强调在做分析的时候需要不断探索更加深入和有效的指标。

  KPI是一个定量指标,可以被衡量,所以在选择KPI的时候,我们必须明确KPI的指标定义,计算逻辑和公式,以及其具体衡量的问题

  KPI最终目的是指导我们Make Decisions或者Take Actions,所以在选择的时候必须确定其在这方面能够做出有效的判断,于是就有了Avinash Kaushik的So What Test(有时候自问自答的模式也是挺有效的),假如能够在回答完3个So What前提出有效的解决方案,那么这个指标就过关了。

  大部分的KPI指标都是可以基于细分的。因为聚合的指标对于决策和行为是无效的,看着网站的总体转化率(Conversion Rate),也许你无法采取任何行动,但通过来源细分organic搜索、PPC和各来源网站的转化率变化趋势,也许你就十分清楚是应该加强SEO还是SEM、或者着重于链接建设了。

几类网站的KPI选择

  很明显,电子商务网站的目标就是创造更多的利润(当然某些特定的时期也有可能专注于提高订单数或者创造更多购买顾客);而WEB2.0网站在不断地制造内容、聚合内容、传播内容,他们的目标在于信息的快速通常的流转;而搜索引擎一定希望更多的用户来使用他们的搜索服务,于是他们关注的是用户是否能够通过搜索引擎迅速地找到想要的信息。下面就看下这三类网站各自可以选择哪些KPI:

  对于电子商务网站,我可能会选择平均订单价值(Average Order Value, AOV)或者平均每次访问销售额(Sales Per Visit, SPV)来作为网站的KPIs,因为这些指标直指网站目标——利润。同时这两个指标都可以基于来源途径、用户类型、产品类型进行细分,可以更清晰地看到哪些渠道带来了最有价值的流量;网站吸引的是哪类用户,应该注重哪块市场的开发;或者网站的哪类商品是核心产品,网站应该坚持20/80法则还是走长尾路线。这些都是战略决策中应该考虑的问题,KPI可能已经给出了直观的参考答案。

web2_0  再来看一下博客类网站,作者都希望自己的文章被更多的读者阅读,所以他们对于博客的目标是更多的忠实读者、更多的评论和订阅,于是他们把忠诚用户访问比率每次访问的订阅几率每篇文章的评论数作为KPIs;而对于Blogger.com这类博客平台而言,吸引更多访问量的基础是用户能够不断创造出更高质量的内容,于是他们会把平均每位用户发表文章数或者产生的热门文章数作为自己的KPI,看上去两者存在很大区别,这完全取决于两者目标定位上的差异。

  同样对于Facebook、Twitter这些Social Media网站而言,他们都是以UGC(User Generated Content)为基础,用户生产的内容或者制造的热门正是他们的价值所在,也就是用户的活跃度的体现,只有足够活跃的网站才能吸引更多的眼球,制造更多的曝光和焦点。所以他们更加会关注每位用户的平均关注人数、发布信息数量、评论和转发信息数等。

  再看一下搜索引擎,Google另类地提出要让用户更快地离开网站的口号,这正是其自身目标的体现——让用户更方便快捷地找到自己想要的信息,所以是不是Google会把平均每次访问的搜索时间作为它的KPI呢?

  当然,上面都是作者的一家之言,大家可以各抒己见,基于KPI的定义的基础上,有原则地选择合适的KPI。我想网站的决策层一定会喜欢你为网站量身选择的KPIs的,因为没有比直接衡量网站战略目标更有意思的事了。

用户点击与网站目标

——基于Google Analytics的应用

click-and-goal    用户在网站的行为其实无非就是输入和点击,而点击又是最常见的行为,其实用户行为分析一大部分就是在分析用户各种各样的点击行为。我们可以通过各种途径来监控用户点击行为,同时各类网站分析工具都相继提供了丰富的事件监控功能,来满足不断发展变化的网站交互。刚好我的博客需要监控某些用户点击行为,并且要将这些点击行为设置成网站目标,所以这里跟大家分享一下我的实现步骤。

用户点击对你的网站重要吗?

  首先需要明确的是我们是否有必要去监控用户的点击行为,或者说用户点击对网站分析是否有价值?网站中有些按钮完全是交互或者浏览的需要,对于分析并不是那么重要,但显然有些按钮对于网站分析有着至关重要的作用,比如电子商务网站的“放入购物车”、“购买”、“支付”等按钮的点击;微博网站的“关注”、“发布微博”等按钮;视频网站的“播放”、“暂停”等按钮。通过统计和分析这些按钮的点击数据,我们可以对用户的这些对网站产生关键影响的行为了如指掌。

  我们需要去统计这些重要的用户点击,但也不是所有的这些点击都需要进行额外的设置,当点击跳转到一个新的页面时就会有新的Pageview产生,这类点击我们就不需要另外进行监控。但某些点击,比如Ajax架构的点击交互,或者是Flash中的点击按钮,抑或是出站的按钮或链接点击,这类行为不会产生新的页面浏览行为,也就不会有Pageview的记录,那么如果刚好这些点击像上面说的对网站来说是重要的,我们就必须对其进行监控和统计。

  以我的博客为例,对于我的博客而言,通过右方侧边栏最上方的5个按钮可以对博客进行订阅或关注,用户的这些行为对于我而言是十分有价值的,因为至少用户开始对我的博客内容感兴趣了,我需要知道每天有多少用户会尝试去点击这些按钮(无论点击的结果如何,因为最终的结果超出了监控的范围,无法追踪 =_=” ),其实通过Google Analytics就能简单地统计到这些点击数据。

Google Analytics的点击监控统计

  Google Analytics中监控点击一般通过事件追踪(Event Track)虚拟页面(Virtual Page)两种方式。我原先使用的是事件追踪的方法,因为事件追踪是GA专门为这类用户行为量身定制的,可以设置类别(Category)、行为(Action)、标签(Label),甚至可以为每个事件定义它的价值(Value),所以对于各类时间的分类汇总非常方便,比如我在RSS订阅中加入onClick=”_gaq.push(['_trackEvent', 'Feed&Follow', 'Feed', 'RSS']);”类别为Feed&Follow,行为为Feed,标签是RSS,另外设置邮件订阅的标签为为Email,关注的3个按钮的动作为Follow,再根据标签区分类别,这样就可以非常方便的看到汇总和细分的数据了(注意我这里使用的是异步代码,使用前请先看一下自己网站的GA代码类型,具体设置可以参考蓝鲸的文章——Google Analytics功能篇—事件追踪):

Event-Track-Drilldown

  但事件追踪有一个局限性就是无法设置为网站目标,熟悉Google Analytics的朋友都知道GA的目标只能是三种类型:页面浏览(URL Destination)、停留时间(Time on Site)、每次访问页面数(Pages/Visit)。所以如果我要将我的博客的订阅和关注的点击作为网站的目标,在GA中通过事件追踪的方式就没法实现了,就需要通过设置虚拟页面的方式,详细操作也可以参考蓝鲸的Google Analytics功能篇—虚拟页面,这里来说一下我的设置:

点击类型 追踪代码
RSS订阅 onClick=”javascript: _gaq.push(['_trackPageview', '/virtual/feed/rss']);”
Email订阅 onClick=”javascript: _gaq.push(['_trackPageview', '/virtual/feed/email']);”
关注Twitter onClick=”javascript: _gaq.push(['_trackPageview', '/virtual/follow/twitter']);”
关注Buzz onClick=”javascript: _gaq.push(['_trackPageview', '/virtual/follow/buzz']);”
关注新浪微博 onclick=”javascript: _gaq.push(['_trackPageview', '/virtual/follow/sina']);”

  但是设置虚拟页面后会出现另外一个问题,就是导致Pageviews的增加,因为虚拟页面也会被算到页面浏览量中去,所以还需要进行另外一步操作——添加过滤器,下面来看一下过滤器(Filter)的添加,及如何将点击行为设置为网站目标。

将点击设置为网站目标

  首先来看一下通过上面的设置后在Google Analytics的报表上显示的结果:

虚拟页面统计

  虚拟页面在数据展现其实与普通的页面浏览并没有区别,也是在Content模块中,可以在Top Content报表中查看,根据我上面的设置可以直接filter出包含“virtual”的页面统计:

content-virtual

  同时,根据上面虚拟页面的URL结构,也可以使用Content Drilldown中按层次一次向下展开,可以同时查看各类汇总数据和细分数据,详细介绍参考前一篇文章——让URL更适合分析。这样依次展开的顺序为:virtual=>feed=>feed的各子项,virtual=>follow=>follow的各子项,十分清晰。

设置网站目标

  因为虚拟页面已经将点击转变成了页面浏览,因此可以将这些行为设置成网站目标了:

Feed&Follow-Goal

  这里的目标类型(Goal Type)选择URL目标(URL Destination),我在这里使用了正则表达式进行匹配,将所有/virtual/feed或follow/开头的URL设置成目标,同时设置该目标的价值(Value)为10(对于博客而言,这类点击价值较高,同时博客还设置了其他的目标,价值相对低一些),这样按确定就设置完成了,可以在报表上查看每天的目标转化率(Conversion Rate)和价值了。

添加过滤器

  因为使用虚拟页面监控点击行为将点击当做了页面浏览统计,因此会导致网站的Pageviews虚高,我们需要将这些虚拟页面的浏览量从网站的Pageviews统计中过滤掉,所以需要用到Google Analytics的过滤器功能。首先要新建一个配置文件(Profile),这一步是必需的,因为一旦在配置文件中加入过滤器后不符合条件的数据就会直接被剔除,无法找回,所以我们必须保留一个最原始的配置文件以查看未过滤的虚拟页面的统计情况。我这里只要用到预定义过滤器(Predefined filter)中的排除子目录即可,详细的设置参见下图:

virtaul-filter

  只要把所有以/virtual/开头的子目录的流量过滤,然后把新建的配置文件放到下方右侧“已选择的配置文件”的区域即可,非常简单方便,之后你就可以从你新建的配置文件中看到“干净”的网站Pageviews的统计了。不过需要注意的是,因为在这个配置文件中虚拟页面被过滤,所以上面设置的目标只能通过查看原配置文件的报表中才能看到。

  最后总结一下,网站的点击行为统计对于某些网站的分析而言是十分重要的,基于Google Analytics的点击事件追踪可以通过事件追踪和虚拟页面两种方式,如果你单纯为了统计点击事件发生的情况(当然不一定是点击,同样适用于其它事件),那么时间追踪是非常不错的选择,如果你要将点击最为网站目标,那么就需要通过虚拟页面的方式了。我的博客也是刚换过来,大家也可以自己动手试试。