因果推断——借微软EconML测试用DML和deepIV进行反事实预测实验(二十五)

Posted 悟乙己

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了因果推断——借微软EconML测试用DML和deepIV进行反事实预测实验(二十五)相关的知识,希望对你有一定的参考价值。

文章目录


1 导言

1.1 KDD2021:盒马-融合反事实预测与MDP模型的清滞销定价算法

本篇想法来源:因果推断与反事实预测——盒马KDD2021的一篇论文(二十三)
盒马论文提到了

  • 论文模型:半参数模型,上图是顺着使用数据的比例增加三个模型的RMAE,
  • 对比方案1-XGB:将折扣Treatment作为特征放入模型中预估销量值,但是这个模型本身存在混杂因子,估计是有偏的;
  • 对比方案2-DeepIV:将三级品类的平均价格(treatment)作为工具变量,建模深度学习模型刻画折扣和销量的关系,其中折扣Treatment建模成高斯分布

其中主结构模型为:

E [ ln ⁡ ( Y i / Y i nor ) ] = g ( d i ; L i , θ ) + h ( d i o , x i ) − g ( d i o ; L i , θ ) \\mathbbE\\big[\\ln(Y_i/Y_i^\\textnor)\\big] =g(d_i;L_i,\\theta) + h(d_i^\\texto,x_i) - g(d_i^\\texto;L_i,\\theta) E[ln(Yi/Yinor)]=g(di;Li,θ)+h(dio,xi)g(dio;Li,θ)

函数 h ( d i o , x i ) h(d_i^\\texto,x_i) h(dio,xi)为非参数预测模型,用于预测某个商品平均折扣 d i o d_i^\\texto dio下的销量,
如果 d i = d i o d_i=d_i^\\texto di=dio,那么
E [ ln ⁡ ( Y i / Y i nor ) ∣ d i o ] = h ( d i o , x i ) \\mathbbE\\big[\\ln(Y_i/Y_i^\\textnor)\\big|d_i^\\texto]=h(d_i^\\texto,x_i) E[ln(Yi/Yinor)dio]=h(dio,xi)
如果 d i ! = d i o d_i !=d_i^\\texto di!=dio,那么 g ( d i ) − g ( d i o ) g(d_i) -g(d_i^\\texto) g(di)g(dio)代表的是,特别折扣下的增量(新折扣增量),所以通俗来说就是:
E [ ln ⁡ ( Y i / Y i nor ) ] = 平 均 折 扣 销 ( p r e d i c t − m o d e l ) + 特 殊 折 扣 增 量 ( p r i c e − e l a s t i c i t y ) \\mathbbE\\big[\\ln(Y_i/Y_i^\\textnor)\\big] =平均折扣销(predict-model)+特殊折扣增量(price-elasticity) E[ln(Yi/Yinor)]=(predictmodel+(priceelasticity)

  • Y i o Y_i^\\texto Yio是常规渠道产品 i i i近期的平均销量
  • d i o d_i^\\texto dio是商品 i i i近期的平均折扣
  • Y i / Y i nor Y_i/Y_i^\\textnor Yi/Yinor代表了折扣价格使得销量增加的百分比,因为不同商品销量差异很大,所以比率会比绝对值更有用
  • 函数 g ( d i ; L i , θ ) g(d_i;L_i,\\theta) g(di;Li,θ)是参数化的价格弹性模型,参数 θ ∈ R m + 1 \\theta\\in\\mathbbR^m+1 θRm+1

1.2 本篇想法

结合之前DML学习时候,这篇文章的描述:
【因果推断/uplift建模】Double Machine Learning(DML)

其流程分为两个步骤:
第一步,依然是估计T和Y的残差:
Y ~ i = τ ( X i ) T ~ i + e i \\tildeY_i = \\tau(X_i) \\tildeT_i + e_i Y~i=τ(Xi)T~i+ei
第二步,基于X和T的残差使用S-learner预测Y的残差:
Y ~ i = τ ( X i , T ~ i ) + e i \\tildeY_i = \\tau(X_i, \\tildeT_i) + e_i Y~i=τ(Xi,T~i)+ei
最后在 M ^ y ( X i ) \\hatM_y(X_i) M^y(Xi)预测的 Y ^ \\hatY Y^上加上 Y ~ i \\tildeY_i Y~i,即得到最后的y值。

加上,

其中关于盒马那篇文章提到的半参数模型,思路上有一些启发,这里就自己沿着他们的思路DIY一下,借用微软开源的EconML来实现,让我来快速介绍一下本篇会尝试几种思路。
X-协变量Covariates(比如收入);Y-Responses(销量);W-混淆因子;T-干预treatment(比如折扣)

  • 实验测试模型1:Tree模型,将T(干预treatment)作为特征直接加到模型里面,也就是此时没有T/W/X,都是自变量,直接使用最简单的XGBoost
  • 实验测试模型2:将T作为IV,与盒马一样,借由Econml开源的deepIV
  • 实验测试模型3:本篇比较想尝试的,分为两个:
    • 无干预样本(T=0):Tree-based模型 E ( y ∣ x , w ) E(y|x,w) E(yx,w)
    • 有干预样本(T=1):Tree-based模型 E ( y ∣ x , w ) + D M L − C A T E ( Y ∣ X , W , T ) E(y|x,w)+DML-CATE(Y|X,W,T) E(yx,w)+DMLCATE(YX,W,T)

这里针对模型3,解释一下: