炼数成金 门户 商业智能 机器学习 查看内容

千锤万凿出深山:且谈特征工程最佳实践

2017-8-28 22:14| 发布者: 炼数成金_小数| 查看: 19021| 评论: 0|原作者: 核子可乐 译|来自: InfoQ
摘要: 作为为机器学习创建新特征的实现过程,特征工程已经成为改进预测模型的最具实效的方法之一。获取特征难度极高、相当耗时且要求具备专业知识。“应用机器学习”在本质上其实就是在实现特征工程。通过特征工程方法,你 ...
工具 算法 模型 机器学习 时间序列
作为为机器学习创建新特征的实现过程,特征工程已经成为改进预测模型的最具实效的方法之一。
获取特征难度极高、相当耗时且要求具备专业知识。“应用机器学习”在本质上其实就是在实现特征工程。—— Andrew Ng

通过特征工程方法,你将能够提取关键信息、突出数据模式并引入你的领域专长。但由于特征工程突出的开放性,极易令实施者陷入困境。

什么是特征工程?  
作为一个非正式议题,特征工程可能拥有多种潜在定义。事实上,由于机器学习流程的流动性与迭代性,我们很难为特征工程找到概念层面的惟一“正确答案”。

根据自身理解,我们将特征工程定义为“基于现有的特征创建新特征,以提升模型性能的过程”。

典型的数据科学流程可能如下所示:
项目范围设定 / 数据收集
探索性分析
数据清理
特征工程
模型训练(包括交叉验证以调整超参数)
项目交付 / 获得见解

什么不是特征工程?  
上述流程意味着我们会将一些步骤明确排除在特征工程范畴之外:
我们认为 初始数据收集 并不属于特征工程。
同样的,我们认为 创建目标变量 不属于特征工程。
我们认为删除重复项、处理丢失值或者修复错误标记类并不属于特征工程,我们将这些纳入 数据清理 范畴。
我们认为 特征缩放或者归一化 不属于特征工程,因为此类步骤归属于交叉验证循环(即在你已经建立起分析基表之后)。
最后,我们认为 特征选择或者主成分分析(PCA) 并不属于特征工程。这些步骤同样归属于交叉验证循环。
再次强调,这些只是我们给出的分类意见。我们接受其他数据科学家对此提出的质疑,毕竟特征工程本身就属于一个开放性概念。
免责声明到此结束,下面让我们进一步探讨与之相关的较佳实践与启发性结论。

指标变量  
特征工程的第一种类型是利用指标变量提取关键信息。
现在,有些朋友可能会问,“好的算法不是应该自行学习关键信息吗?”
这个嘛,情况并非总是如此,具体取决于你所拥有的数据量以及竞争信号的强度。你可以通过预先突出重要内容帮助算法对其给予“关注”。
来自阈值的指标变量: 我们假设你正在研究美国消费者对于酒精饮料的偏好,而当前数据集包含年龄特征 age。您可以创建一个指标变量 age>=21 以区分达到合法饮酒年龄的受试者。

来自多种特征的指标变量: 假设你正在预测房地产价格,并且已经掌握了 n_bedrooms 与 n_bathrooms 两项特征。如果拥有两卧两卫的房产在出租时拥有溢价性,你就可以创建一项指标变量对其进行标记。

针对特殊事件的指标变量: 假设你正在为电子商务网站的每周销售情况建模。你可以为黑色星期五与圣诞节那两周分别创建两项指标变量。
类组指标变量: 假设你正在分析网站转换率,而当前数据集包含 traffic_source 这一分类特征。你可以通过标记“Facebook 广告”或者“谷歌广告”为 paid_traffic 创建指标变量。

交互特征  
第二种特征工程类型主要是指突出两项或者多项特征之间的交互。
你是否听说过“一加一大于二”这种说法?事实上,一部分特征组合起来确实能够较单一特征带来更多信息。
具体来讲,我们可以对多项特征进行加和、减差、乘积或者除商后再寻找其中的模式。

两项特征加和: 我们假设你希望根据初步销售数据预测收入情况。你已经拥有 sales_blue_pens 与 sales_black_pens 两项特征。如果你只关注总体 sales_pens,那就可以将二者相加。

两项特征之差: 假设你已经拥有 house_built_date 以及 house_purchase_date 两项特征,可以求二者之差以创建 house_age_at_purchase 特征。
两项特征乘积: 假设你正在进行价格测试,而且分别拥有特征 price 与指标变量 conversion。您可以将二者相乘以创建特征 earnings。
两项特征除商: 假设你拥有一套市场营销活动数据集,其中包含 n_clicks 与 n_impressions 两项特征。你可以将点击次数除以展示次数以求得 click_through_rate,并借此了解不同规模的宣传活动间的转化率对比情况。

备注:我们并不建议大家利用自动化循环为全部特征创建交互,因为这有可能会造成“特征爆炸”问题。

