如何建模Push、短信、微信的协同效应?

解读

面试官问“协同效应建模”,核心想验证三件事:

  1. 你能否把**国内主流触达渠道(Push、短信、微信)**放在同一套数据体系里量化;
  2. 你能否用因果推断而非“看报表”来证明1+1>2;
  3. 你能否把模型结果落地到资源预算分配与频次控制,真正提升ROI与用户体验
    回答必须体现“数据驱动+业务闭环”,否则会被追问“模型准但业务不涨怎么办”。

知识点

  1. 多触点归因(MTA):位置归因、时间衰减、Shapley值,解决“谁该拿多少转化功劳”。
  2. Uplift Model:双重机器学习(DML)、因果森林,量化“因为协同所以多卖了多少”。
  3. 渠道疲劳曲线:负指数函数拟合,找到边际响应率<边际成本的临界点。
  4. 国内数据合规:短信需用户明确订阅(工信部26号令),微信需48小时内互动(微信官方规则),Push需厂商级通道权限(华为/小米/OPPO)。
  5. 业务约束:短信成本≈0.045元/条、微信模板消息免费但有限额、Push到达率受厂商通道配额影响,模型必须带成本上限

答案

我把建模拆成五步,每一步都给出国内可落地的数据表、字段、代码思路,保证今晚就能跑通。

第一步:统一数据仓
建表user_touch_log,核心字段:
user_idtouch_type(push/sms/wechat)、touch_idsend_timereceive_timereceive_status(0/1)、cost(分)、campaign_idgoal_type(拉新/促活/召回)。
关键:微信回执用MsgID反查微信后台,短信回执接阿里云/腾讯云回执URL,Push回执接厂商通道回执,确保到达率=receive_status=1

第二步:定义协同窗口
国内用户决策周期短,滑动窗口取24小时
若同一用户在24小时内收到≥2渠道,则标记为synergy=1,否则为single=1
session_id=concat(user_id,date_format(send_time,'%Y%m%d'))做分组,防止跨天污染。

第三步:构建Uplift样本
目标变量:下单/活跃/还款,按业务KPI选。
Treatment组:synergy=1渠道顺序随机(通过运营平台AB流量切分保证随机)。
Control组:只给单一渠道,其余特征用倾向分匹配(PSM)对齐。
因果森林(grf包)估计ITE,输出uplift_score= P(y=1|T=1,X)−P(y=1|T=0,X)
关键:必须做
敏感性检验
,把“渠道顺序”当混淆变量再跑一遍,确保 uplift 不是顺序效应。

第四步:归因+预算分配
Shapley值把总GMV拆到各渠道组合。
公式:φ_i=∑_{S⊆N\{i}} (|S|!(n−|S|−1)!/n!) * (v(S∪{i})−v(S))
其中v(S)uplift增量GMV,不是总GMV,避免把自然转化算进来。
φ_i除以cost_i得到边际协同ROI,按ROI降序排,前70%预算优先投放,剩余30%做探索。

第五步:频次控制模型
负指数函数拟合响应率:
response_rate=a×exp(−b×freq)+c
分别对singlesynergy拟合,求交点freq*使得uplift=0
产出规则

  • 若用户近7天已收≥2次微信,则短信/Push降权50%
  • uplift_score<0.8%cost>0.03元,则自动关断
  • 大促期临时放开成本上限+20%,但需实时看板监控投诉率,>0.3%立即熔断

落地工具:

  • 数据层:MaxCompute做离线,Flink做实时;
  • 模型层:Python因果森林+Shapley包;
  • 决策层:接入阿里Quick Audience腾讯企点营销,把uplift_scoreφ_i写回人群标签,T+1小时更新

拓展思考

  1. 隐私政策升级后,微信模板消息将下线,需提前把模型迁移到微信小程序订阅消息,订阅消息一次性特性会让协同窗口缩短到1小时,需重跑Uplift实验。
  2. 厂商通道配额(小米日限10万、华为日限5万)是硬瓶颈,可把配额当约束条件写进线性规划,用拉格朗日松弛求最优渠道组合,避免“模型最优但通道被打回”。
  3. 长期看,把协同效应模型与CLV模型串联:用uplift_score修正CLV预测,高CLV且高uplift用户进入VIP通道,享受人工+自动化混合触达,实现品牌忠诚GMV双增长。