数据分析小技巧,巧用缓冲数排序
Posted caoz
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了数据分析小技巧,巧用缓冲数排序相关的知识,希望对你有一定的参考价值。
先从工作场景出发。
我们日常去看数据,分析数据的时候,经常需要做排序操作,这个应该很容易理解吧。
最常见的基于统计数据排序,比如最多访问的帖子,最多新增的社群,最多下载的游戏,这个不赘述。
另一种常见的是基于某种比率的排序,比如说,游戏平台,想看看浏览点击率最高的游戏。电商平台,看看浏览下单率最高的单品。比如说,搜索引擎,看看搜索点击率最低的关键词,比如游戏平台,看看下载完成率最低的游戏。这是一种基于特定数据比例的关系。或者,比如我们看看这周下载增长率最高的游戏,搜索增长率最高的关键词,这是基于同一个数据不同时间范围表现的比例。在业务分析中,基于这种比例排序也是有很多实际意义的,比如点击率最低的关键词,大概率是搜索结果不符合预期,需要去核对和分析原因。比如下载完成率最低的游戏,大概率是某些优化没有做到位,等等。
那么这里就存在一个很恶心的问题,就是如果我们基于比例来排序,有些结果其实并不是业务想要的,比如一个关键词,昨天的搜索量只有1次,点击量是0,那么搜索点击率就是0。另一个关键词,搜索量是1万次,点击是20个,搜索点击率是千分之2,那么作为业务,会更关心哪一个,肯定是后者对不对。
当我们用纯粹的比例数据排序的时候,如果程序员不做任何处理,那么结果就完全不可用,排在前面的,全都是小基数的噪音数据,波动数据,毫无观察的意义。比如一个每天只有几个访问量的商品,下单转化率高或者低完全没有分析的必要。
那么稍微常规的做法就是,甩尾,抓大放小么,我提过很多次的。
什么是甩尾呢,就是把基数小于一定值的直接忽略掉,这样只看超过一定基数的比率情况,就可以减少这种干扰。
但甩尾仍然会存在一些缺陷。
甩尾的设定值过高的话,一些值得关注的信息会被忽略。甩尾过低的话,那么噪音依然不可避免。
我举个例子来说明,比如说现在我把访问基数小于1000的产品甩掉。那么现在看增长率的排序中,有两个产品,一个是访问量从1000增长到了3000,另一个是从2万增长到了5万。当然,从1000增长到3000也有观察的意义,但是从业务人员来说,哪个数据更需要观察和分析,是从1000到3000的,还是从2万到5万的?前者的增长率是200%,而后者的增长率是150%。
是的,我们说按比例排序,但实际上,对业务人员而言,按比例排序,但通常大基数的数据,比小基数的数据,更值得关注,更值得分析。特别是相差数量级的情况下,更优先去分析大基数的数据的比例变化。
甩尾操作后,大量处于甩尾边缘的数据,仍然会充斥着榜单前列,而一些大基数有显著变化的案例,仍然可能被淹没在这样的数据中。
其实,当业务人员提出,按照特定比率排序的时候,但实际的诉求,其实是与数据基数密切相关的,同等比率的变动范围或偏离,一个大基数的数据,相对于小基数数据,其重要性是完全不同的。所以如果仅仅基于比率排序,并不能真正体现数据的重要性和价值。
换句话说,大基数下的比率变动范围可以给予更高的权值。
当然,我们可以说,用某种权值算法来基于不同基数的数据,将相关比率做加权处理,但是这个操作就稍显复杂。实际上,有个操作上非常简单,开发成本极低的方案,可以有效解决这个问题,就是今天要提的,利用缓冲数来处理。
什么是缓冲数。
在计算比例的时候,分子和分母增加固定数值,从而有效降低小基数的比率变动范围。
比如,我们说,分析访问量激增的产品,假设我认为,只有当日1000以上访问量的数据是值得关心的,我可以把缓冲数设置为1000。
那么增长率是什么,(新时间范围的流量+缓冲数)/(过去时间范围的流量+缓冲数)-1。
比如说,某个产品今天流量是1,昨天是0,没有缓冲数,增长率是无穷大。增加缓冲数后,增长率是0.1%。
比如说,某个产品今天的流量3000,昨天是1000,没有缓冲数,增长率是200%,增加缓冲数后,增长率是100%,当然也很可观。
比如说,某个产品今天的流量是30000,昨天流量是10000,没有缓冲数,增长率是200%,有缓冲数后,增长率依然接近200%,和真实增长率基本持平。
能理解了么,其实很简单,基数越小,变动范围越被束缚,基数越大,越体现真实变动范围,这样在排序中,就很容易让大基数的变动优先体现,同时,对于一些确实有不错增长的中等基数的产品,也不会遗漏。
这种是同定义数值历史比较,那么缓冲数是分子分母增加相同的数值。
但如果是诸如点击率,转化率这种不同定义数值比较的情况,如何处理呢,缓冲数也要做类似的变化。就是分子和分母增加缓冲数,不再是1:1,而是基于平均的比例增加。
比如说,我们很容易算出平台的平均点击率,拍脑袋说一个,比如是5%。
假设我仍然认为,只有1000访问量以上的才有跟踪的必要。
排序的时候,某个产品的点击率就是,(点击数+缓冲数*平均点击率)/(访问量+缓冲数)。
当基数小的时候,数字会趋近于平均点击率,基数越大,数字会越趋近于产品页的真实点击率。
我们排序的时候,无论是想观测高点击率还是低点击率,基数小的单品都不会出来干扰排序结果。
当然,缓冲数的设计也需要不同业务自己考量,比如大平台可以设置的高一些,小平台可以设置的低一些,那么有些本身比较大的数值,比如曝光数,浏览数,可以设置的高一些,有些本身比较小的数值,比如下载数,安装完成数,可以设置的低一些,根据业务诉求可以灵活处理。
用缓冲数从技术上的好处是什么呢,你可以直接写到排序的SQL里去,这样代码的改动量极小。而且通用性极好。
包括一些榜单制作,比如产品增长排行榜。如果我们只看比例,1比0就是无穷大。如果我们只看数值,大基数产品的一点点波动就会远远超过小基数产品的几倍增长,那么榜单前列就全是热门产品的波动表现。通常行规甩尾数据,只选择热门产品来做榜单是个不错的选择,但试试缓冲数,也许结果会更好。
btw,缓冲数这个名字是我起的,我也不知道是否有更专业的行规名,如果有知道的可以告诉我。
以上是关于数据分析小技巧,巧用缓冲数排序的主要内容,如果未能解决你的问题,请参考以下文章
iOS开发小技巧--巧用ImageView中的mode(解决图片被拉伸的情况)