基尼系数如何解释指标变动
一、背景:业务为什么下降,下降的原因是什么,哪个维度对整体影响最大?影响程度是多少?业务分析师经常不得不通过数据来回答这些通常来自高层的灵魂问题。之所以灵魂问题,因为这类问题通常针对一个顶层指标发问,却需要在指标背后纷乱繁杂的众多可能性中找到一个清晰的解释路径。每天针对这样的问题,都需要花费许多时间去分析波动原因,能不能建立一个自动化模型,自动监控业务波动,归纳波动原因;
目标:自动化监控每日业务波动,对波动进行归因,减少分析师每日繁琐工作时间,帮助业务快速定位波动问题;

二、解决方案
1、选择模型:基尼系数
需要归因大盘波动的主要原因,最重要的是分析出哪一个维度对大盘的影响最大,而通过计算每个维度下的不平等指数就可以解决这个问题;现有的不平等指数计算方法有很多,如泰尔指数,阿特金森指数,帕尔玛比值、基尼系数等,每种方法各有优劣势;最终,由于基尼系数的使用更加广泛,可理解性,可解释性更强,选择了基尼系数这个方法来建立波动归因模型;
基尼系数是国际上通用的衡量一个国家或地区居民收入差距的常用指标,基尼系数越高,说明贫富差距越大;
基尼系数是量度贫富悬殊程度的标量。它的定义如下:我们首先收集社会上每一个人的总财富额,把它从少至大排序,计算它的累积函数(cumulative function),然后便可绘出图中的洛仑兹曲线(Lorenz curve)。图中横轴是人口比例的累积分布,竖轴是财富比例的累积分布。

基尼系数的原理介绍,本文使用最通俗的例子,从零开始一点一点算基尼系数。
1.求数列[1,3,2,5,4]的基尼系数
2.排序数列后[1,2,3,4,5]=[a1,a2,a3,a4,a5]
3.累计和[S1,S2,S3,S4,S5]=[1,3,6,10,15]

求基尼系数如下所示,SA/(SA+SB)=10/37.5=0.266666

代码:
def my_coef(w_list):
sort_list=sorted(w_list)
sum_number=sum(sort_list)
accm_list=sort_list
for i in range(len(accm_list)-1):
accm_list[i+1]=accm_list[i]+accm_list[i+1]
return 1-(sum_number*0.5+sum(accm_list[:-1]))/(sum_number*len(sort_list)*0.5)
基于基尼系数在波动归因的应用:在衡量数据波动大小的情况下,我们可以依据x%的人口应贡献x%的收入这一原理,我们将订单或者UV的波动幅度看做收入,将各个维度日常对大盘总体的贡献看做人口贡献;同样可以绘制出一条关于大盘波动幅度的洛伦茨曲线;
2、解构波动维度,对于公司大盘业务来说,最重要的两个指标,流量和订单,那么针对于这两个指标,能够直接影响的主要的维度有哪些?
3、确定计算指标:
基尼系数主要涉及到两个指标:一个是维度内各指标占比,一个是维度内各指标贡献
- 指标占比:指标占比采用该指标前期在整个维度下的占比(认为在平稳的情况下,今天的数据分布应该与昨天一致)
- 指标贡献:由于要监控的是波动,所以指标贡献采用指标的波动幅度/大盘波动幅度;
- 斜率:由于计算基尼系数,需要绘制洛伦茨曲线,为了保证曲线的连续型,需要计算每个维度内指标的变化斜率,保证洛伦茨曲线的连续型;
三、具体做法
1、数据准备:
数据维度:城市,项目,渠道,平台
时间维度:日,周,年
过程计算度量:差值,影响程度,前期值占比,斜率,同环比幅度
数据说明:
全国2022年经济体量80亿,2023年100亿,全国增长20亿。
北京2022年40亿,2023年50亿,增长10亿。
上海2022年30亿,2023年35亿,增长5亿。
苏州2022年10亿,2023年15亿,增长5亿。
差值:当前数据(100) - 对比日期数值(80),例如北京=10亿,上海=5,苏州=5
影响程度:差值/差值综合,北京=10/20=50%,上海=25%,苏州=25%
前期值占比:对比日期数值/对比日期大盘总量(认为在平稳的情况下,今天的数据分布应该与昨天一致)北京=40/80=50%,上海=3/8,苏州=1/8
斜率:影响程度/前期值占比 北京=50%/50%=1,上海=1/4除以3/8=2/3,苏州=2,
环比波幅:差值/对比日期数值,北京=10/40=25%,上海=1/6,苏州=1/2
2、过程中所遇到的问题
问题1:

