如何基于负向反馈(关闭通知)拟合疲劳曲线?

解读

面试官想知道三件事:

  1. 你能否把“用户关闭推送”这一负向信号转化为可量化的疲劳度指标
  2. 你能否用国内可落地的数据工具(如阿里云Quick BI、字节火山引擎、腾讯有数)把离散事件拟合成连续曲线;
  3. 你能否把曲线结果反向应用到分层运营策略,降低关闭率并提升ROI。
    回答必须体现“数据→模型→策略→验证”闭环,且符合国内隐私合规要求(《个人信息保护法》《常见类型移动互联网应用程序必要个人信息范围规定》)。

知识点

  1. 疲劳度定义:用户关闭通知行为可视为对推送“边际效用为负”的投票,疲劳度=1−保留通知概率。
  2. 负向样本采集:需同时记录关闭动作(事件名:notification_off)与上下文维度(渠道、频次、时段、内容类型、近7日触达次数、是否大促期)。
  3. 生存分析(Survival Analysis):用Kaplan-Meier估计“从首次收到推送到关闭”的生存函数,曲线拐点即为疲劳临界点。
  4. 参数拟合:对每日关闭率进行Weibull分布拟合,形状参数k<1表示随时间疲劳递减,k>1表示加速疲劳;国内常用Python库lifelines或阿里云PAI-Studio可视化拖拽完成。
  5. 特征权重:用Cox比例风险模型量化“每日推送条数”对关闭风险的** hazard ratio(HR)**,HR>1说明每多推1条,关闭风险提升(例:HR=1.18,即提升18%)。
  6. 合规注意:上报“关闭”事件前需在隐私政策中明确列出“用户关闭推送”属于业务功能所需的必要个人信息,否则不得上传设备ID。

答案

步骤一:数据准备

  1. 埋点V3.0中新增字段:is_notification_off=1,携带user_id、push_id、scene、send_time、content_type、累计近7日条数(cnt_7d)。
  2. 剔除无效样本:卸载后触发的关闭事件、同一用户24小时内重复关闭只保留首次。

步骤二:生存曲线估计

  1. 以“首次收到推送”为起点,“关闭通知”为终点,建立Survival DataSet,右删失用户为“仍开启”。
  2. Kaplan-Meier画出不同频次分组(≤3条/天、4-6条、≥7条)的生存曲线,发现≥7条组中位生存时间仅4.2天,显著低于≤3条组的18天(p<0.001)。

步骤三:疲劳曲线拟合

  1. 对“每日关闭率”做Weibull拟合,得形状参数k=1.34,表明疲劳呈加速上升;尺度参数λ=0.012,可推算任意天数的关闭概率。
  2. 将曲线写入Redis缓存,支持实时查询:输入user_id即可返回该用户“再推1条”的预测关闭概率P_off。

步骤四:策略落地

  1. 分层阈值:P_off>8%即进入“冷却池”,48小时内不再主动营销推送,仅保留交易类强提醒(订单发货、退款到账),符合**《个人信息保护法》第十三条“履行合同必需”**豁免条款。
  2. 动态频控:将Weibull曲线嵌入火山引擎智能触达系统,实时调整每日推送上限,目标把关闭率从5.7%压到3%以内,同时GMV跌幅控制在2%以内;上线两周AB实验显示关闭率下降38%,GMV无显著损失。

步骤五:验证与迭代

  1. 每周跑Cox更新模型,观察HR变化;若某内容类型HR突增>1.5,立即下线该素材。
  2. 对冷却池用户推**“兴趣问卷”做二次分层,回收样本>2k即重新训练曲线,实现模型月更**。

拓展思考

  1. 多通道联合疲劳:国内用户同时收到短信、微信服务号、APP推送,需建立多渠道联合生存模型,用Frailty Model把个体异质性作为随机效应,避免单通道模型低估疲劳。
  2. 内容难度系数:同一频次下,“现金红包”类关闭风险是“新品资讯”的0.6倍,后续可把内容难度作为协变量加入Cox,实现“内容-频次”二维频控
  3. 长期价值权衡:过度压降关闭率可能导致**“消息触达不足”而流失,可引入CLV残差指标**——关闭率下降带来的CLV提升若小于边际运营成本,则停止继续收紧频控。