因果推断——借微软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)]=平均折扣销(predict−model)+特殊折扣增量(price−elasticity)
- 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(y∣x,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(y∣x,w)+DML−CATE(Y∣X,W,T)
这里针对模型3,解释一下:
- Tree-based模型
E
(
y
∣
x
,
w
)
E(y|x,w)
以上是关于因果推断——借微软EconML测试用DML和deepIV进行反事实预测实验(二十五)的主要内容,如果未能解决你的问题,请参考以下文章