运用场景
归因分析有几个特点:
归因分析90%以上是关于下降的。
因为上涨通常不需要数据分析来展开,因为无论是产品还是运营,都会进行相应的解释,是由于某些运营策略或者产品新功能的上线导致的,所以在老板发问以前,问题大多在递交数据分析团队前就被消化掉了。
归因分析的时效性强。
当异常波动突然发生后,业务方会非常急切地想要解释。这个心理很好理解,在行为经济学中有一个禀赋效应。“禀赋效应”认为当一个人一旦拥有某种物品之后,他对这个物品价值的评价要比没有拥有之前大大增加来,“2倍获得的快乐才能抵消损失的痛苦“。面对下降的痛苦,以及不知道为何下降的失控感,不难理解为什么业务方突然对归因分析很重视,需要快速的给出原因。
富有洞察的归因分析非常难做。
从名字就可以看出,归因分析寻求的是一种因果关系。在没有AB实验环境下做严谨的因果关系推理,其实是一个很难解决的并且相对复杂的问题。
如遇上简单的波动,我们通常可以尝试以下一些方法进行问题的快速定位。
例如:
版本功能bug排查(是否有显著的版本差异);
特殊事件排查(是否有明显的时序特征);
漏斗分析(是否在哪个环节转化出现异常)。
如遇上非常棘手的复杂情况,牵扯到多个利益方的问题排查,业务方通常期待我们能给出相对合理的统计分析方法,来量化各个因子对异常波动的贡献值。
本文尝试介绍计量经济学的相对重要性分析(Dominance Analysis) ,将围绕归因原理与实践代码进行详细阐述。
方法简介
核心目标:
如何量化各个因子对目标变化的贡献占比。
方法简述:
在逐步回归的基础上,通过穷尽所有变量剔除方式的回归,并取均值得到集合结果,即作为各个因子的贡献度。
方法来源:
在计量经济学中,一个重要的问题是探究不同的解释变量 (explanatory variable) 对被解释变量 (dependent variable) 的方差的具体贡献程度。
诚然,各个因子的系数大小是不能被用来直接比较的;对系数进行标准化似乎可行,但却不知道他们的相对重要性。
实践中比较普遍的方法为逐步回归法 (stepwise regression),即在回归中逐步引入解释变量, 以及显著性测试 (significance test)。然而,逐步回归方法中,引入解释变量的顺序是非常主观的。显著性测试也并不总是可以将不同的解释变量按其重要程度排序。基于此,Isareli (2006) 在前人的基础上 (主要是 (Shorrocks, 1999) 以及 (Fields, 2003))提出了重要性分析 (Dominance Analysis) 的方法。
该方法旨在确定线性回归中,明确不同解释变量对决定系数的贡献程度。在实践中,对于决定系数的贡献程度也反映了不同解释变量对被解释变量方差的贡献度。
方法详述:
假设线性回归为
被解释变量 y 的方差,即总离差平方和 (total sum of squares, TSS),可以被分解为两部分,回归平方和 (regression sum of squares, RSS) 以及残差平方和 (error sum or squares, ESS)。
拟合优度R2可以被表示为
因为R2是重要的模型拟合优度统计量。自然而然,为了分析不同解释变量的相对重要性,研究者会想要分解不同解释变量对R2的贡献程度,并以此判断其相对重要性。
根据 Fields(2003),被解释变量 y 的方差,即总离差平方和 (total sum of squares, TSS),可分解为:
由此可以得到不同解释变量的相对贡献程度
事实上,上式与 [3] 式本质相同。但根据 [5] 式,不同解释变量可按照重要程度排序。然而,Fields(2003) 未考虑到不同解释变量之间的相互关系。也就是说,某一变量的系数会与回归中其他的解释变量有关。
与之相反,Shapley(1999) 认为解释变量的贡献应当等同于其对R2的边际效用 (marginal effect),M。
具体而言,解释变量xk对R2的边际效用可以表示为:
其中,S 是不包含变量 k 的其他解释变量。可以看到,该式实则为完整回归的R2减去不包含变量 k 的回归的R2。由于去除一个解释变量后,回归的系数通常会发生改变,因此不包含变量 k 的回归的系数都以 * 表示。
此处,产生一个问题。变量 k 被剔除回归的顺序不同,那么对拟合优度R2的边际效用也会不同。因此,为了解决这个问题,最终对变量 k 的重要程度的判定是对 J! 种不同剔除方式得到结果的平均值。
方法实践
以下实践以Github的python包dominance-analysis为范例进行介绍,文末有相关资料具体链接。
1. 数据处理与清洗:
在展开相对重要性分析前,需获取所需比较的K个因子和被观察值Y的数据源,以下数据源参考Boston Housing Dataset(https://www.cs.toronto.edu/~delve/data/boston/bostonDetail.html),即分析不同因子对房价的影响度。
from dominance_analysis import Dominance_Datasets
from dominance_analysis import Dominance
boston_dataset=Dominance_Datasets.get_boston()
dominance_regression=Dominance(data=boston_dataset,target='House_Price',objective=1)printf("hello world!");
2. 变量比较:
通过调用相对重要性分析函数,获取每个变量对房价的相对影响系数。
incr_variable_rsquare=dominance_regression.incremental_rsquare()
3. 可视化呈现:
画图将相对影响系数的对比关系呈现出来。
dominance_regression.plot_incremental_rsquare()
4. 提取具体统计量:调用统计量提取函数,得到每个变量在相对重要性回归分析中的具体参数。
dominance_regression.dominance_stats()
参考资料
参考代码库:
开源python函数dominance-analysis https://github.com/dominance-analysis/dominance-analysis
参考文献:
[1] Fields, G. S. (2003). Accounting for income inequality and its change: A new method, with application to the distribution of earnings in the United States. In Worker well-being and public policy (pp. 1-38). Emerald Group Publishing Limited.
[2] Israeli, O. (2007). A Shapley-based decomposition of the R-square of a linear regression. The Journal of Economic Inequality, 5(2), 199-212.
[3] Shorrocks, A.F.: Decomposition Procedures for Distributional Analysis: A Unified Framework Based on the Shapley Value (mimeo). University of Essex (1999)
[4] Ye D, Ng Y K, Lian Y. Culture and Happiness[J]. Social Indicators Research, 2015, 123(2):519-547.
[5]《R2 分解到每个变量上:相对重要性分析 (Dominance Analysis)》,胡雨霄著
文 / Simon
关注得物技术
携手走向技术的云端
の
の