前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >5行代码提升GBDT,提升巨大!

5行代码提升GBDT,提升巨大!

作者头像
算法进阶
发布2022-06-02 11:19:31
1700
发布2022-06-02 11:19:31
举报
文章被收录于专栏:算法进阶

以下文章来源于包包算法笔记 ,作者包包闭关修炼

如果你打过kaggle应该一定都知道,大家心照不宣的表格数据竞赛的第一tricks:

他就是category特征的频度统计了,你也可以称为value counts等,用pandas实现起来也很简单。我拿个简单的3列表格,上五行代码示例。

代码语言:javascript
复制
import pandas as pddf = pd.DataFrame({'区域' : ['西安', '太原', '西安', '太原', '郑州', '太原'], 
                  '10月份销售' : ['0.477468', '0.195046', '0.015964', '0.259654', '0.856412', '0.259644'],
                  '9月份销售' : ['0.347705', '0.151220', '0.895599', '0236547', '0.569841', '0.254784']})
#统计
df_counts = df['区域'].value_counts().reset_index()
df_counts.columns = ['区域','区域频度统计']
df = df.merge(df_counts,on =['区域'],how='left')

你看到这了,可能说,就这?就这?

如果就这,肯定不是包大人的作风,授人以鱼不如授人以渔,我们一起来想想,为什么这玩意,荣登一把梭的第一把

第一层

除了老调重弹的决策树的模型特性,我们今天再从数据的角度思考一下。

工业界category类的数据,大部分都是长尾分布的,你可以想象下诸如地区,职业,商品品类等。低频部分,数量少,置信度低,容易过拟合。

那么第一个优点就呼之欲出了,你可以认为,频度统计是一种带智慧的哈希编码方式,他对所有的低频都一视同仁。

就跟我们在初中时候,班里男生各种与众不同的发型,全都让班主任剃成了5mm卡尺,军训头。教导主任根据发型,毫不费力就能知道,以前这个学生挺有个性的。

这样低频,置信度低的东西,他们的共性也被挖掘出来了。这就是特征工程神奇的地方。

好了,刚才我们讲了频度统计对于低频的归一化作用,下面我们进入第二层。

第二层

离线数据集是真实数据分布的采样。在工业界,频度在不同场景下有着不同的含义。

最基本的,在展现日志表对广告id 进行的频度统计就是广告的曝光量,在访问日志表对页面id 进行统计就是页面的pv,对用户id进行频度统计就是页面的uv。

这些不同含义的频度统计量,他是有场景含义的,对应在背后就存在一定的规律。

比如在风控场景,一个user id的广告点击特别高,就得小心他是不是点击工厂。一个用户在一个时间段,支付了N笔不同的外卖,要小心他是不是在刷单。

刚才讲了他在不同场景下的业务含义和目标一致关联性,下面我们进入第三层。

第三层

第三层,对应着广告点击率预估里面一个术语,特征交叉。

举个例子,特征交叉在生活中无处不在,比如阿里码农,就是工作地和工种的交叉,工地打灰,也是工作地和工种的交叉,大厂除了码农还有leader,工地除了打灰还有监工,他们的含义并不相同。

交叉是有代价的,比如工地也有写代码的,但不是太多,交叉会让整个分布更加的长尾,对应着就更难学习了。

似乎,又带来了第一个问题,嗯没事,我们的频度统计把刺头又干掉了,美滋滋。特征交叉对应着第二层,又会产生更丰富的含义。每一个落地页的pv uv就出来了,每个时段的pv和uv也出来了。

注意:以上一把梭哈适用在离线数据集,train和test之间无bias场景。其他情况,想必大家也知道怎么处理了~

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2022-01-20,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 算法进阶 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档