因果推断综述


最近一段时间由于业务需要,对因果推断进行研究,针对精准营销、用户增长、广告、模型可解释性等领域都有比较广泛的应用。本文主要从原理+实践角度去讲解一下相关的因果推断的工具或方法。以下是主要内容:

一、双重差分法

二、Uplift Model

三、Causal ML

四、EconML

五、Dowhy

六、模型可解释性

1、ShapleyValue

2、Lime

----------------------------------------------------------------------------------------------------------------------------------------

一、双重差分法(DID):DID(difference-in-differences model)也叫双重差分模型。

1、主要原理:

(1)通过将样本数据分成实验组和对照组,实验组是施加干预的一组,对照组是未施加干预的一组。

(2)通过对上述两组样本进行观察指标(也称目标指标)分析其变化,一般是转化率等KPI指标

(3)分别计算干预前后实验组和对照组对应的目标指标的差分结果

(4)计算两组最终的差分结果。

如下图所示:

   双重差分的结果:ATE=(A2-A1)-(B2-B1)

2、工业实践:

  根据公示的推导,双差分模型方程式可以写成下面表达式:

  如果按照时间差分,则得到如下结果

  再次按照干预前后进行差分,得到结果如下:

  由此可见,交叉项的系数就是我们需要求解的因果效应ATE的值。

  工业中一般实现的方式如下:

import statsmodels.formula.api as smf
import pandas as pd

v1 =[0.367730,0.377147,0.352539,0.341864,0.29276,0.393443,0.374697,0.346989,0.385783,0.307801]
t1 = [0,0,0,0,1,0,0,0,0,1]
g1 =[1,1,1,1,1,0,0,0,0,0]
tg1 = [0,0,0,0,1,0,0,0,0,0]
aa = pd.DataFrame({'t1':t1,'g1':g1,'tg1':tg1,'v1':v1})
X = aa[['t1', 'g1','tg1']]
y = aa['v1']
est = smf.ols(formula='v1 ~ t1 + g1 + tg1', data=aa).fit() 
y_pred = est.predict(X)
aa['v1_pred'] = y_pred

print(est.summary()) 

print(est.params)

  输出结果如下所示:

  交叉项的系数就是DID结果,处理效应。P>| t |为其P值,小于0.05表示差异显著。

二、Uplift Model (增益模型)

1、基本原理:Uplift models预测增量值,也就是Lift的部分:

            [公式]

  在营销领域中,我们经常会将人群划分成四个象限,横坐标表示无干预下用户购买情况,纵坐标是用户在有干预下的购买状况。如下图所示:

                

(1)第1类人群的购买状况在干预后发生了正向变化,如果我们不对这类人群进行干预,那他有可能是不购买的,但是干预之后的购买概率有极大提升,所以这类人群是我们真正想要触达的用户,即营销敏感人群。

(2)第 2 类和第 3 类,在干预前后的购买状况没有变化,所以预算花费可能是浪费。

(3)第4类比较特殊的人群,虽然其在干预前后的状态有跳变,但这种跳变不是我们希望看到的,因为确实有一些人群对营销是反感的,所以对这类人群我们应该极力避免触达。

Uplift Model 正是为了识别我们想要的营销敏感人群。其主要方法有:

(1)Two-Model Approach:分别通过模型对实验组和对照组的目标指标进行拟合,最后两个模型的差值则为Lift。

          

(2)One-Model Approach:模型直接以实验组与对照组的差值作为目标进行拟合

          

(3)树模型

问题1:Uplift Model 与 Response Model之间的区别:

(1)Response Model 的目标是估计用户看过广告之后转化的概率,这本身是一个相关性,但这个相关性会导致我们没有办法区分出自然转化人群;

(2)Uplift Model 是估计用户因为广告而购买的概率,这是一个因果推断的问题,帮助我们锁定对营销敏感的人群。所以 Uplift Model 是整个智能营销中非常关键的技术,预知每个用户的营销敏感程度,从而帮助我们制定营销策略,促成整个营销的效用最大化。

(4)模型的评价指标:AUUC

AUUC实际上跟AUC有点类似,也是对应曲线下面的面积,如下图所示:

其中,虚线表示随机试验的结果,曲线则是按照模型的方式打分分成10等分,计算对应的增益的值(uplift gain)。两条曲线中间的面积就是AUUC,该指标越大表明模型表现越好。

2、代码实践

import numpy as np, matplotlib as mpl, matplotlib.pyplot as plt, pandas as pd
from pylift import TransformedOutcome
from pylift.generate_data import dgp
# Generate some data.
df = dgp(N=10000, discrete_outcome=True)


up = TransformedOutcome(df, col_treatment='Treatment', col_outcome='Outcome', stratify=df['Treatment'])

from pylift import TransformedOutcome
up.randomized_search(n_iter=100,n_jobs=10,random_state=100) # 对所有参数grid search,十分耗时,使用时注意限制参数searching的数量
up.fit(**up.rand_search_.best_params_)

up.plot(plot_type='aqini', show_theoretical_max=True) # 绘制aqini曲线
print(up.test_results_.Q_aqini)  #AUUC

三、Causal ML

  其实casual ml是一个实现uplift model的python开源工具包,项目地址:https://github.com/uber/causalml;相关的资料可以详细参考对应的文档说明即可。

四、EconML

  econml同样是一个实现uplift model的开源工具包,文档地址:https://econml.azurewebsites.net/;项目地址:https://github.com/Microsoft/EconML;

五、Dowhy

  Dowhy是集成causal graph 和potential outcome 两个框架。项目地址:https://github.com/microsoft/dowhy;主要包含四步:

  • I. Model a causal problem
    • Supported formats for specifying causal assumptions
  • II. Identify a target estimand under the model
    • Supported identification criteria
  • III. Estimate causal effect based on the identified estimand
    • Supported estimation methods
    • Using EconML and CausalML estimation methods in DoWhy
  • IV. Refute the obtained estimate
    • Supported refutation methods

六、模型可解释性

1、ShapleyValue:项目地址:https://github.com/slundberg/shap;

shapleyvalue主要是计算每个特征对应的边际贡献度的方法来对模型进行解释。

2、Lime

Lime主要是通过假设局部是线性的方法来局部拟合原模型。