预计阅读时间:10min
阅读建议:本文偏干货类文章,对于从事数据分析同学,建议整段时间完整阅读;对于数据分析爱好者,可考虑直接阅读案例分析。
解决痛点:指标异动归因,各维度均有变化,如何快速定位最有可能出现问题的维度?
00
序言
上一期,小火龙和大家分享了一种相对通用的「指标异动排查思路」,不知是否对你有所帮助。本期会接着上期的内容,在排查问题的过程中,解决遗留的第一个问题「如何快速定位异常维度」。
有的小伙伴可能会有疑问:
- 什么是定位异常维度?
- 定位异常维度与指标异动排查有什么关系?
针对类似问题,小火龙在这里给大家举一个栗子▼
大盘量级:pv 100w
性别维度:男性 pv 50w ,女性 pv 50w
消费维度:高消用户pv 100w,中消用户pv 0w,低消用户pv 0w
大家觉得问题可能出现在哪个维度上呢?
是不是「消费维度」问题可能会大一些,而「性别维度」变化可能是被带动的。
由此可见,指标变化分歧较大的维度,更有可能是异动问题的本质。
下面会和大家分享三种之前应用过的方式,快速定位分歧维度。各方式均有一定适用场景,大家可以参考比较,并在实际工作中给予应用。
01
基于「卡方检验」的异常维度挖掘
1、方法介绍
首先向大家介绍基于卡方检验的方式。提到卡方检验大家应该都不陌生,卡方检验是一种用途很广的假设检验方式,属于非参检验范畴,其目的是比较理论频次与实际频次是否吻合,是否属于同一分布。核心步骤如下:
首先:设定假设检验的 原假设H0 和 备选假设H1。
- 原假设H0:实际频次与期望频次没有差别。
- 备选假设H1:实际频次与期望频次有差别。
其次:假设H0是成立的,基于假设计算出x2值(卡方值),x2值代表了实际频次与期望频次的偏离程度。
▲卡方值计算公式
再次:根据x2分布及自由度确定在H0假设成立情况下,获得当前统计量及更加极端情况下的概率P。
最后:如果P很小(理论小于0.05),则说明实际与期望偏离程度较大,分布不同。
2、案例分析
回到业务上,需要检验「now周期维度值分布」与「before周期维度值分布」,是否存在差异。以pv变化为案例向大家介绍如何应用。
步骤一:假设某产品now pv=5610,对比before pv=5750,以「城市」维度为例,通过卡方检验来验证城市维度值分布前后是否一致。
▲城市维度中维度值pv量级
步骤二:设置零假设H0:假设now pv和before pv分布一致。
步骤三:分别计算每个维度值的卡方检验值,并将其求和,计算得出整体X2值=41.4,如下图。
D2 = (C2-B2)^2 / B2
D8 = SUM(D2:D7)
▲城市维度中维度值卡方值计算
步骤四:计算自由度 df = (6-1) × (2-1) = 5,根据自由度及显著性水平0.05查询对应临界值11.070。
步骤五:比较临界值与统计值大小,41.4 > 11.070,即统计量大于临界值,认为差异较显著,其他维度也采用同样的方式进行计算。
3、方法优势
优势1:相对其他方式,验证分布是否一致较为敏感。
4、方法劣势
劣势1:卡方检验的频数只能以整数形式出现,相对指标不可用。
劣势2:由于维度变化存在波浪效应,不同维度下的指标,很难源于同一分布。
劣势3:不适合进行分布差异的量化。
5、方法总结
该方法仅可用于判断两绝对指标的分布是否有差异,但如果需要量化度量各差异的程度,以及在各维度间进行比较,此方式不太适用。「推荐指数:2星」
02
基于「决策树」的异常维度挖掘
1、方法介绍
由于卡方检验无法具体量化度量,因此需要一种方式来进行补充,而决策树则是一种相对好用的方式。
决策树的原理相信大家都有一定的了解,在网络上也有很多相应的资料,决策树的核心在于:利用熵来度量事物的不确定性,事物的不确定性越大,熵越大;不确定性越小,熵越小。
决策树从根节点开始分裂,目的在于通过不断地分裂,减少整颗树熵的大小;按照决策树的分裂理论,越靠近根节点的分裂维度,对于熵减少的贡献值越大。
2、案例分析
回归业务上,我们可以通过决策树,找出影响整体指标变动的最重要维度,并将其绘制成树型图,以下仍然以pv变化为案例,为大家介绍一下此种方式。
树模型搭建的核心在于特征和label,各维度作为模型的特征、指标的涨降作为label。
步骤一:选择核心维度作为模型特征。例如:用户基础属性、用户行为属性、商品属性等。将所选维度的所有组合cross生成底层数据表。
▲维度特征cross表
步骤二:label赋值。label这里为二分类,某交叉维度相对diff >大盘相对diff,赋值1,反之赋值0。
例如:大盘pv相对提升20%,“男性 30岁 广州 ……“相对提升50%,由于50%>20%,判断此样本为正样本,赋值1。
步骤三:设置样本权重。为每个交叉维度样本设置权重,这主要是由于pv从10涨到50,同1000涨到5000,明显是不同的,对于流量较高的样本,需给予更高的权重,用于在计算模型损失函数的时候,赋予更高的“话语权”。
步骤四:搭建决策树模型,根据模型输出树的结构。这里要注意一点,由于决策树有大量的节点,如果我们将所有节点均输出,量级会非常大,以3个维度 每个维度10个维度值为例,则最终的叶子节点有1000个。
因此这里我们需要对树进行剪枝,通过维度值对大盘指标变化贡献度来筛选,挑TopN的树节点,至于贡献度的量化方式将在下期进行详解。
最终涵盖「主要变化维度」及其「贡献程度」(如下图)。
▲生成树结果
3、方法优势
优势1:树模型可解释能力相对较强。
优势2:可以很清晰的绘制维度拆分图,展现形式较为友好。
4、方法劣势
劣势1:样本权重需要手动干预,设置的是否合理,对结果有影响。
劣势2:无法给出维度的量化变化程度。
5、方法总结
该方式可以较好地挖掘异常维度及可视化展示,在日常核心指标的例行化监控中,是一个比较好的方式。「推荐指数:4星」
03
基于「相对熵」的异常维度挖掘
1、方法介绍
在决策树的基础上,我们想出利用另外一种基于「相对熵」的挖掘方式。此种方式核心是通过计算JS散度(度量两分布的差异程度),取值范围在[0,1],两分布完全一致则为0,完全相反则为1。简单附上JS散度计算公式,具体公式计算流程,这里不多介绍,如果感兴趣可以私信我。
2、案例分析
我们仍然以pv波动作为案例,选择「城市等级」和「性别」作为维度进行拆解,度量其中维度值的变化程度,如下图。
▲维度及相对熵计算内容
步骤一:生成各维度指标聚合数据表。如图:维度历史和当前的pv量级。
步骤二:计算维度值在维度中的指标占比情况。如图:维度历史和当前的pv分布P(x)和Q(x)。
步骤三:根据JSD散度公式,计算维度中各维度值的JSD得分,并将同维度进行相加。如图:城市等级JSD=0.00065,性别JSD=0.00184。
步骤四:由于JSD较小的维度,其内部维度值的分布变化程度不大,因此在排查维度问题的过程当中,可以将这类维度的排查优先级降低,甚至直接剔除在异常监控中。因此,可根据对于业务的理解,选择阈值,这里有一点需要注意,阈值设定需要划分等级。
例如:日常波动中,流量变化相对较小,阈值可以设置的稍微小一些,比如0.0001;而针对某些产品,各种节假日或者双十一会使得流量发生较大变化,这种我们可以适当增加阈值,例如0.001,从而能更有针对性的挖掘真正异常维度。
3、方法优势
相对熵的优势除了决策树优势外,另外还有两点:
优势1:无需人工干预权重,置信度相对更高
优势2:流程相对较短,效率较高
4、方法总结
该方式无论是在挖掘的准确度上,还是展示的量化程度上,都相对不错,大家在日常分析异常波动问题中,可以适当尝试应用。「推荐指数:5星」
以上就是本期的内容分享,码字不易,如果觉得对你有一点点帮助,欢迎「关注」「点赞」「分享」哦~~
END
【下期预告】本期解决了上期遗留的第一个问题「如何快速定位异常维度」,下期将解决上期遗留的另外一个问题「针对不同类型指标,如何给出量化结论」,静待下期分享~~
【作者简介】互联网大厂数据分析专家,本系列「经验」类文章,会和大家分享一些近些年从事数据分析工作的一些心得体会,希望能够帮助到同行的同学,同时也渴望和大家在此沟通探讨。