本站内容均来自兴趣收集,如不慎侵害的您的相关权益,请留言告知,我们将尽快删除.谢谢.
背景
写这篇文章主要是记录本人在将xgboost模型转向dnn模型中碰到同样的特征输入,dnn效果不如xgboost的改进过程中在特征处理这一块的实践经验,给大家分享,希望能交流探讨。其中dnn用的din结构,评价指标为gauc。
在之前文章丹丹:读论文《Applying Deep Learning To Airbnb Search》
中看到了airbnb在转向dnn过程中的实践经验和总结,里面对特征归一化有两个措施
- 如果特征分布符合正态分布,则用0-1正态分布归一化
- 如果特征分布符合近幂律分布,则采用\frac{1+val}{1+median}
- 进行变换。
本人实践
我的特征是直接沿用了之前xgboost所用的特征,因此全部都是稠密特征,由于我做的是电商行业ctr模型,主要特征为以下几块:
- 用户基本特征
- 用户各时间维度下聚合点击率特征
- 商品基本信息
- 商品各时间维度下聚合被点击率特征
- 上下文特征(主要是用户,商品在各渠道下的时间维度聚合点击率特征)
- 商品对应的店铺特征
- 用户商品的属性match特征
- 用户在商品各属性维度的交叉点击率特征
- 用户历史行为商品与候选商品相似度集合特征
以上特征均为稠密特征,且特征存在缺失值。对于缺失值,之前在xgboost的时候由于认为缺失值存在其特殊含义,比如近30天点击率存在缺失值表示用户30天内没有过曝光,与30天有曝光无点击的0值含义是有差别的,因此处理的时候采用的是赋值-1,与正常非缺失值作为区分。
特征处理方案如下:
序号 | 归一化方案 | 缺失值处理 | 效果 |
---|---|---|---|
1 | 最大最小值 | 赋0 | 0.6541 |
2 | 最大最小值 | 缺失值赋均值 | 0.6528 |
3 | 0-1正态分布归一化 | 缺失值赋均值 | 0.6542 |
4 | 特征分段做embedding | 0,代码中mask掉 | 0.6576 |
5 | 近幂律分布 | 缺失值赋中值 | 0.6456 |
在我的数据上,直接用近幂律分布效果特别差,尽管我的大部分特征看上去都不是正态分布而是近幂律分布,因为我的稠密特征量级差别很大,其中点击率特征其范围大部分在0.1以内,而数量类特征,如商品的访问用户量,数量级远超过0.1,在近幂律分布校准后,两者的量级相差依旧很大,导致模型效果非常差。
另外,缺失值较多的特征,或者缺失值有明显含义,依旧看做稠密特征对缺失值赋值校准,效果会比较差,做分段embedding,缺失值单独赋值的效果会更好。
另一个是商品的embedding,目前做hash编码的比较多,因为操作简单,但是效果没有直接映射好。
Be First to Comment