背景
除了离散型变量的频率统计,连续型数值的分布观察也是探索性数据分析中常用的方法。仅仅只看平均值是不够的,会掩盖掉许多信息;你还需要观察数据是均匀分布的,还是主要集中在腰部首尾较少的橄榄型,或者是具有长尾效应的金字塔型——这样才能对数据样本有更全面的了解。另外,除了探索性数据分析以外,基于预期的分位数反推数据,也是实际业务中许多运营策略临界值的决策依据。因此,基于临界值统计分布、基于分位点计算临界值,是这个工具的主要目标。
在实际工作中,这种数据需求并不少见——比如用户使用时长分布、订单金额分布、连续访问间隔分布等等。其实统计方法很简单,一般就是设置断点,将连续数值分隔成离散区间,再聚合统计。不过既然是探索性数据分析,也许并没有许多先验知识,比如断点怎么设置才合理。交付完数据之后,如果需求方还想再换种分析角度,那就得改代码再跑一遍……
事实上,探索性数据分析应当是一种轻量的、高频的场景,它不值得数据分析师投入太多支持成本,更不值得数据仓库专门去生产调度——它就应该是一个轻量级的工具,即时需要,即时查询,即时获取到分析结果,用完就走,什么都不留下。
本文以订单金额分布分析为应用场景,探索2个问题,来演示这个工具如何使用:
- 付费用户的支付金额主要集中在什么范围,亦即消费主力的消费水平如何?
- 如果要分别对头部20%、尾部20%的付费用户作运营活动,应该怎么确定范围?
产品操作
数据样本
以均值1000,标准差为200的标准构建样本量为10000的正态分布随机数据(一会儿我们验证一下究竟长得像不像正态分布),然后上传上去,就一个付费金额
字段,其他不需要。
控件功能
控件有3个,第1个是用来选择1个度量的下拉框,当用户上传完数据后,这个下拉框会自动筛选出度量,用户选择1个即可。后面2个输入框分别对应着下面2个图——中间的输入框用来输入区间断点,即输入一些数值,系统基于这个数值划分区间再统计分步;右边的输入框用来输入分位点,系统基于分位点自动计算并返回对应的数值。
良好的兼容性
用户在这2个输入框中输入数值,用英文逗号连接。
- 不需要考虑输入的数值是否在数据范围内,系统会自动把小于最小值或大于最小值的输入值给过滤掉
- 不需要考虑从大到小还是从小到大的顺序,系统会自动排序
- 不需要考虑有没有多打几个空格没看出来,系统会自动trim
- 不需要在意输入的有没有字符串等错误信息,系统会自动过滤,只要在对的地方用逗号分割
比如,我只输入一个0
,这是小于数据的最小值的,所以整个订单金额并没有被分割:
比如我不按顺序(还有重复)地输入1000,2000,1000,1500
,系统会自动先排序再分割统计:
比如我的输入中带有字符串,系统会自动忽略:
综上,只要用户填写的分界点的数值本身没写错,分隔符的位置也没写错,其他无约束,想怎么填就怎么填。
数据分析
回到我们开头的2个问题,我们怎么使用这个工具快速进行分析,得出结论?
基于分界点计算分布
我先从0开始,每隔500作为一个步长来递进到3000,即输入0,500,1000,1500,2000,2500,3000
。可以看到付费订单金额最小值是14,最大是1736,付费金额主要集中在(500,1500]的范围内。
当然,你可能觉得这么划分太粗,没关系,可以继续细化,也不用考虑是不是均匀分割的——前面说过,想怎么填就怎么填。我们在刚才的基础上,进一步对500~1500的范围内,以每隔100的规则递进,即输入0,500,600,700,800,900,1000,1100,1200,1300,1400,1500,2000,2500,3000
。可以看到,果然是标准的正态分布。
当然,我们把鼠标hover到柱形图上,可以看到更详细的信息:
-
interval
:所在区间 -
counts
:所在区间内样本量 -
frequency
:所在区间内样本的比例 -
accumulated frequency
:所在区间的累计比例,即不超过这个区间的比例
图中这个例子的解读如下:消费金额在(1000,1100]范围内的付费用户数有1919个,占全部付费用户的19.19%,消费不超过1100的付费用户比例为69.55。
每个柱形hover一遍,自己再口算一下,第1个问题就能回答:消费主力群(占付费用户比例的77.43%)的消费金额都介于700~1300。
基于分位点计算分界值
现在回答第2个问题,要把头部和尾部各20%的用户筛选出来,即是求20%和80%分位数的值,在右侧输入框输入0.2,0.8
即可。从图中可以看到,20%分位数是828,80%分位数是1165。因此,要找头部20%付费用户,即筛选付费金额大于等于1165的;尾巴20%则筛选付费金额小于等于828的。