如何提取行为衰减斜率作为特征?

解读

在国内互联网公司的用户运营面试里,这道题表面问“技术”,实则考察三层能力:

  1. 能否把用户生命周期的“行为衰减”翻译成可计算的数学问题;
  2. 是否熟悉国内主流埋点体系(如阿里SPM、字节TEA、腾讯MTP)的字段限制与采样偏差;
  3. 能否把斜率结果嵌入运营策略,而非停留在“跑数”。
    面试官通常会给一个场景:比如“某电商App签到用户,第0天100%签到,随后每日衰减,30天后只剩8%,如何量化衰减速度并用于预警?”——候选人必须在2-3分钟内给出可落地的特征工程方案,并说明如何与后续分层运营闭环。

知识点

  1. 行为衰减的数学本质:对离散时间序列做对数线性回归,斜率b=ln(yt2/yt1)/(t2−t1),可消除指数衰减的异方差。
  2. 国内埋点合规限制:2021年《个人信息保护法》后,device_id不可跨App共享,必须依赖user_id+手机号哈希做关联,因此衰减序列容易断链,需先用ID-Mapping补齐。
  3. 特征鲁棒性处理
    • 对头部“7日活跃”用户,采用滚动7天窗口斜率,避免周末波动;
    • 对尾部“30日沉默”用户,用T+0~T+30的加权斜率,权重取自然衰减系数exp(−λt),降低远期噪声。
  4. 业务阈值:国内头部厂商经验值——斜率b<−0.15定义为“高危流失”,对应留存率跌破15%;该阈值需通过贝叶斯更新每季度校准。
  5. 工程落地:在阿里云MaxCompute字节Las中,用SQL嵌套Python UDF,一行代码即可输出斜率特征,方便次日调度写入FeatureStore,供下游RFM+斜率联合模型调用。

答案

分四步,每一步都给出可直接复制的SQL/伪代码,并说明如何与运营动作挂钩。

步骤1:构建“用户-日期-行为强度”表

CREATE TABLE dwd_user_daily AS
SELECT user_id,
       ds,
       -- 行为强度:签到+浏览+支付加权,符合国内埋点规范
       (sign_flag*3 + pv*0.1 + pay_amt*0.01) AS act_intensity
FROM dwd_log_detail
WHERE ds BETWEEN '${start_date}' AND '${end_date}';

步骤2:生成衰减序列并取对数

CREATE TABLE user_decay_series AS
SELECT user_id,
       collect_list( ln(act_intensity+1) )  AS ln_list,  -- 加1平滑
       collect_list( datediff(ds, first_date) ) AS day_idx
FROM (
    SELECT user_id,
           ds,
           act_intensity,
           first_value(ds) OVER (PARTITION BY user_id ORDER BY ds) AS first_date
    FROM dwd_user_daily
) t
GROUP BY user_id;

步骤3:计算斜率特征

# 注册为MaxCompute UDF
@udf(output_type='double')
def decay_slope(ln_list, day_idx):
    x = np.array(day_idx, dtype=float)
    y = np.array(ln_list, dtype=float)
    # 鲁棒线性回归,去掉首尾5%异常
    mask = (y > np.percentile(y,5)) & (y < np.percentile(y,95))
    slope, _, _, _, _ = linregress(x[mask], y[mask])
    return float(slope)

输出字段slope_7dslope_30d直接写入user_profile表。

步骤4:接入运营策略

  • 斜率b≥−0.05:高黏性,推会员升级包
  • −0.15<b<−0.05:中度风险,触发签到翻倍+push
  • b≤−0.15:高危流失,7日内未回访则自动发6折神券+短信召回,并写入字节巨量引擎Lookalike人群扩展

整个流程在DataWorks调度,晨跑08:30产出特征,10:00前推送到Kafka,保证运营同事上午就能在**内部CRM“客道”**看到分层名单。

拓展思考

  1. 多行为融合斜率:如果公司同时关注“社区发帖”和“电商下单”两条衰减曲线,可用多任务学习把两条斜率做成共享隐向量,解决样本稀疏问题;阿里妈妈已验证CTR提升6.8%
  2. 节假日扰动:国内“618”“双11”会人为抬升斜率,需引入节假日哑变量分段回归,否则模型会把促销反弹误判为“用户回暖”。
  3. 实时斜率:对内容型App,可基于Flink CEP计算72小时滚动斜率,一旦b<−0.2立即触发弹窗送金币,实现分钟级干预;字节内部称“实时衰减哨兵”,已覆盖2亿DAU。
  4. 隐私计算:若公司需与外部媒体做联合建模,可用隐语PSI求交后再计算斜率,确保手机号明文不出域,符合2023年《个人信息出境标准办法》最新要求。