推荐系统GBDT+LR

主要解决的问题

如何得到更有用的特征?

模型自动学习,dnn;人工设计,用户侧特征和item侧特征

答:利用GBDT自动进行特征交叉

使用场景

最广泛的场景是CTR点击率预估,即预测当给用户推送的广告会不会被用户点击。

推荐系统全流程

离线部分目标主要是训练出可用模型,而在线部分则考虑模型上线后,性能可能随时间而出现下降,弱出现这种情况,可选择使用Online-Learning来在线更新模

离线部分

  1. 数据收集:主要收集和业务相关的数据,通常会有专门的同事在app位置进行埋点,拿到业务数据
  2. 预处理:对埋点拿到的业务数据进行去脏去重;
  3. 构造数据集:经过预处理的业务数据,构造数据集,在切分训练、测试、验证集时应该合理根据业务逻辑来进行切分;
  4. 特征工程:对原始数据进行基本的特征处理,包括去除相关性大的特征,离散变量one-hot,连续特征离散化等等;
  5. 模型选择:选择合理的机器学习模型来完成相应工作
  6. 超参选择
  7. 在线A/B Test:选择优化过后的模型和原先模型(如baseline)进行A/B Test,若性能有提升则替换原先模型;

在线部分

  1. Cache & Logic:设定简单过滤规则,过滤异常数据;
  2. 模型更新:当收集到合适大小数据时,对模型进行pretrain+finetuning,若在测试集上比原始模型性能高,则更新model server的模型参数;
  3. Model Server:接受数据请求,返回预测结果;

GBDT+LR原理

1. 对原始训练数据做训练,得到一个二分类器,GBDT的输出为这些弱分类器的组合[0 1 0 0 1] ,或者一个稀疏向量(数组)。所以在一个具有n个弱分类器、共计m个叶子结点的GBDT中,每一条训练数据都会被转换为1*m维稀疏向量,且有n个元素为1,其余m-n 个元素全为0

类似one-hot的向量形式

特征交叉

树的高度为k,则进行了k次节点的分裂,因此,最终的叶子节点实际上是进行了k阶特征交叉

2. LR:GBDT输出的数据稀疏,而且由于弱分类器个数,叶子结点个数的影响,可能会导致新的训练数据特征维度过大,因此,在Logistic Regression这一层中,可使用正则化来减少过拟合的风险,在Facebook的论文中采用的是L1正则化

模型评价指标

1.Normalized Entropy

yi为样本的真实label,pi 为预估的CTR,p为训练集上的真实平均CTR。


2.Calibration

Calibration=预估CTR/真实CTR,COPC的倒数,COPC=真实CTR/预估CTR

学习率

Per-Coordinate Learning Rates

当一个特征出现的次数较多时,说明此时这个特征参数训练的已经比较充分了,因此学习率可以比较低一点;但当一个特征出现的次数较少时,说明此时训练的还不够充分,所以需要较大的学习率来尽快的收敛。

优点:使得那些低频长尾特征也能学到一个比较好的参数。

经验之谈:除以每个特征的曝光次数的开方也可以提升auc

why GBDT not XGB?

GBDT前面的树,特征分裂主要体现对多数样本有区分度的特征;后面的树,主要体现的是经过前N颗树,残差仍然较大的少数样本。优先选用在整体上有区分度的特征,再选用针对少数样本有区分度的特征,思路更加合理。

代码实现

https://www.cnblogs.com/wkang/p/9657032.html

相关问题

1.使用GBDT进行特征组合,会导致模型周期拉长,导致模型更新不及时,效果变差该如何解决?

答:

  1. GBDT部分天级别甚至几天更新一次
  2. LR部分的参数online learning 实时的更新

2.样本采样

负采样,是做了负采样之后会导致样本分布发生变化,尤其是CTR发生变化,因此需要进行CTR校准还原

p为在采样后的pctr,w为负采样采样率,q为校准后的CTR。

补充:GBDT模型原理

加法模型:每轮迭代会产生一个弱分类器, 每个分类器在上一轮分类器的残差基础上进行训练,每轮的训练是在上一轮的训练的残差基础之上进行训练的

损失函数:回归问题中一般使用的是平方损失, 而二分类问题中使用交叉熵损失

例子:假如有个人30岁,我们首先用20岁去拟合,发现损失有10岁;我们去你和损失,拟合的数值为6岁,发现差距还有4岁,第三轮我们用3岁拟合剩下的差距,差距就只有一岁了。

上一步的残差是下一步的解决目标。

GBDT既可以用于分类模型,也可以用于回归模型。在分类模型中,GBDT通过训练多个决策树来预测样本的类别,每个决策树的输出是概率值或者类别标签。在回归模型中,GBDT通过训练多个决策树来预测目标变量的值,每个决策树的输出是一个实数值。

  • 8
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
GBDT+LR的Python实现可以按照以下步骤进行: 1. 数据预处理:对数据进行清洗、缺失值处理、特征选择等操作。 2. 数据加载:使用Python的数据处理库(如pandas)加载数据集。 3. 模型搭建:使用GBDT模型进行特征转换,将原始特征转换为GBDT树的叶子节点输出的实数值。 4. 训练及预测:使用训练数据训练GBDT模型,并将训练得到的特征转换结果作为LR模型的输入进行训练。然后使用测试数据进行预测。 具体的实现步骤可以参考引用\[1\]和引用\[3\]中提到的内容。在训练阶段,需要获取特征数据并拆分成训练数据和测试数据,然后分别训练GBDT分类器和LR模型。在预测阶段,将待预测的特征输入到GBDT模型中,获取叶子节点并进行拼接,然后使用OneHot编码器将拼接结果转换为OneHot向量,最后使用LR模型进行预测。 总的来说,GBDT+LR的Python实现包括数据预处理、数据加载、模型搭建、训练及预测等步骤,具体的实现细节可以参考引用\[1\]和引用\[3\]中的内容。 #### 引用[.reference_title] - *1* [推荐系统 | 基础推荐模型 | GBDT+LR模型 | Python实现](https://blog.csdn.net/liujiesxs/article/details/126723249)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insertT0,239^v3^insert_chatgpt"}} ] [.reference_item] - *2* *3* [Facebook的GBDT+LR模型python代码实现](https://blog.csdn.net/weixin_43290383/article/details/121306368)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insertT0,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值