Press "Enter" to skip to content

dnn实践-特征处理

本站内容均来自兴趣收集,如不慎侵害的您的相关权益,请留言告知,我们将尽快删除.谢谢.

背景

 

写这篇文章主要是记录本人在将xgboost模型转向dnn模型中碰到同样的特征输入,dnn效果不如xgboost的改进过程中在特征处理这一块的实践经验,给大家分享,希望能交流探讨。其中dnn用的din结构,评价指标为gauc。

 

在之前文章丹丹:读论文《Applying Deep Learning To Airbnb Search》
中看到了airbnb在转向dnn过程中的实践经验和总结,里面对特征归一化有两个措施

 

 

    1. 如果特征分布符合正态分布,则用0-1正态分布归一化

 

    1. 如果特征分布符合近幂律分布,则采用\frac{1+val}{1+median}

 

    1. 进行变换。

 

 

本人实践

 

我的特征是直接沿用了之前xgboost所用的特征,因此全部都是稠密特征,由于我做的是电商行业ctr模型,主要特征为以下几块:

 

 

    1. 用户基本特征

 

    1. 用户各时间维度下聚合点击率特征

 

    1. 商品基本信息

 

    1. 商品各时间维度下聚合被点击率特征

 

    1. 上下文特征(主要是用户,商品在各渠道下的时间维度聚合点击率特征)

 

    1. 商品对应的店铺特征

 

    1. 用户商品的属性match特征

 

    1. 用户在商品各属性维度的交叉点击率特征

 

    1. 用户历史行为商品与候选商品相似度集合特征

 

 

以上特征均为稠密特征,且特征存在缺失值。对于缺失值,之前在xgboost的时候由于认为缺失值存在其特殊含义,比如近30天点击率存在缺失值表示用户30天内没有过曝光,与30天有曝光无点击的0值含义是有差别的,因此处理的时候采用的是赋值-1,与正常非缺失值作为区分。

 

特征处理方案如下:

序号归一化方案缺失值处理效果
1最大最小值赋00.6541
2最大最小值缺失值赋均值0.6528
30-1正态分布归一化缺失值赋均值0.6542
4特征分段做embedding0,代码中mask掉0.6576
5近幂律分布缺失值赋中值0.6456

 

在我的数据上,直接用近幂律分布效果特别差,尽管我的大部分特征看上去都不是正态分布而是近幂律分布,因为我的稠密特征量级差别很大,其中点击率特征其范围大部分在0.1以内,而数量类特征,如商品的访问用户量,数量级远超过0.1,在近幂律分布校准后,两者的量级相差依旧很大,导致模型效果非常差。

 

另外,缺失值较多的特征,或者缺失值有明显含义,依旧看做稠密特征对缺失值赋值校准,效果会比较差,做分段embedding,缺失值单独赋值的效果会更好。

 

另一个是商品的embedding,目前做hash编码的比较多,因为操作简单,但是效果没有直接映射好。

Be First to Comment

发表回复

您的电子邮箱地址不会被公开。