在介绍排序算法之前,我们先来谈一谈召回与排序模型的通用基础建设–特征工程。早期如LR、树模型等排序算法,对于特征十分依赖,尽管现在深度学习所谓端到端的训练大行其道,但特征仍然有着独特的作用:特征的选取,特征的处理方式,组合方式,依然会深刻影响到模型的性能,特征工程可谓是模型训练的水之源、木之本,任何一个好的模型,一定是建构在丰富而显著的特征之上。

特征工程简介

什么是特征工程

特征工程的定义,借用维基百科上的说法:

Feature engineering or feature extraction or feature discovery is the process of using domain knowledge to extract features (characteristics, properties, attributes) from raw data. The motivation is to use these extra features to improve the quality of results from a machine learning process, compared with supplying only the raw data to the machine learning process.

笔者的理解:特征工程就是使用领域知识对原始数据进行处理,将其加工成特征,使得机器学习的结果得到质量上的提升。

特征工程是技术中的艺术,如果把机器学习比作做饭,原始数据就好像原始食材,没法直接放锅里去煮,特征工程就是备菜的过程。清洗、加工、切菜、腌制等操作决定了做出的菜是否美味。而这个加工的过程,是切段还是切丝,是盐卤还是酱腌,就看厨师心中之丘壑了。

特征工程的意义

美国计算机科学家,来自Google的Peter Norvig说过两句名言:我们不是算法很牛,我们只是数据超多;超多的数据可以打败优秀的算法,但是好的数据会更胜过超多的数据。这两句话分别说明了海量数据与特征工程的重要性。

好特征的优点在于:使用简单的模型,也能取得非常好的性能。简单的模型意味着易于理解和维护,且线上响应速度也更快。某些业务(如风控)要求模型具有可解释性,这种情况下,好特征在整个模型中所起到的作用是举足轻重的。可以说模型是否表现优异,基本取决于特征的区分能力。

即使对于深度学习盛行的推荐系统,如果认为可以不关注特征,只是把模型当做一个黑盒,胡乱塞入大量特征,不知道效果为什么好或为什么坏,那么最后就会让人经常怀疑人生。实际上,无论使用传统机器学习还是深度学习,数据敏感度都是非常重要的,对于数据要有充分的理解,重视case分析,明白使用的数据是否适合,才能够更好地构建模型。

特征工程的子领域

特征工程的整个流程包含了几个部分:特征处理、特征选择、降维等。我们来分别看一看。

特征处理

