在实践中,特征工程目前依然是建模过程中最为核心的一块,也是提升最快最简单的部分;有些公司的搜索推荐团队只使用了embedding相关的信息,并希望通过embedding的交叉或者序列等信息建模得到最终的推荐结果,并没有加入非常多人为构建的特征。

但在很多的场景下,特征工程还是非常重要的。尤其是在有好几年数据积累的场景中,数据量是非常大的,甚至可以上PB级别,在建模的过程中基本上是不大可能把所有的数据全部使用上,我们一般会选择使用最新的数据,但为了尽可能不浪费老的数据信息,会选择通过特征工程的方式从老的数据集中提取尽可能多的信息。为模型带来提升,而在我们的实践中,也发现,特征工程带来的提升还是非常大的。

v2-616c2775b4d6a93ce95cd82589a6e373_b.jpg

为了消除数据特征之间的量纲影响,让不同特征之间具有可比性,需要对特征进行归一化处理。常用的的归一化方法有Max-Min归一化、Z-Score归一化。

在实际应用中,特征归一化并不是万能的,但线性回归、逻辑回归、SVM、NN等模型需要通过梯度下降发求解的模型通常是需要进行归一化的。

v2-7bf80f03efb87746864bb8b172492139_b.jpg

类别特征常见的策处理略:

  • Target Encoding
  • Count Encoding
  • Categorifying
v2-c476241552842e5241df7cabf9e81dfc_b.jpg

详细的文本特征可以参考炼丹笔记往期干货《数据挖掘20大文本特征》。

  • expansion编码
  • consolidation编码
  • 文本的长度特征
  • 标点符号特征
  • 特殊词汇特征
  • 词频特征
  • TF-IDF特征
  • LDA特征
v2-575587d48f2896826e0f2f238ef78b4c_b.jpg

上面内容更多的是一些基础的特征处理技巧。很多较为传统,如果转化业务中该如何构建特征工程呢?此处我们描述一套特征框架,过多的细节不阐述,毕竟是很多大佬打磨了很多从非常多的实践中实践得到的,而且也不一定各种业务都会100%有效。

首先我们建模的目的是为了预估:

v2-0da21a0e6ac9d1145de491f38a639bef_b.jpg

其中,

  • U 是用户侧的特征;
  • I 是商品侧的特征;
  • Context 是上下文相关的特征,例如时间,访问使用的app等;
  • Q 是query相关的特征(在搜索问题中较为常见)
  • pay = 1 表示用户支付;
  • M 是候选商品的个数;

找到所有商品中最有可能被购买的那一件,然后曝光给用户。从上面的定义中,我们可以发现,特征至少可以划分为下面的几块。

v2-d6e1dc42d74ce3a1422d7c5e9849bfa6_b.jpg

这块特征实在是有些多,还有一些专门做用户画像的组。包含的特征有很多:

  • 用户的固定属性特征,比如:用户的性别、年龄、身高其它信息;
  • 用户的历史统计特征,比如:过去某段时间的购买率、点击率、消费次数、平均每次消费额、平均消费间隔、最近一次消费的时间等等。
  • 用户的其它特征,比如:喜好特征, 实时行为建模,更细粒度的对当前请求下的兴趣刻画与描述等等;

这块特征非常多,很多组都有一套自己的特征组。

v2-868ea19b083ce4119f42a622f192c8d3_b.jpg

和用户的特征类似,商品的特征也是海量的:

  • 商品的固定属性特征,比如:商品的上架时间、商品的体积、商品的价格、是否是当季商品、是否促销、是否有优惠活动等等;
  • 商品的历史统计特征,比如:商品的历史点击率、商品的曝光次数、商品的加购率、商品的购买率、商品上次被购买的时间等等;
  • 商品的其它特征,比如:商品是否有代言,代言人,代言人的粉丝情况等等;

这块特征非常多,很多组都有一套自己的特征组。

v2-576d76316019ba091cdf382a18e58a14_b.jpg

这块在搜索相关的竞赛中,也是非常多的,参见阿里妈妈IJCAI2018年的竞赛:

  • Query的固定属性特征,比如:Query的embedding,Query中关键词的统计信息;
  • Query的历史统计特征,比如:Query的历史出现次数,Query的历史点击率,购买率等等;
  • Query的其它特征:近义词的次数等;

这块的特征和用户以及商品是类似的,也是自成一套。

v2-4877a477d867d6affd0c970cead365e5_b.jpg
  • 地点、时间、网络信号形式、使用的app等信息;
