CTR预测:点击率预测,

基本思想:

GBDT 基于集成学习中的boosting思想,每次迭代都在减少残差的梯度方向新建立一颗决策树,迭代多少次就会生成多少颗决策树,不断减少误差。假设GBDT由两颗树构成,如下图中的 树1 和 树2 :

对于有三个叶节点的树1而言,按照红色箭头的路径,落在了第2个叶子节点上,则树1输出的编码为[0, 1, 0]。同理,对于树2而言,其输出的编码为 [1, 0]。将所有树的编码拼接起来就得到了 [0, 1, 0, 1, 0],此编码就可以作为该样本的新特征使用。最后将得到的[0, 1, 0, 1, 0] 作为特征输入到LR模型,完成CTR的预估。

代码实现

代码将LightGBM作为GBDT使用,LR模型则使用Sklearn内置的方法。 假设使用32棵树,且每棵树有64个叶节点,则训练这样的模型代码如下:

def gbdt_lr_predict(data,category_feature,continuous_feature):# 类别特征one-hot编码for col in category_feature:onehot_feats = pd.get_dummies(data[col],prefix=col)data.drop([col],axis=1,inplace=True)data = pd.concat([data,onehot_feats],axis=1)train = data[data['Label']!=-1]target = train.pop('Label')test = data[data['Label']==-1]test.drop(['Label'],axis=1,inplace=True)#划分数据集x_train,x_val,y_train,y_val = train_test_split(train,target,test_size=0.2,random_state=2020)n_estimators=32num_leaves = 64# 开始训练gbdt,使用32棵树,每棵树64个叶节点model = lgb.LGBMRegressor(objective="binary",subsample=0.8,      # 随机样本min_child_weight=0.5,# 孩子节点中最小的样本权重和colsample_bytree=0.7, # 特征随机采样的比例num_leaves=num_leaves, # 叶子的个数learning_rate=0.05,n_estimators=n_estimators,random_state=2020)model.fit(x_train,y_train,eval_set=[(x_train,y_train),(x_val,y_val)],eval_names=['train','val'],eval_metric='binary_logloss',verbose=0)# 得到每一条数据每棵树的哪个叶子节点上gbdt_feats_train = model.predict(train,pred_leaf=True)# 打印结果的shapeprint(gbdt_feats_train.shape)# 打印前5个数据print(gbdt_feats_train[:5])# 同样获得测试集的叶节点索引gbdt_feats_test = model.predict(test,pred_leaf=True)# 将32棵树的叶节点序号构造成DataFrame,方便后续进行one-hotgbdt_feats_name=['gbdt_leaf_'+str(i) for i in range(n_estimators)]df_train_gbdt_feats = pd.DataFrame(gbdt_feats_train,columns=gbdt_feats_name)df_test_gbdt_feats = pd.DataFrame(gbdt_feats_test,columns=gbdt_feats_name)train_len = df_train_gbdt_feats.shape[0]data = pd.concat([df_train_gbdt_feats,df_test_gbdt_feats])# 对每棵树的叶节点进行one-hotfor col in gbdt_feats_name:onehot_feats = pd.get_dummies(data[col],prefix=col)data.drop([col],axis=1,inplace=True)data = pd.concat([data,onehot_feats],axis=1)train = data[:train_len]test = data[train_len:]# 划分LR训练集、验证集x_train,x_val,y_train,y_val= train_test_split(train,target,test_size=0.3,random_state=2018)# 开始训练lrlr = LogisticRegression()lr.fit(x_train,y_train)tr_logloss = log_loss(y_train,lr.predict_proba(x_train)[:,1])print("tr_logloss",tr_logloss)val_logloss = log_loss(y_val,lr.predict_proba(x_val)[:,1])print("val_logloss", val_logloss)# 对测试集预测y_pred = lr.predict_proba(test)[:,1]

参考文章:

广告点击率(CTR)预测经典模型 GBDT + LR 理解与实践(附数据 + 代码)_VariableX的博客-CSDN博客

推荐系统遇上深度学习(十)–GBDT+LR融合方案实战

