贝叶斯结构模型在全量营销效果评估的应用( 五 )

五、业务场景实践用户营销是促进留存及转化的重要方式 , 其中对用户进行消息触达是一大核心手段 , 尤其是在节假日的购票高峰期对用户进行推送 , 方式包括站内push;微信生态中的小程序订阅消息;公众号或是企微环境等等 , 目的包括但不限于提醒用户购票;宣传品牌功能;发放优惠券吸引用户转化等等 。在节假日之后 , 我们希望对这次的营销触达进行效果评估 。
这是一个较为典型的不适合进行AB实验的场景 , 首先因为节假日是流量高峰时期 , 如果严格预留50%用户不触达 , 可能会损失一批潜在的转化用户;如果改将对照组预留很少的人数 , 例如对照组:实验组=1:9 , 那对于后续的转化对比的科学性会产生影响 。其次 , 节假日的推送策略往往非常精细化 , 总量达几十条 , 我们较难保证对照组用户的“纯粹性” , 用户可能会被交叉触达 。
基于种种问题 , 我们较难通过传统AB 的手段来评估推送带来的转化效果 。因此我们考虑使用因果推断的方式来解决 。常规可选的方法和潜在问题如下:

  • 如果使用PSM , 需要在大盘中寻找与推送人群相似但是没有被推送的用户作为对照组 。但一般节假日推送时都会有兜底策略 , 几乎覆盖了95%以上的平台用户 , 较难从中找到符合条件但未被推送的人群来进行对照 。
  • 如果使用SCM , 我们较难找到合适的对照组来合成 。如评估度假BU的推送效果时 , 我们不太可能用火车、机票、酒店等各个产线合成一个“虚拟度假BU” , 因为本身各个产线的用户需求就不同 , 使用这样合成的虚拟对照组来对比度假订单的转化率是不够科学的 。
  • DID的方式也同理 , 我们很难找到一个满足平行趋势假设且业务场景相似的对照组来进行推送前后的对比 。
综上所述 , 一些传统的因果推断方法纵使在技术上可行 , 在业务的解释性上也有所欠缺 。而且 , 以上三种方式都没有考虑到用户购票行为的“时间周期性” 。因此即使合成了对照组也不一定能够匹配到实验组真正的结构特点 , 进而导致效应值计算有偏 。于是我们考虑首先验证用户购票的数据周期性;在定位到周期规律之后尝试使用BSTS模型结合CausalImpact来进行反事实值的预测 。下文我们选择2022年端午的火车票营销推送场景进行实践 。
贝叶斯结构模型在全量营销效果评估的应用

文章插图
图5-1展示端午期间对于用户进行不同策略的推送触达 。
5.1 数据选取
  • 我们以小时为周期窗口 , 通过简单的图像能够看出大盘的火车票下单人数确实随着时间推移呈现某种固定趋势 。

贝叶斯结构模型在全量营销效果评估的应用

文章插图
图5-2展示选取端午周期内(正端午前后10天)每小时的火车票大盘支付人数
  • 考虑到端午作为节假日本身就有的自然流量增长 , 支付人数的提升不能完全归因于推送带来的 , 因此训练时序模型的时候 , 选取了19年-21年所有的端午数据(正端午前后10天)输入BSTS模型进行训练 , 得到端午这个窗口内的特有的结构状态 , 随后用这个结构化的模型来代入22年的端午数据 , 对2022年端午推送之后的转化人数做出预测 。
  • 最后使用真实的转化人数与预测人数作差体现本次营销推送的效果 。
5.2 R-代码实现
# 选取19-22年每年的端午窗口 , 按照小时划分 , 共960个数据点y_hour=c(x1,x2,x3,x4)x_time_hour=c(1:960)data_hour <- cbind(y_hour, x_time_hour)pre.period <- c(1, 808)# 2022年的推送发生在第808个时间点 , 故以此为干预节点 。post.period <- c(809, 960)# nseasnotallow=24, 迭代次数2000 , fit the modelimpact_hour <- CausalImpact(data_hour, pre.period, post.period, model.args = list(niter = 20000, nseasons = 24))summary(impact_hour)plot(impact_hour)
贝叶斯结构模型在全量营销效果评估的应用

文章插图
图5-3展示使用CausalImpact返回的结果图 。第一张图表示真实支付人数与预测支付人数;第二张图表示真实值与预测值的差值及置信区间;第三张图是累计差值和置信区间 。


推荐阅读