v2-8c538e0f04c660f3cfa8771263057fc6_b.jpg

特征交叉这块是探讨最多的,因为交叉信息实在是太多了,从很多大佬的分享以及相关的数据竞赛最后的分享方案中,我们也发现:短短的几个原始字段在进行交叉之后都可以得到成百上千的特征,更别说是在工业界了,工业界的字段都有几百个,甚至会有上千个,所以这块要是单纯的做特征交叉,可以枚举几个月甚至几年。

从kaggle的诸多特征专家写的write-ups来看,特征又可以分为:二阶的交叉,三阶的交叉,四阶的交叉......

这么做下去,几乎是一个天文数字,再加上这么大的数据量,我们对每个新构建的特征进行验证,耗费的资源也将会是一个天文数字,而且存储资源也是无法接受的,举个最简单的例子,我们做用户和商品的二阶交叉特征,

  • 在很多朋友,用户都是上千万甚至是上亿的,商品的个数更不用说了,最少也是上百万的,所以简单的交叉可能会带来上亿*上百万的个数,当然实践中肯定没这么多,如果从存储的代价角度看,这将会是一个非常巨大的负担。
  • 从上面的角度来看,做用户和Query和商品的三阶交叉将会是一种巨大的负担。

大家都知道这些特征是非常有用的,但是直接做交叉的代价又是巨大的,怎么办呢?我们可以使用下面的两个技巧来进行处理。

1.Top截断

这几乎在所有的大数据竞赛中都有提到,例如IJCAI18年的竞赛就是,在我们的数据量非常大的时候,我们会选择保留排序之后TopN的信息,例如:

  • 保留用户最常购买的TopN个Item的点击率,购买率等等;
  • 保留用户最常访问的TopN个Query的点击率,购买率等等;
  • 保留Query下最常购买的TopN个Item的点击率,购买率等等;
  • ...

2.转变为分布表示

该技巧也主要来源于推荐相关的竞赛,以及AAA21年最新的竞赛分享中,大致的思路是将原先的直接统计user+item的信息转而去统计其它的特征:

  • 先统计商品的历史点击率,然后拼接到商品信息中,当做商品的统计信息,然后再统计用户关于商品的这些统计信息的统计特征。

该方法被称之为用商品的点击/购买分布来表示用户。类似的,商品也可以用用户来表示,即。

  • 先统计用户的历史点击率,然后拼接到用户信息中,当做用户的统计信息,然后再统计商品关于用户的这些统计信息的统计特征。

这种用交叉信息的一侧主体的统计信息来表示另外一侧主体的策略也是极其方便的一种策略。

v2-1e6a8d5c9ae52cab0c64a4b49ee69f74_b.jpg

这块的特征如果从技术的角度来看都是可以被包含到上面的几大类中的,但是因为这些特征是通过最新的一些硬件或者其它的技术发展带来的,例如边缘计算等,此处我们将其单独列举出来作为一节。

最典型的一些特征就是阿里巴巴EdgeRec文章中所列举的:

v2-7bc96787e630913ebdcfcf2334dec7dc_b.jpg
v2-c2173f0a2404f6fc0c86ce10f6cbde84_b.jpg

这个在KDD20的竞赛中有看到,大致就是利用模型上游的很多统计或者其它模型输出的一些特征,每个公司产出的可能不一样,此处不做过多描述。

v2-8d0634df5c8f4c64e6cd91de6c8a3f92_b.jpg

上面的特征工程只是冰山一角,因为随着业务相关的数据集的扩充,肯定也会涉及到非常多其它相关的特征。比如与图片相关的特征,用户购买商品之后对于商品的文字评价等等诸多的信息,这些都可以作为商品或者用户商品相关的信息加入模型。

整体来说,特征作为模型的输入能带来非常大的帮助,所以还是非常重要的,我们通过特征工程的方式能在原先的基础上带来非常大的提升。

v2-b7127426765efd6bdcbbdc260ce8dfd9_b.jpg

炼丹知识点:模型评估里的陷阱

v2-c1d32df49cc567bef818ad321f6c2249_b.jpg