CTR预测经典模型GBDT+LR相关推荐

  1. 广告点击率(CTR)预测经典模型 GBDT + LR 理解与实践(附数据 + 代码)

    CTR 系列文章: 广告点击率(CTR)预测经典模型 GBDT + LR 理解与实践(附数据 + 代码) CTR经典模型串讲:FM / FFM / 双线性 FFM 相关推导与理解 CTR深度学习模型之 ...

  2. 推荐系统 | 基础推荐模型 | GBDT+LR模型 | Python实现

    基础推荐模型--传送门: 推荐系统 | 基础推荐模型 | 协同过滤 | UserCF与ItemCF的Python实现及优化 推荐系统 | 基础推荐模型 | 矩阵分解模型 | 隐语义模型 | PyTor ...

  3. Facebook如何预测广告点击:剖析经典论文GBDT+LR

    作者 | 梁唐 来源 | TechFlow 今天我们来剖析一篇经典的论文:Practial Lessons from Predicting Clicks on Ads at Facebook.从这篇p ...

  4. CTR经典模型串讲:FM / FFM / 双线性 FFM 相关推导与理解

    CTR 系列文章: 广告点击率(CTR)预测经典模型 GBDT + LR 理解与实践(附数据 + 代码) CTR经典模型串讲:FM / FFM / 双线性 FFM 相关推导与理解 CTR深度学习模型之 ...

  5. CTR深度学习模型之 DeepFM 模型解读

    CTR 系列文章: 广告点击率(CTR)预测经典模型 GBDT + LR 理解与实践(附数据 + 代码) CTR经典模型串讲:FM / FFM / 双线性 FFM 相关推导与理解 CTR深度学习模型之 ...

  6. 推荐系统组队学习——GBDT+LR

    文章目录 一.逻辑回归模型 二.GBDT模型 三.GBDT+LR模型 四.编程实践 一.逻辑回归模型 逻辑回归是在线性回归的基础上加了一个 Sigmoid 函数(非线形)映射,使得逻辑回归成为了一个优 ...

  7. 传统推荐算法Facebook的GBDT+LR模型深入理解

    目标: 深入理解Facebook 2014年提出的的GBDT+LR模型. CSDN上泛泛而谈的文章很多,真正讲解透彻的没几篇.争取我这篇能讲解透彻. 今晚又想了许久,想通了一些原理.也分享出来. 算法 ...

  8. Facebook的GBDT+LR模型python代码实现

    承接上篇讲解,本文代码,讲解看上篇 目标:GBDT+LR模型 步骤:GBDT+OneHot+LR 测试数据:iris 代码: 结果比较:与直接GBDT模型的比较 目标:GBDT+LR模型 实现GBDT ...

  9. 《推荐系统笔记(十)》CTR预估以及一般算法介绍(GBDT+LR)

    前言 CTR预估是推荐系统中重要的问题,根据历史数据,我们需要预测用户是否点击.CTR预估同样可以运用到广告中,预测广告的点击率等. CTR数据形式 CTR预估问题的数据形式一般是这样的: 列名:特征 ...

最新文章

  1. php显示服务器文件,php-无法显示从新服务器下载文件的进度(在以前的服务器上工作)...
  2. 使用Vue.js进行数据绑定以及父子组件传值
  3. python syslog服务器_Python3+syslog使用及相关说明
  4. yii2 设置的缓存无效,返回false,不存在
  5. 定义跳转插件_虚幻插件Review:Logic Driver Pro 终极状态机插件
  6. 百度NeurIPS全球顶会冠军团队,带你7日从零实践强化学习
  7. Linux学习笔记--文件夹结构
  8. 什么是oracle的临时表??
  9. 正则翻译工具_PythonBasics 中文系列教程 · 翻译完成
  10. IIS7和IIS8环境下 ThinkPHP专用URL Rewrite伪静态规则
  11. spring的定时调度
  12. NEYC 2017 游记
  13. android4.2实现pwm,Android平台下AOA协议的PWM信号控制系统
  14. 小米手机线刷USB3.0的问题
  15. 【c++NOIP2015 普及组】 推销员
  16. IPQ6000 OpenWrt编译
  17. 骗子QQ微信在线查询系统网站源码
  18. Android攻城狮组件篇—BroadcastReceiver
  19. 吴军亲述编程生涯:不用低效率的算法做事情
  20. Uboot中的MIPI DSI clk分析

热门文章

  1. weex-修改style的几种方法
  2. 正则表达式校验身份证号、邮箱和手机号
  3. 编程程序,提示用户输入两个点(x1,y1)、(x2,y2),然后显示两点之间的距离。使用Math.pow()
  4. Python网络编程 之 UDP和TCP
  5. 第十六届全国大学生智能车竞赛全国总决赛名单-公示版
  6. Android自定义弹窗
  7. 教你无损去除图片“水印”
  8. mysql的mvcc如何解决幻读_MySQL InnoDB MVCC 能否完全解决幻读?
  9. 第十二Leetcode每日刷题——524. 通过删除字母匹配到字典里最长单词
  10. 哈工大-2009 孟婆汤