关于流量,由于存在去重问题,所以对各指标的占比相加之后是大于100%的,影响程度累计值也是大于100%的;会导致横坐标与纵坐标有不同程度的延伸;
解决方案:针对于流量此类与用户相关需要去重的指标,对最终的占比做归一化处理;保证比例与贡献占比累计值都为100%;
问题2:

如上图所示:正常一个地区的收入贡献,并不会出现负数,但针对于大盘波动,会有增长与下降,当某一维度的波动方向与大盘整体波动方向不一致时,就会出现x%的维度指标贡献了-y%波动幅度;如下图红色虚线所示:如果我们完全照搬基尼系数的计算公式,那么就可能会出现,该维度下数据波动很大,但最终的基尼系数很小的情况;
我们抛去A与B面积的概念,只关注洛伦茨曲线与绝对平等曲线,不难发现,通过计算A/(A+B),其实根本目的是计算洛伦茨曲线与绝对平等曲线的偏离程度,洛伦茨曲线距离绝对平等曲线越远,在人口收入情况下,贫富差距越大,不平等情况就越严重,那么,我们只要计算A的面积就行了,A面积越大,维度内越不平等,A/(A+B)只是为了对最终结果做归一化处理,方便衡量与对比;
最终模型所需步骤:
1、计算出每个维度下每个指标的前期值占比、影响程度,斜率
2、按照斜率对各个指标排序
3、计算占比累计值、影响程度累计值
4、绘制洛伦茨曲线、计算每个维度的不平等指数
5、根据每个维度下的不平等指数,选择影响程度最大维度及指标进行可视化展出
四、亮点
1、依据衡量地区的贫富差距的基尼系数,建立的波动归因模型,扩展了基尼系数方法的应用场景;
2、没有生搬硬套基尼系数的计算方法,而是依据现有的业务场景,对基尼系数的计算方式进行了改进,用于衡量业务内的不平等指数;
五、现有不足:
1、针对于复合指标无法监控,如转化率(订单/UV),影响程度无法直接计算得出
2、只能监控到单一维度的影响、对于多维度的影响监控还无法满足
六、后续优化计划:
关于转化率的优化,参考到一篇文献,里面讲到 柯布-道格拉斯生产函数 的理论 参考它在其他行业上的应用,基于 log-log regression对这些波动进行建模可以得到不同业务的参数估计,也就可以用来推断各种生产要素的边际价值与规模效益了。例如大盘创单转化率的下降,可以拆分为两个影响因素,一个是用户结构发生了变化:如APP平台的创单转化率高,APP创单转化率不变,但APP的流量下降,导致APP占比减少,最终转化率下降;另一个是用户体验发生变化:如APP的占比不变,但转化率下降,导致大盘整体转化率下降;可以定位出大盘创单转化率下降,在每个维度下结构与指标的双重影响程度,根据综合影响程度,得到具体哪个维度在哪个方面对大盘影响最大;会先在用车的接单率上做打样,测试业务的契合度;
七、后续应用
目前波动监控是依靠于看板进行监控,因为这个波动归因模型计算方法简单,在后端可以很快速地进行计算,并且所需要的数据也很少,仅需要监控指标的各个维度数据,以及需要对比的对应日期数据,后续计划会将此模型融合进入到灵动分析中,在产品内部即可实现业务波动的归因,无需分析师手动建立相关模型,可通用化到各个业务看板当中。
关注公众号「水沐教育科技」,在手机上阅读所有教程,随时随地都能学习。内含一款搜索神器,免费下载全网书籍和视频。

微信扫码关注公众号