那些决定模型上限的操作相关推荐

  1. 【机器学习】那些决定模型上限的操作

    作者:炼丹笔记 在实践中,特征工程目前依然是建模过程中最为核心的一块,也是提升最快最简单的部分:有些公司的搜索推荐团队只使用了embedding相关的信息,并希望通过embedding的交叉或者序列等 ...

  2. 【C 语言】字符串模型 ( 字符串翻转模型 | 借助 递归函数操作 逆序字符串操作 | 引入线程安全概念 )

    文章目录 一.引入线程安全概念 二.完整代码示例 一.引入线程安全概念 在上一篇博客 [C 语言]字符串模型 ( 字符串翻转模型 | 借助 递归函数操作 逆序字符串操作 | strncat 函数 ) ...

  3. 【C 语言】字符串模型 ( 字符串翻转模型 | 借助 递归函数操作 逆序字符串操作 | strncat 函数 )

    文章目录 一.strncat 字符串连接函数 二.借助 递归函数操作 逆序字符串操作 三.完整代码示例 一.strncat 字符串连接函数 strncat 函数 : 将 const char *src ...

  4. 数据库原理—关系模型的数据操作(八)

    数据库原理-关系模型的数据操作(八)

  5. spss三次指数平滑_15.2.2 指数平滑模型的SPSS操作(1)

    15.2.2  指数平滑模型的SPSS操作(1) 在SPSS Statistics数据编辑器窗口中建立指数平滑模型的具体操作步骤如下. 1)在菜单栏中选择"分析"|"预测 ...

  6. 空间面板回归模型(stata操作)

    空间面板回归模型(stata操作) 一.莫兰检验 此检验主要检验所研究的变量(或被解释变量)是否存在空间依赖性.首先利用各省份地区的位置坐标使用stata构造空间权重矩阵(距离矩阵),然后导入stat ...

  7. 线性空间计量模型与stata操作

    线性空间计量模型与stata操作 文章目录 线性空间计量模型与stata操作 @[toc] 1 一般空间计量模型 1.1 空间自回归模型(SAR) 1.2 空间杜宾模型(SDM) 1.3 空间自相关模 ...

  8. 3dmax对模型进行单独操作如何只显示当前模型

    3dmax对模型进行单独操作如何只显示当前模型 3dmax对模型进行单独操作如何只显示当前模型?我们在平时使用3DMAX建模的时候,场景一大就有很多的模型,我们想对一个模型进行操作修改的时候,旁边的模 ...

  9. 技能学习:学习使用php(tp6框架) + vue.js,开发前端全栈网站-3.路由、模型与数据库操作

    技能学习:学习使用php(tp6框架) + vue.js,开发前端全栈网站-3.路由.模型与数据库操作 技能学习:学习使用php(tp6框架) + vue.js,开发前端全栈网站-1.工具和本地环境 ...

最新文章

  1. 前端要完!人工智能已经能实现自动编写 HTML 和 CSS
  2. 笔记-项目采购管理-索赔的处理
  3. li 字多出了省略号_文字溢出自动显示省略号css方法 -
  4. Visual Studio 2019 16.1发布,更快更高效
  5. 【费用流】摘取作物(jozj 3447)
  6. Chrome跨域问题
  7. Air Data System
  8. python核心编程五——映像和集合
  9. [Big Data - Kafka] Kafka设计解析(四):Kafka Consumer解析
  10. 韦东山和正点原子IMX6ULL开发版的区别
  11. ztree 实例地址
  12. 在idea配置jetty和创建(包、文件)javaWeb以及Servlet简单实现
  13. 从30天到1天,专业视频制作背后的技术探索之路
  14. 国土空间用途管制制度构建的思考
  15. MPLS排错练习题分享
  16. [半监督学习] ReMixMatch: Semi-Supervised Learning with Distribution Alignment and Augmentation Anchoring
  17. 交换机之三层交换原理
  18. springboot+Vue饭店点菜点餐管理系统
  19. Java多线程 第三章 等待/通知(wait/notify)机制
  20. C的free的参数是空指针的问题

热门文章

  1. 《浪潮之巅》读书笔记(中)
  2. 最大化平均值 (二分搜索法)
  3. Java时间处理类SimpleDateFormat的parse和format方法的正确使用
  4. 利用ueditor保存到mysql数据库时出现乱码
  5. Android Paint、Path详解
  6. Quartz.Net 学习之路02 初探Quartz.Net
  7. Oxite移植到ASP.NET MVC2 BETA 笔记(关于Html.RenderPartialFromSkin)
  8. 基于RBAC模型的通用权限管理系统的设计(数据模型)的扩展
  9. php 命令执行脚本文件路径,php命令行(cli)下执行PHP脚本文件的相对路径的问题解决方法...
  10. prim算法求最小生成树_克鲁斯卡尔算法(Kruskal算法)求最小生成树