数据分析系列:归因分析原理、案例和python代码
本文主要对以下指标的计算和解释进行阐述,并使用案例说明,最后利用python编写代码进行计算:
- risk ratios and rate ratios(风险比率和比率比率,RR)
- risk difference and rate difference(风险差异和利率差异, RD)
- attributable proportion (attributable risk percent) for the exposed(风险承担的可占比例(可归属风险百分比), AP)
- population attributable risk(人口归因风险,PAF)
- odds ratio(比率, OR)
我们使用的案例如下,假设一种产品来源于两个营销渠道,我们记录了每个渠道的转化人数和未转化人数(转化可以定义为点击、充值等)
营销渠道 | 转化 | 未转化 | 求和 | 转化率 |
---|---|---|---|---|
渠道A | 159 | 2841 | 3000 | 159/3000=5.30% |
渠道B | 46 | 3454 | 3500 | 46/3500=1.31% |
总计 | 205 | 6295 | 6500 | 205/6500=3.15% |
归因分析指标计算
1:计算Risk Ratio(风险比率)、Rate Ratio(比率)
Risk Ratio(风险比率)通常也称为Rate Ratio(比率),表示一个相对于一个因素B,另一个因素A条件下转化率相对于因素B的转化率的倍数(A,B可以理解为实验组和对照组)。
其中是渠道A的转化率,是渠道B的转化率。
营销渠道 | 转化 | 未转化 | 求和 | 转化率 |
---|---|---|---|---|
渠道A | 159 | 2841 | 3000 | 159/3000=5.30% |
渠道B | 46 | 3454 | 3500 | 46/3500=1.31% |
总计 | 205 | 6295 | 6500 | 205/6500=3.15% |
Risk Ration(RR) = 5.30%/1.31% = 4.04
解释:渠道A的转化率是渠道B的转化率的4.04倍(Risk Ration(RR)=4.04),同时认为渠道A的转化率相比于比渠道B的转化率提升了了404%-100%=304%(此处含义是以B为基准,相对的含义)
结论:
- 相对渠道B的转化率而言,渠道A的转化率是渠道B的4.04倍
- 相比于渠道B而言,渠道A的转化率相对于B的转化率提升了304%(并不转化率是真的提升304%,而是在B的基础上提升了304%的B的转转化率)
若我们有多组实验,可以用同样的方法计算
2:计算Risk Difference(风险差异)、Rate Difference(比率差异)
Risk Difference(风险差异)也被称为Rate Difference(比率差异)
其中是渠道A的转化率,是渠道B的转化率。Risk Difference(风险差异)的理解非常直观。就是直观的两个渠道转化率的差异。
由RR与RD的公式可知两者的转换关系为:
利用上面例子的数据,计算出RD = 5.30%-1.31%=3.99%。代表了渠道A去渠道B的转化率差异为3.99%。
Risk Ratio与Risk Difference的出发角度不同,Risk Ratio衡量的是
渠道A相对于渠道B提升了多少,可用于衡量改进的效果,而Risk Difference直接衡量了转化率(收益)提升了多少。Risk Ratio是相对的,Risk Difference是绝对的
3:计算Attribution Proportion
Attribution Proportion(归因分数)表示了该渠道人群中有多少是因为该渠道发生转化的。
利用上面数据。计算出
如果B代表是未参加渠道展示,则对于计算出的归因分数(Attribution Proportion),可以解释如下:渠道A展示的用户中,有75.28%的用户是因为渠道A的展示而发生了转化。
如果我们对Attribution Proportion的分子、分母同时除以,则Attribution Proportion公式变为如下形式:
我们再利用新公式计算一次,利用上面计算的RR= 4.04,计算出
4:计算人口归因分数(PAF)
人口归因分数(PAF) Population Attributable Fraction也称为人群归因危险度PAR(Population Attributable Risk)。表示的是,所有转化人群中,有多少因为一个因素而进行转化的。
最直接的计算方式就是:渠道A转化人群占总转化人群比例*渠道A的AP,在上面例子中,转化人群中,有77.5%的人来自渠道A。因此,我们可以认为总人群中有77.5%*75.28%=58.38%的人是因为渠道A的展示发生了转化。
同时,我们也可以通过如下方式进行计算PAF
其中, =渠道A人数占总人数比例。
我们利用上面公式进行计算,先计算渠道A人数占总人数比例=3000/6500=0.4615,之后计算PAF:
计算出的PAF与上面采用直接结算得到结果是相同的。代表了,所有转化人数中,有58.38%的人是因为渠道A的展示发生了转化。
在应用中,因为转化率通常都比较低,因此,我们还可以用几率(Odds Ratio)近似代替RR,来计算每个因子的归因分数。
5:计算几率(Odds Ratio)
上面说到了,可以利用几率(Odds Ratio)近似代替RR,作为RR的估计。Odds Ratio(OR)的计算公式如下:
其中Y1_A是渠道A的转化人数,Y1_B是渠道B的转化人数,Y2_A是渠道A的未转化人数, Y2_B是渠道B的未转化人数。
我们将上面例子数据代入计算得到:
上面已经计算出RR=4.04。对比计算结果,OR与RR的结果近似。
当用OR代替RR后,AP和PAF的估计如下:
我们带入数据进行计算:
其中AP=76.51%代表渠道A的转化用户中有76.51%是因为渠道A展示发生了转化,PAF=60.05%代表了,所有转化用户中,有60.05%是因为渠道A发生了转化。
为什么要利用OR作为RR的近似估计去计算AP和PAF?这主要是因为,在转化率比较低的情况下(现实中转化率通常比较低),OR约等于RR。还有一个原因是,在实际中,有一些未转化人群我们是统计不到的,此时渠道A的转化率和渠道B的转化率就无法计算,就无法准确计算RR,此时可用OR近似代替。而且在一些归隐分析模型中,例如逻辑回归等,只能通过系数计算出OR,不能直接计算出RR。
归因分析python代码
我们使用上面案例数据,数据有三列,第一列为user_id(主键),第二列为对应的营销渠道,第三列为是否转化。
导入数据后,对数据观察如下:
import pandas as pd
import numpy as np
AD_data = pd.read_csv("D:/data/Attribution_test/AD_data.csv")
print(AD_data.head(20))
接下来编写Attribution_Analysis类来进行归因分析(未完,明天完成上传代码,现在只写了大致结构):
class Attribution_Analysis:
def __init(self, data):
self.AD_data = data
#计算RR
def _RR_cul(self):
pass
#计算RD
def _RD_cul(self):
pass
#计算OR
def _OR_cul(self):
pass
#计算AP
def _AP_cul(self):
pass
#计算PAF
def _PAF_cul(self):
pass
#进行归因分析
def attribution_analysis(self):
self._RR_cul()
self._RD_cul()
self._OR_cul()
self._AP_cul()
self._PAF_cul()
上一篇: 数据分析day1
推荐阅读
-
快速介绍Python数据分析库pandas的基础知识和代码示例
-
Python数据分析 淘宝用户行为分析案例(One-Hot编码) pandas.Timestamp apply,applymap和map
-
用一个完整的案例讲解Python数据分析的整个流程和基础知识
-
简单且有用的Python数据分析和机器学习代码
-
快速介绍Python数据分析库pandas的基础知识和代码示例
-
Python数据分析 淘宝用户行为分析案例(One-Hot编码) pandas.Timestamp apply,applymap和map
-
用一个完整的案例讲解Python数据分析的整个流程和基础知识
-
简单且有用的Python数据分析和机器学习代码
-
数据分析系列:归因分析原理、案例和python代码