特征表达  
接下来要谈到的特征工程类型虽然简单却影响巨大。我们将其称为特征表达。
你的数据并不一定总是理想格式。你需要考虑是否有必要通过另一种形式进行特征表达以获取有用信息。
日期与时间特征: 我们假设你拥有 purchase_datetime 特征。从中提取 purchase_day_of_week 与 purchase_hour_of_day 两项特征可能会更有用。你还可以进行观察聚类以创建诸如 purchases_over_last_30_days 这类特征。
数字到分类的映射: 假设你拥有 years_in_school 特征。你可以基于它创建新的 grade 特征,并分类为“小学”、“初中”和“高中”。

稀疏类分组: 假设你拥有一个包含多个类别的特征,但样本量较小。你可以尝试对相似类进行分组,将相似的类别分到一组,然后将剩下的类划分至单一的“其他”类中。

创建虚拟变量: 根据你所选取的机器学习实现方法,你可能需要手动地将各分类特征转化为虚拟变量。请务必在稀疏类分组之后再创建虚拟变量。

外部数据  
特征工程中还有一个尚未被充分利用的类型,就是外部数据的引入,实际上引入外部数据能够为性能带来一些巨大突破。
举例来说,定量对冲基金的一种研究方式就是对不同财务数据流进行分层。
亦有多种机器学习难题能够通过引入外部数据得到改善。以下为相关示例:
时间序列数据: 时间序列数据的较大优势在于,你只需要一项特征——即某种形式的日期,即可将其纳入来自其他数据集的特征。
外部 API: 如今我们可以利用大量 API 来协助创建特征。例如,微软计算机视觉 API 能够返回某一图像当中包含的人脸数量。

地理编码: 如果你已经拥有street_address、city乃至state等特征信息,则可以利用 地理编码 将其转换为latitude与longitude特征。如此一来,你就能够借助 其他数据集 计算出本地人口属性(例如 median_income_within_2_miles)等特征。

同一数据的其它来源: 我们可以通过几种方式追踪 Facebook 广告宣传活动?答案可能包括 Facebook 自身的追踪系统、Google Analytics 以及其他第三方软件。每一种来源都可能带来其他方案所无法追踪到的信息。另外,这些数据集之间的任何差别都可能包含重要信息(例如不同信息来源可能对机器人流量有不同的处理方式——选择忽略或者保留)。

错误分析(建模后)  
特征工程的最后一种类型,我们称之为错误分析。错误分析应该在第一套模型训练完成之后进行。
错误分析是一项广义术语,是指对模型当中的错误分类或者高错误率观察结果加以分析,同时决定如何在下一步当中作出改进。
潜在的后续步骤包括收集更多数据、对问题进行拆分或者设计出能够解决错误的新特征。要在特征工程当中使用错误分析,我们需要搞清楚自己的模型为何未能得出正确结果。

具体方式包括:
由较大错误入手: 错误分析通常手动执行。很明显,大家没有时间对每一项观察结果进行逐一检查。我们建议从那些错误评分较高的问题入手,并寻找那些能够转换为新特征的模式。

按类别分段: 另一项技术在于拆分观察结果,并针对各个分段基于平均误差进行比较。你可以尝试为误差值较高的分段创建指标变量。
无监督聚类: 如果你在发现模式时遇到问题,则可对被错误分类的观察结果执行无监督聚类算法。我们并不建议你盲目将这些聚类视为新特征,但这确实能够有效简化模式的发现过程。请记住,我们的目标是理解为何观察结果中会出现错误分类。

询问同事或者领域内专家: 这种做法可以作为以上任一项技术的补充。如果你确定效果不佳(例如通过分段方式检验),但还不清楚具体原因,那么向领域内专家求助或许能帮上大忙。

结论  
如大家所见,特征工程领域存在着诸多可能性。我们在本文中提到了 20 项较佳实践与启发性结论,但这些也不过是沧海一粟。
当你开始进行自己的实验时,请牢记以下一般性准则:
良好的特征工程应当……
可面向未来观察结果进行计算。
通常能给出直观的解释。
通过领域内专业知识或者探索性分析得出。
必须拥有预测能力。不要为了创建特征而创建特征。

切勿触及目标变量。 这对于初学者们来说是一个经常会不小心掉入的陷阱。无论你是在创建指标变量抑或是交互特征,都千万不要使用自己的目标变量。这就像是一种“欺骗”,会给大家带来极具误导性的结果。

最后,如果感觉上述内容太难,也不用过于担心。通过不断实践和积累经验,你一定会对特征工程越来越熟悉并得到更理想的结果。

欢迎加入本站公开兴趣群
商业智能与数据分析群
兴趣范围包括各种让数据产生价值的办法,实际应用案例分享与讨论,分析工具,ETL工具,数据仓库,数据挖掘工具,报表系统等全方位知识
QQ群:81035754

鲜花

握手

雷人

路过

鸡蛋

最新评论

热门频道

  • 大数据
  • 商业智能
  • 量化投资
  • 科学探索
  • 创业

即将开课

  GMT+8, 2017-11-21 14:13 , Processed in 0.143488 second(s), 24 queries .