如何基于负向反馈(关闭通知)拟合疲劳曲线?
解读
面试官想知道三件事:
- 你能否把“用户关闭推送”这一负向信号转化为可量化的疲劳度指标;
- 你能否用国内可落地的数据工具(如阿里云Quick BI、字节火山引擎、腾讯有数)把离散事件拟合成连续曲线;
- 你能否把曲线结果反向应用到分层运营策略,降低关闭率并提升ROI。
回答必须体现“数据→模型→策略→验证”闭环,且符合国内隐私合规要求(《个人信息保护法》、《常见类型移动互联网应用程序必要个人信息范围规定》)。
知识点
- 疲劳度定义:用户关闭通知行为可视为对推送“边际效用为负”的投票,疲劳度=1−保留通知概率。
- 负向样本采集:需同时记录关闭动作(事件名:notification_off)与上下文维度(渠道、频次、时段、内容类型、近7日触达次数、是否大促期)。
- 生存分析(Survival Analysis):用Kaplan-Meier估计“从首次收到推送到关闭”的生存函数,曲线拐点即为疲劳临界点。
- 参数拟合:对每日关闭率进行Weibull分布拟合,形状参数k<1表示随时间疲劳递减,k>1表示加速疲劳;国内常用Python库lifelines或阿里云PAI-Studio可视化拖拽完成。
- 特征权重:用Cox比例风险模型量化“每日推送条数”对关闭风险的** hazard ratio(HR)**,HR>1说明每多推1条,关闭风险提升(例:HR=1.18,即提升18%)。
- 合规注意:上报“关闭”事件前需在隐私政策中明确列出“用户关闭推送”属于业务功能所需的必要个人信息,否则不得上传设备ID。
答案
步骤一:数据准备
- 在埋点V3.0中新增字段:is_notification_off=1,携带user_id、push_id、scene、send_time、content_type、累计近7日条数(cnt_7d)。
- 剔除无效样本:卸载后触发的关闭事件、同一用户24小时内重复关闭只保留首次。
步骤二:生存曲线估计
- 以“首次收到推送”为起点,“关闭通知”为终点,建立Survival DataSet,右删失用户为“仍开启”。
- 用Kaplan-Meier画出不同频次分组(≤3条/天、4-6条、≥7条)的生存曲线,发现≥7条组中位生存时间仅4.2天,显著低于≤3条组的18天(p<0.001)。
步骤三:疲劳曲线拟合
- 对“每日关闭率”做Weibull拟合,得形状参数k=1.34,表明疲劳呈加速上升;尺度参数λ=0.012,可推算任意天数的关闭概率。
- 将曲线写入Redis缓存,支持实时查询:输入user_id即可返回该用户“再推1条”的预测关闭概率P_off。
步骤四:策略落地
- 分层阈值:P_off>8%即进入“冷却池”,48小时内不再主动营销推送,仅保留交易类强提醒(订单发货、退款到账),符合**《个人信息保护法》第十三条“履行合同必需”**豁免条款。
- 动态频控:将Weibull曲线嵌入火山引擎智能触达系统,实时调整每日推送上限,目标把关闭率从5.7%压到3%以内,同时GMV跌幅控制在2%以内;上线两周AB实验显示关闭率下降38%,GMV无显著损失。
步骤五:验证与迭代
- 每周跑Cox更新模型,观察HR变化;若某内容类型HR突增>1.5,立即下线该素材。
- 对冷却池用户推**“兴趣问卷”做二次分层,回收样本>2k即重新训练曲线,实现模型月更**。
拓展思考
- 多通道联合疲劳:国内用户同时收到短信、微信服务号、APP推送,需建立多渠道联合生存模型,用Frailty Model把个体异质性作为随机效应,避免单通道模型低估疲劳。
- 内容难度系数:同一频次下,“现金红包”类关闭风险是“新品资讯”的0.6倍,后续可把内容难度作为协变量加入Cox,实现“内容-频次”二维频控。
- 长期价值权衡:过度压降关闭率可能导致**“消息触达不足”而流失,可引入CLV残差指标**——关闭率下降带来的CLV提升若小于边际运营成本,则停止继续收紧频控。