↑↑↑关注后"星标"炼丹笔记
炼丹笔记·知识点
作者:炼丹笔记
在实践中,特征工程目前依然是建模过程中最为核心的一块,也是提升最快最简单的部分;有些公司的搜索推荐团队只使用了embedding相关的信息,并希望通过embedding的交叉或者序列等信息建模得到最终的推荐结果,并没有加入非常多人为构建的特征。
但在很多的场景下,特征工程还是非常重要的。尤其是在有好几年数据积累的场景中,数据量是非常大的,甚至可以上PB级别,在建模的过程中基本上是不大可能把所有的数据全部使用上,我们一般会选择使用最新的数据,但为了尽可能不浪费老的数据信息,会选择通过特征工程的方式从老的数据集中提取尽可能多的信息。为模型带来提升,而在我们的实践中,也发现,特征工程带来的提升还是非常大的。
特征工程技巧
01
特征归一化
为了消除数据特征之间的量纲影响,让不同特征之间具有可比性,需要对特征进行归一化处理。常用的的归一化方法有Max-Min归一化、Z-Score归一化。
在实际应用中,特征归一化并不是万能的,但线性回归、逻辑回归、SVM、NN等模型需要通过梯度下降发求解的模型通常是需要进行归一化的。
02
类型特征
类别特征常见的策处理略:
03
文本特征
详细的文本特征可以参考炼丹笔记往期干货《数据挖掘20大文本特征》。
推荐、搜索、广告特征工程
上面内容更多的是一些基础的特征处理技巧。很多较为传统,如果转化业务中该如何构建特征工程呢?此处我们描述一套特征框架,过多的细节不阐述,毕竟是很多大佬打磨了很多从非常多的实践中实践得到的,而且也不一定各种业务都会100%有效。
首先我们建模的目的是为了预估:
其中,
找到所有商品中最有可能被购买的那一件,然后曝光给用户。从上面的定义中,我们可以发现,特征至少可以划分为下面的几块。
炼
2.1 用户相关的特征
这块特征实在是有些多,还有一些专门做用户画像的组。包含的特征有很多:
这块特征非常多,很多组都有一套自己的特征组。
炼
2.2 商品相关的特征
和用户的特征类似,商品的特征也是海量的:
这块特征非常多,很多组都有一套自己的特征组。
炼
2.3 Query相关的特征
这块在搜索相关的竞赛中,也是非常多的,参见阿里妈妈IJCAI2018年的竞赛:
这块的特征和用户以及商品是类似的,也是自成一套。
炼
2.4 上下文特征
炼
2.5 交叉特征
特征交叉这块是探讨最多的,因为交叉信息实在是太多了,从很多大佬的分享以及相关的数据竞赛最后的分享方案中,我们也发现:短短的几个原始字段在进行交叉之后都可以得到成百上千的特征,更别说是在工业界了,工业界的字段都有几百个,甚至会有上千个,所以这块要是单纯的做特征交叉,可以枚举几个月甚至几年。
从kaggle的诸多特征专家写的write-ups来看,特征又可以分为:二阶的交叉,三阶的交叉,四阶的交叉......
这么做下去,几乎是一个天文数字,再加上这么大的数据量,我们对每个新构建的特征进行验证,耗费的资源也将会是一个天文数字,而且存储资源也是无法接受的,举个最简单的例子,我们做用户和商品的二阶交叉特征,
大家都知道这些特征是非常有用的,但是直接做交叉的代价又是巨大的,怎么办呢?我们可以使用下面的两个技巧来进行处理。
1.Top截断:
这几乎在所有的大数据竞赛中都有提到,例如IJCAI18年的竞赛就是,在我们的数据量非常大的时候,我们会选择保留排序之后TopN的信息,例如:
2.转变为分布表示:
该技巧也主要来源于推荐相关的竞赛,以及AAA21年最新的竞赛分享中,大致的思路是将原先的直接统计user+item的信息转而去统计其它的特征:
该方法被称之为用商品的点击/购买分布来表示用户。类似的,商品也可以用用户来表示,即。
这种用交叉信息的一侧主体的统计信息来表示另外一侧主体的策略也是极其方便的一种策略。
炼
2.6 其它新技术带来的特征
这块的特征如果从技术的角度来看都是可以被包含到上面的几大类中的,但是因为这些特征是通过最新的一些硬件或者其它的技术发展带来的,例如边缘计算等,此处我们将其单独列举出来作为一节。
最典型的一些特征就是阿里巴巴EdgeRec文章中所列举的:
炼
2.7 上游特征
这个在KDD20的竞赛中有看到,大致就是利用模型上游的很多统计或者其它模型输出的一些特征,每个公司产出的可能不一样,此处不做过多描述。
炼
2.8 实验小结
上面的特征工程只是冰山一角,因为随着业务相关的数据集的扩充,肯定也会涉及到非常多其它相关的特征。比如与图片相关的特征,用户购买商品之后对于商品的文字评价等等诸多的信息,这些都可以作为商品或者用户商品相关的信息加入模型。
整体来说,特征作为模型的输入能带来非常大的帮助,所以还是非常重要的,我们通过特征工程的方式能在原先的基础上带来非常大的提升。