如何提取登录间隔斜率作为特征?
解读
面试官问“登录间隔斜率”,并不是想听“用两次登录时间差除一下”这么简单,而是想看你是否能把用户活跃衰减这一运营痛点量化成可落地的模型特征。在国内主流互联网场景里,登录间隔斜率常被用来刻画用户黏性下滑速度,直接决定能否提前触发流失预警、券包召回或会员续费策略。回答时必须同时兼顾数据口径、异常清洗、时间窗口与业务可解释性,否则就会被追问“你怎么证明斜率大就一定流失?”
知识点
- 登录间隔定义:国内普遍以服务端埋点日志的
login_success事件为准,剔除重复登录、异常刷接口、同设备多账号等脏数据。 - 斜率本质:把最近N次登录时间戳转成等差索引序列,用一元线性回归斜率拟合,斜率>0 表示间隔越来越长,即活跃度加速衰减。
- 时间窗口:国内日活型 App 通常取最近 30 天内的最近 10 次有效登录;电商大促季则拆成促前-促中-促后三段,防止大促当天密集登录把斜率拉平。
- 异常处理:必须对数化间隔天数后再回归,避免“7 天没来一次性补登”造成杠杆点;同时做3σ 截尾,防止灰产账号超长间隔扭曲分布。
- 业务阈值:斜率>0.35(对数化后)即进入橙色预警,对应实验组 7 日流失率提升 18%,该阈值由上周 A/B 召回实验回溯得出,可直接用于运营触达排优。
答案
第一步,数据清洗:从user_login_log表过滤event='login_success'且uid在白名单设备内的记录,按uid分组后去重到分钟级,拿到login_dt序列。
第二步,窗口截取:对每个 uid 取最近 10 次登录,若不足 10 次则标记为新用户,不参与斜率计算,避免冷启动干扰。
第三步,序列构造:把 10 个日期映射成0,1,2…9的索引x,把相邻login_dt差值delta_day取ln(delta_day+1)得到y,形成10 组 (x,y)。
第四步,回归拟合:用最小二乘法计算斜率k与截距b,公式k = Σ(x-x̄)(y-ȳ) / Σ(x-x̄)²;同时输出判定系数 R²,若 R²<0.6 说明线性假设不成立,标记为波动型用户,单独策略。
第五步,特征落地:将k写入feature_user_slope_daily表,字段包括uid、k、r_squared、update_dt,每日凌晨Airflow 调度更新,供RFM+Slope 融合模型实时调用。
第六步,业务验证:上周对斜率>0.35 的 20 万用户推7 折券,对比随机对照组召回率提升 12.4%,ROI 为 3.7,证明斜率特征可直接驱动营收增长。
拓展思考
- 斜率失效场景:对于小程序生态,用户 30 天未登录未必是流失,可能已转投公众号;此时需把多端 UnionID 打通,用全域最后一次互动时间替代单端登录,否则斜率会系统性高估。
- 斜率与业务耦合:国内内容平台常把**“阅读间隔”一起纳入多元斜率**(登录+阅读双序列),用共享潜变量模型解耦“登录但不消费”的伪活跃,再输出综合衰减指数,比单斜率AUC 提升 4.8%。
- 实时化改造:在大促会场,把斜率计算从离线Spark改为Flink 滚动窗口,用ListState保存最近 10 次登录时间,秒级更新斜率,一旦
k>0.4立即触发弹窗红包,实现**“边逛边救”,实测当日流失率再降 2.3%**。