GBDT+LR

GBDT+LR

CTR预估场景涉及到大量高维稀疏特征,树模型并不适合处理这些高维稀疏特征(因此实际上会将dense特征或者低维的离散特征给GBDT,剩余高维稀疏特征拼接上GBDT阶段输出的稀疏特征,然后放到在LR阶段进行训练。GBDT的核心任务是特征组合,擅长自动发现非线性交叉关系。

  • 传统决策树模型不适合处理稀疏特征,效果和效率通常明显逊色于LR、SVM 或深度学习模型。
  • 现代 GBDT(如 XGBoost、LightGBM)针对稀疏数据进行了专门优化(稀疏特征计算,不是稀疏特征泛化),能够处理稀疏特征。但需要频繁构建直方图或进行排序,内存占用和计算开销依然远大于基于梯度下降的线性模型。
  • 超高维特征或高基数特征如用户ID、广告ID等,树模型不适合直接处理。可以使用开启了 smoothing 和 cross-fitting的TargetEncoder进行编码。或者使用GBDT + LR。

稀疏、稠密特征处理

FM擅长做稀疏特征处理

  • FM二阶做稀疏处理
  • FM一阶做稠密处理
  • GBDT擅长做稠密特征处理
  • DNN可以处理稠密特征、稀疏特征,不擅长做高维稀疏特征,如:uid,可以通过embedding的方式进行处理。【DNN中的连续特征:优先做归一化/标准化,在推荐/广告中分桶更常见。】
  • 适合分桶的连续特征:
    • 长尾分布
    • 明显非线性,如用户年龄:18岁、30岁、60岁,不同年龄段行为差异明显。
    • 业务上有区间意义,如价格:低价商品、中价商品、高价商品
  • 适合归一化/表转化的连续特征:
    • 数值统计特征:过去7天点击次数、平均停留时间。尤其是连续、分布稳定、没有明显业务区间的特征,通常做log(x+1)变换后再进行归一化/标准化

GBDT+FM

使用GBDT+FM替换升级GBDT+LR,GBDT+FM一般会比直接单纯使用GBDT效果要好。

尝试L-BFGS、SGD和FTRL三种优化算法求解,其中FTRL最优秀。

在稀疏特征建模里,凡是可以用”多个个体共享的属性组合”来替代”每个个体独有的身份标识”的地方,都应该优先这么做。
用一组可复用、跨用户共享的行为/属性特征去替代一个不可复用、高度个体化的ID,去刻画用户。

[user_id字段(如果保留,做低权重embedding)]

  • [观看历史标签字段: 悬疑=0.42, 犯罪=0.21, 惊悚=0.21, 爱情=0.28, 韩剧=0.35, 其余=0] (500维,大部分为0,是稀疏的)
  • [兴趣偏好标签字段: 快节奏=0.6, 高分内容=0.8, 其余=0] (200维,同样稀疏)
  • [其他字段: 年龄段、地域、性别…]

这个思路不只适用于FM,后来的深度学习推荐系统(比如很多工业界的双塔模型、DSSM变体)也普遍采用类似思路——不直接用user_id/item_id做embedding,而是用用户的多维画像特征(年龄段、地域、兴趣类目、行为序列统计等)拼接后过embedding,道理是完全一样的:牺牲一定的个体区分度,换取参数被更充分训练、对长尾和新用户更友好的泛化能力。

当然这也有权衡取舍——纯ID embedding的好处是理论上能捕捉到”千人千面”里最细粒度的个体差异(比如两个兴趣标签完全一样的用户,实际口味可能仍有细微不同),所以工业界很多系统会两者结合:主特征用标签/行为统计这类可复用特征保证泛化能力和冷启动效果,同时保留一个低权重/低维度的ID embedding作为补充,去捕捉标签体系覆盖不到的个性化残差信息。这也是为什么现在很多系统会把”频次高的头部ID单独保留embedding,长尾ID统一映射到一个UNK/兜底embedding”作为一种折中方案。