特征处理包含缺失值处理、无量纲化、特征编码、统计变换等方面。

  1. 缺失值处理:在实践场景中,存在由于权限或其他原因无法获取某些数据,或数据在处理过程中发生丢失的情况,因此,数据中经常会含有缺失值。如果缺失值超过80%,则应舍弃该特征。一般情况下,缺失值通常使用“NaN”来表示,由于该值不是数值,在对数据进行整体处理时(如加和或者取平均),会遭遇很多不便。一般常用“0”、平均值、众数或中位数来填充缺失值。但后三者意味着改变了数据分布,当计算新生成的数据的平均值时,新的平均值与原平均值会发生较大差异。对缺失值的填充方法,要基于对业务数据的理解进行。
  2. 数据无量纲化:对于连续型数值,不同的数据规格不同,如常见年龄在10-80之间分布,而某商品的浏览次数可能在0-10000之间分布,特征的量纲不统一,就无法放到一起比较,除了树模型,大部分模型不能很好地处理量纲不同的数据,因此需要对数据进行无量纲化处理。无量纲化的方式包括:
    1. 归一化:其公式为 x ′ = x − m i n ( x ) m a x ( x ) − m i n ( x ) x' = \frac{x - min(x)}{max(x) - min(x)} x=max(x)min(x)xmin(x),它将原数值缩放到[0,1]之间。归一化的稳定性不够好,因为最大值最小值不稳定,还可能是异常点,从而使得归一化后的数据分布在一个狭窄的区间内。

    2. 标准化:通常假设数据符合高斯分布,采用z-score公式对数据进行标准化: z i ~ = x i − x ˉ σ \tilde{z_i} = \frac{x_i - \bar x}{\sigma} zi~=σxixˉ,即x减去均值除以标准差。标准化后数据表示的是距离均值差距几个标准差。

      归一化是将数据转化到[0,1]之间,而标准化则是将数据转化进同一分布中来表达。不同的场景需要考虑不同的无量纲化方法:如果对输出数据范围有要求,则使用归一化(标准化不保证数据的最大最小值);如果数据噪音和异常点较多,则使用标准化;数据表现稳定的话,则两者皆可。

      对于不同的模型:一般来说,神经网络会使用标准化,虽然神经网络并不在意量纲是否统一,但标准化后的特征有利于各特征值上梯度均匀下降,从而加快网络训练;对于逻辑回归,则需要关注业务场景和模型处理方式,在风控这种需要可解释性的领域,特征需要归一化。而应用逻辑回归的其他场景中,需要考虑是否使用了正则(有正则则需要标准化,无正则则是否标准化都没有影响:因为有正则的情况下,参数大小与损失值有关,所以必须要先统一量纲,以保证参数均匀分布)。

  3. 特征编码:类别特征在模型中无法处理,因此需要数值化的编码。编码的方式有很多,像序数编码、one-hot编码、特征哈希、基于统计的编码、基于目标target的编码等等。实践中较为常用的是one-hot编码,也称独热编码。它以类别的个数为基数,将特征值展开成0、1表达:如天气有三种取值:晴天、雨天、阴天,则可以用001表示晴天、010表示雨天、100表示阴天。one-hot的好处是天然对特征进行了数值化表达,且进行了无量纲化处理,同时拓展了模型的非线性能力(如天气特征需要有三个权重);但其缺点也很明显,就是空间过大(一般会进行降维处理,详见下文),且无法表达特征之间的交互关系。不过,如果不知道使用什么编码方式,一般都采用one-hot的编码。另外,WOE也是一种常见编码方式,它将特征分割成若干个空间,每个空间中,目标值的好坏比都有明显不同,从而使得编码后的特征值具有良好区分度,该编码方式通常应用在风控领域中。
  4. 统计变换:正态化的分布则有利于模型训练,使得梯度能够均匀下降从而加快训练速度。有些数据呈现长尾分布的状态,与正态分布相去甚远,在无量纲化之前,可以先进行单调的统计变换,其目的是减轻数据倾斜的影响,使原本密集的数据尽量分散,而过于分散的数据则能尽量聚合。实践中常见变换有log变换,box-cox变换等,前者尽量缩小极值引发的大方差,后者则对非正态分布进行改善,优化其对称性和方差,使其分布趋于正态化,在python中可以直接调取相关的api进行处理(scipy.stats.boxcox)。

特征选择

特征选择是根据一些指标对特征进行筛选。虽然深度学习可以将特征一股脑塞进模型,但实践上来说,使用经过挑选的特征,可以减少模型的计算成本,使模型表现出更优越的性能,且能减少模型过拟合的风险。

特征选择主要考察特征的几个特性:1、覆盖率:要保证特征覆盖率足够高,如果有大量缺失值则不适合采用;2、特征发散程度:如果特征不发散,即方差接近0,说明特征变化较小,区分力不够;3、特征与样本的相关性:即考察特征对样本的区分能力。

在一些算法比赛中,由于追求模型的极致性能,对特征的选择也会力臻完美。特征选择方法可以分为3大类:filter方法、Wrapper方法、Embedded方法。

  1. filter:过滤法,运用统计指标来为每个特征打分并筛选特征。其优点是计算快,不依赖于具体的模型,缺点是选择的统计指标不是为特定模型定制的,因而对模型的加成可能不高,且验证的是单变量特征,没有考虑特征间的相互关系。filter方法有很多:

    1. 方差选择法,它检查变量内部的变化情况,尽量选择方差大的特征(这种方法不考虑目标,无法验证变量对于目标的区分力);

    2. 相关系数法,计算Pearson相关系数,通常用于连续变量,值越高说明特征与目标相关性越高;Pearson相关系数公式为:
      C O R ( X , Y ) = ∑ i = 1 n ( X i − X ‾ ) ( Y i − Y ‾ ) ∑ i = 1 n ( X i − X ‾ ) 2 ∑ i = 1 n ( Y i − Y ‾ ) 2 COR(X,Y) = \frac{\sum_{i = 1}^{n}(X_i - \overline{X})(Y_i - \overline{Y})}{\sqrt{\sum_{i = 1}^{n}(X_i - \overline{X})^2\sum_{i = 1}^{n}(Y_i - \overline{Y})^2}} COR(X,Y)=i=1n(XiX)2i=1n(YiY)2

      i=1n(XiX)(YiY)
      皮尔逊相关系数实际是两个分布的协方差的变形,对其进行了无量纲化处理。其值在[-1,1]之间分布,0到1表示X与Y正相关,1表示两者完全线性相关,可以在二维坐标系上使用直线描绘出来;-1到0表示X与Y负相关,-1表示两者完全负相关。

    3. 卡方检验法:卡方检验的实质是计算自变量与因变量的相关性,通常用于离散型特征。卡方检验属于统计学内容,只讲理论不太好理解,我们举例看看它是如何计算的:假设目标是时尚类文章看过后是否点赞,特征为用户性别。有如下统计信息:

      是否点赞\性别 合计
      100 600 700
      200 100 300
      合计 300 700 1000

      该特征与变量的独立性检验假设如下:
      零假设 ( H 0 H_0 H0):时尚类文章被点赞与用户性别独立
      备选假设 ( H 1 H_1 H1) :时尚类文章被点赞与用户性别不独立
      如果零假设成立,则时尚类文章被点赞的概率A和用户性别概率B互相独立,根据贝叶斯原理,有P(A,B) = P(A)*P(B),计算独立假设下每个格子发生的频数,如左上角第一个格子(男性点赞),得到 N ∗ P ( A ) ∗ P ( B ) = 1000 ∗ 700 1000 ∗ 300 1000 = 210 N * P(A) * P(B) = 1000 * \frac{700}{1000} * \frac{300}{1000} = 210 NP(A)P(B)=100010007001000300=210,其他格子的计算依次类推,得到期望频数如下:

      是否点赞\性别 合计
      210 490 700
      90 210 300
      合计 300 700 1000

      有了这两个列表后,就可以计算检验统计量 χ 2 \chi^2 χ2 ( χ 2 \chi^2 χ2表示卡方值) , χ 2 \chi^2 χ2越大,表示观测值和期望值相差越大,当 χ 2 \chi^2 χ2大于某一个临界值时,就能获得统计显著性的结论:
      χ 2 = ∑ ( 观测频数 − 期望频数 ) 2 期望频数 = ∑ i = 1 r ∑ j = 1 c ( O i , j − E i , j ) 2 E i , j = 274.38 \chi^2 = \sum{\frac{(观测频数-期望频数)^2}{期望频数}}=\sum_{i=1}^{r}\sum_{j=1}^{c}{\frac{(O_{i,j} - E_{i,j})^2}{E_{i,j}}}=274.38 χ2=期望频数(观测频数期望频数)2=i=1rj=1cEi,j(Oi,jEi,j)2=274.38
      其中 O i , j O_{i,j} Oi,j 为观测频数, E i , j E_{i,j} Ei,j为期望频数,r为行数,c为列数,自由度df = (r-1) * (c-1) = 1,Font metrics not found for font: .服从卡方分布,查卡方分布表:

      df 0.1 0.05 0.025 0.01 0.005
      1 2.706 3.841 5.024 6.635 7.879
      2 4.605 5.991 7.378 9.21 10.597

      得到

      深入浅出推荐系统(七):水源木本--特征工程相关推荐

      1. 2.2w字长文详解推荐系统之数据与特征工程,码起来慢慢看

        作者丨gongyouliu 编辑丨lily 来源 | 大数据与人工智能(ID:ai-big-data) [导读]推荐系统是机器学习的一个子领域,并且是一个偏工程化.在工业界有极大商业价值的方向.大量应 ...

      2. 「构建企业级推荐系统系列」推荐系统之数据与特征工程

        作者 | gongyouliu 编辑 | auroral-L 推荐系统是机器学习的一个子领域,并且是一个偏工程化.在工业界有极大商业价值的方向.大量应用于提供toC类产品的互联网企业服务中,通过推荐系 ...

      3. 推荐系统之数据与特征工程

        点击上方"大数据与人工智能","星标或置顶公众号" 第一时间获取好内容 作者丨gongyouliu 编辑丨lily 这是作者的第25篇文章,约2.2w字,阅读需 ...

      4. 【转】【重要】推荐系统之数据与特征工程

        原文链接: 推荐系统之数据与特征工程 原文作者丨gongyouliu  来自 大数据与人工智能 推荐系统是机器学习的一个子领域,并且是一个偏工程化.在工业界有极大商业价值的方向.大量应用于提供toC类 ...

      5. 推荐系统:数据与特征工程

        推荐系统是机器学习的一个子领域,并且是一个偏工程化.在工业界有极大商业价值的子方向. 目前绝大多数提供 toC 类产品或者服务的互联网企业,会通过推荐系统为用户提供精准的个性化服务. 推荐系统通过推荐 ...

      6. 【推荐系统】深入理解推荐系统:无需人工特征工程的xDeepFM

        [推荐系统]专栏历史部分文章: 深入理解推荐系统:召回 深入理解推荐系统:排序 深入理解推荐系统:Fairness.Bias和Debias 深入理解推荐系统:推荐系统中的attention机制 深入理 ...

      7. 七种常用特征工程技术

        应用机器学习像是把你当一个伟大的工程师,而非伟大的机器学习专家. ---google 当在做数据挖掘和数据分析时,数据是所有问题的基础,并且会影响整个工程的流程.相比一些复杂的算法,如何灵活的处理好数 ...

      8. 推荐系统特征工程的万字理论

        作者丨gongyouliu 编辑丨lily 这是作者的第25篇文章,约2.2w字,阅读需120分钟   推荐系统是机器学习的一个子领域,并且是一个偏工程化.在工业界有极大商业价值的方向.大量应用于提供 ...

      9. 「推荐系统中的特征工程」1. 特征工程基础知识介绍

        作者 | gongyouliu 编辑 | auroral-L 全文共6858字,预计阅读35分钟. 本章目录 一.特征的基本概念 二.特征工程介绍 三.特征工程的基本思路和方法 1. 根据不同数据类型 ...

      最新文章

      1. LeetCode简单题之托普利茨矩阵
      2. PSXDMS cassandra testing
      3. avalov+require实现tab栏
      4. android教育游戏设计方案,基于Android平台的儿童教育游戏的设计与开发
      5. jQuery选择器大全(48个代码片段+21幅图演示)
      6. 2020年终回顾:时间会回答成长,成长会回答梦想
      7. 【jenkins】jenkins CI/CD搭建基本过程
      8. English Voice of I Knew You Were Trouble.
      9. JQuery的Ajax跨域请求的解决方案
      10. index.php上传到服务器找不到站点,ThinkPHP上传到服务器出现404,未找到index.php模板等问题...
      11. 区块链 以太坊 虚拟机 EVM 详解
      12. ISO18000-6B和ISO18000-6C(EPC C1 G2)标准的区别
      13. RapidMiner遇到的问题
      14. c语言求圆锥的表面积和体积_c语言问题,输入圆锥的半径和高,得出表面积和体积。请问程序该如何改....
      15. 我看三十而立的80后
      16. 苍穹角色对接流程开发
      17. Excel表格转到Word中,保持表格不变形,不超边缘纸张范围
      18. 牛人整理的一些查询国内外文献资料的实用网站,专业啊,吐血推荐!
      19. dayjs获取当日的0点和23.59.59
      20. 腾讯最难lua面试题答案及解析

      热门文章

      1. hwclock设置日期_linux时间管理与配置date与hwclock命令
      2. 请求所有父控件及祖宗控件不要拦截事件
      3. 6个最优秀的微信小程序UI组件库
      4. Spring Boot 整合消息中间件 RocketMQ
      5. (146)FPGA高扇出信号优化方法(一)
      6. 深圳软件测试学习:软件测试这个职业能干多久?
      7. 【Python/QT】pyqt5安装及使用
      8. word2vec最全理论和代码
      9. IDEA 如何配置JVM虚拟机启动参数
      10. WINCE_.NET CF 示例集锦