特征工程自动化如何为机器学习带来重大变化

随着技术的快速发展,在数据科学领域中,包括库、工具和算法等总会不断地变化的。然而,一直都有这么一个趋势,那就是自动化水平不断地提高。

近些年来,在模型的自动化选择和超参数调整方面取得了一些进展,但是机器学习中最重要的领域 — 特征工程,却被严重地忽视了。这个重要领域中最成熟的工具就是Featuretools,一个开源的Python库。在本文中,我们将使用这个库来了解一下特征工程自动化将如何改变你更好地进行机器学习的方式。

特征工程自动化是一种相对较新的技术,但是,它解决了许多实际数据集的使用问题。在这里,我们将用GitHub上的Jupyter Notebooks提供的代码来看看其中两个项目的结果和最终结论。

每个项目都强调了特征工程自动化的一些好处:

·贷款偿还能力预测:与人工特征工程相比,自动化的特征工程可以将机器学习开发的时间缩短10倍,同时提供更好的建模性能表现;(笔记

·消费支出预测:自动化的特征工程通过内部的处理时间序列过滤器来创建有实际意义的特征,同时防止数据泄漏,从而实现成功的模型部署;(笔记

特征工程:人工与自动

特征工程是获取数据集并构造可解释的变量—特征的过程,用于训练预测问题的机器学习模型。通常,数据分布在多个表中,并且必须汇集到一个表之中,其中的行包含观察结果和列中的特征。

传统的特征工程方法是使用相关领域知识创建一个特征,这是一个冗长、耗时且容易出错的过程,称为人工特征工程。人工特征工程是依赖于具体问题的,必须为每个新数据集重新编写代码。

特征工程自动化通过自动从一组相关的数据表中提取有用且有意义的特征,并使用一个可应用于任何问题的框架,来改进这个标准工作流。它不仅减少了在特征工程上花费的时间,而且还创建了可解释的特征,并通过过滤具有时间依赖性的数据来防止数据泄漏。

贷款偿还:建立更快更好的模型

当数据科学家在处理家庭信贷贷款问题的时候,所面临的主要难题是数据的大小和分布。看看完整的数据集,你会发现面对的是分布在7个表中的5800万行数据。

我曾经使用传统的人工特征工程花了10个小时创建了一组特征。首先,我查阅了其他数据科学家的成果,还查看了相关的数据,并研究了问题域,以获得必要的相关领域知识。然后我将这些知识翻译成代码,一次创建一个特征。作为单一的人工特征的一个例子,我找到了客户以前贷款的逾期还款总数,这一操作需要用到3个不同的表。

最终人工设计的特征表现的相当好,比基线特征提高了65%,表明了正确特征设计的重要性。

然而,效率却非常低下。对于人工特征工程,我最终花了超过15分钟来完成每个特征,因为我使用传统的方法一次生成一个特性。

除了单调乏味和耗时之外,人工特征工程还有以下问题:

·用于特定问题:我花费了很长时间编写的代码并不能应用于任何其它的问题;

·易错:每一行代码都会有可能导致其它的错误;

另外,最终的人工设计的特征受到了人类创造力和耐心方面的限制:我们只能考虑创建这么多的特征,并且只能花费这么多的时间。

特征工程自动化的承诺是通过获取一组相关的表,并使用可以应用于所有问题的代码,来自动创建数以百计有用的特征,进而跨越这些限制。

从人工到自动化特征工程

特征工程自动化甚至允许像我这样的新手,在一组相关的数据表中可以创建数以千计的相关特征。我们只需要知道表的基本结构以及它们之间的关系,我们在一个称为实体集的单一数据结构中来跟踪它们。一旦我们有了一个实体集,使用一个称为深度特征合成(Deep Feature Synthesis,DFS)的方法,我们就能够在一个函数调用中创建数以千计的特征了。

DFS使用称为“primitives”的函数来进行聚合和转换数据。这些primitives可以简单到仅获取一个平均值或列的最大值,也可以复杂到基于主题的专业知识,因为FeatureTools允许我们定义自己的primitives。

特征primitives包括许多人工操作,但是通过使用FeatureTools,我们可以在任何关系数据库中使用相同准确的语法,而不是再重新编写代码并在不同的数据集中使用相同的操作。此外,当我们将primitives相互堆叠在一起来创建深层次的特征时,DFS的威力就来了。

深度特征合成是灵活的,它被允许应用于任何数据科学领域的问题。它同时也是很强大的,通过创建深度特征来揭示我们对数据的推断。

我会为你省去环境设置所需的几行代码,但DFS只在一行中运行。在这里,我们使用数据集中的所有7个表为每个客户生成数千个特征:

# Deep feature synthesis
feature_matrix, features = ft.dfs(entityset=es, target_entity='clients',agg_primitives = agg_primitives,trans_primitives = trans_primitives)

下面是我们自动从FeatureTools获得的1820个特征中的一部分:

·客户以前贷款的最高总额。这是在3个表中使用1个MAX 和1个SUM 的primitive得来的;

·客户以前的信用卡平均债务的百分比排名,这在两个表中使用了百分比(PERCENTILE)和平均值(MEAN)的primitive;

·在申请过程中,客户是否提交了两份文件,这将使用1个AND 转换primitive和1个表;

这些特征中的任何一个都是用简单的聚合创建的。FeatureTools创建了许多与我手工创建的相同的特征,但也有数千个是我从未考虑过的。并不是每一个特征都与问题相关,有些特征是高度相关的,然而,拥有太多的特征是一个比拥有太少的特征更好解决的问题。

在进行了一些功能选择和模型优化之后,与人工特征相比,预测模型中的这些特征要稍好一些,总体开发时间为1小时,与人工的过程相比减少了10倍。FeatureTools速度更快,这是因为它需要的领域知识更少,而且要编写的代码行也少的相当多。

我承认学习Featuretools需要一点时间成本,但这是一项有回报的投资。在花了一个小时左右的时间学习Featuretools之后,你就可以将其应用于任何机器学习问题了。

以下的图表总结了我在贷款偿还问题上的经验:

·开发时间:10小时人工与1小时自动;

·该方法创建的特征数量: 30个人工特征与1820个自动特征;

·相对于基线提高了的百分比是:65% 人工 vs 66% 自动

我的结论是,特征工程自动化不会取代数据科学家,而是通过显著地提高效率,使他们在机器学习的其它方面可以花费更多的时间。

另外,我为第一个项目编写的Featuretools代码可以应用于任何数据集,而人工工程的代码则没法再利用。

消费支出:创建有意义的特征并防止数据泄漏

第二个数据集,在线时间戳的客户交易记录,预测问题是将客户分为两个部分,消费超过500美元的客户和消费不会超过500美元的客户。但是,不是对所有标签使用一个月,而是每个客户多次使用一个标签。我们可以把他们5月份的消费支出作为一个标签,然后6月份的,等等。

在部署中,我们永远不会有未来的数据,因此无法将其用于训练模型。企业通常会遇到这个问题,并且经常部署一个在实际应用中比在开发中更糟糕的模型,因为这是使用无效的数据来进行训练的。

幸运的是,要确保我们的数据在时间序列问题中是有效的,这在FeatureTools中很简单。在深度特征合成函数中,我们传递一个如上图所示的dataframe,其中截止时间表示我们不能使用任何标签数据中过去的时间点,FeatureTools在创建特征时会自动考虑时间。

客户在指定月份的特征是使用过滤到该月份之前的数据来创建的。请注意,用于创建特征集的调用与添加截止时间的贷款偿还问题的调用相同。

# Deep feature synthesis
feature_matrix, features = ft.dfs(entityset=es, target_entity='customers',agg_primitives = agg_primitives,trans_primitives = trans_primitives,cutoff_time = cutoff_times)

执行深度特征合成的结果是一个特征表,每个客户一个月一个。我们可以使用这些特征来训练一个带有标签的模型,然后可以对任何月份进行预测。此外,我们可以放心,模型中的特征不会使用导致不公平优势的未来信息,并产生误导训练的分数。

有了自动化特征,我能够创建一个机器学习模型,在预测一个月内客户消费支出类别的时候,与已知为0.69的基线相比,ROC AUC达到0.90。

除了提供令人印象深刻的预测能力之外,FeatureTools的实现还为我提供了一些同样有价值的东西:可解释的特征。看一下随机森林模型中的15个最重要的特征:

特征的重要性告诉我们,预测客户将在下个月花多少钱的最重要素是他们之前花了多少钱SUM,以及购物的数量SUM。这些是可以手工创建的特征,但是我们不得不担心数据泄漏的问题,并创建在开发中比部署中效果要好的模型。

如果可以创建有意义的特征工具已经存在了,而无需担心任何特征的有效性,那么为什么要人工实现呢?另外,自动化特征在问题的上下文中是完全明确的,并且可以为我们的实际推理提供信息。

自动化特征工程识别出最重要的信号,实现了数据科学的主要目标:揭示隐藏在海量数据中的规律。

即使在人工特征工程上花费的时间比我用FeatureTools花的时间多得多,那么我也无法开发出一组性能表现接近的特征。下图显示了使用在两个数据集上训练的模型对未来一个月的客户销售情况进行分类的ROC曲线。左上方的曲线表示更准确的预测:

比较自动的和人工的特征工程结果的ROC曲线,左侧和顶部的曲线表示其性能表现更好。

我甚至不能完全确定人工特征是否使用了有效的数据,但是通过FeatureTools我不必担心时间依赖性问题中的数据泄漏。

我们在日常生活中使用自动安全系统,Featuretools中的特征工程自动化是在时间序列问题中创建有意义的机器学习特征的安全方法,同时提供了卓越的预测性能表现。

结论

我经过了这些项目之后,确信特征工程自动化应该是机器学习工作流程中不可或缺的一部分。这项技术并不完美,但依旧能显著地提高效率。

主要的结论就是特征工程自动化:

·将执行时间缩短了10倍;

·在同一级别或更高级别上实现的建模性能;

·交付的具有实际意义的可解释性特征;

·防止使用不正确的数据而导致的模型无效;

·适应现有的工作流程和机器学习模型;

 

原文链接
本文为云栖社区原创内容,未经允许不得转载。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/519869.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

工作组访问不到别人的计算机,众果搜的博客

常见问题:A 在网上邻居列表中找不到目标计算机。B 在网上邻居列表能找到,但却访问不了。C 以UNC路径能访问,但在网上邻居列表中却找不到。1、网上邻居列表的维护依赖于浏览服务(Computer Browers),计算机通过广播方式登记到浏览器…

java 实现压缩zip的几种方案

需求,将指定目录下的文件及文件夹压缩成一个指定赔案号为名称,以".zip"结尾的压缩包提供客户下载。 package com.gblfy.util;import java.io.BufferedInputStream; import java.io.File; import java.io.FileInputStream; import java.io.Fil…

序列模型简介——RNN, Bidirectional RNN, LSTM, GRU

既然我们已经有了前馈网络和CNN,为什么我们还需要序列模型呢?这些模型的问题在于,当给定一系列的数据时,它们表现的性能很差。序列数据的一个例子是音频的剪辑,其中包含一系列的人说过的话。另一个例子是英文句子&…

行!人工智能玩大了!程序员:太牛!你怎么看?

人工智能真的玩大了吗?人工智能行业的人才真的“爆发了?”AI程序员究竟怎么样?中国AI前景分析 程序员与远方最新参考,是12月2日出炉的《人工智能技术专利深度分析报告》。中国AI专利,已经位于世界前列,且正…

可应用于实际的14个NLP突破性研究成果(一)

语言理解对计算机来说是一个巨大的挑战。幼儿可以理解的微妙的细微差别仍然会使最强大的机器混淆。尽管深度学习等技术可以检测和复制复杂的语言模式,但机器学习模型仍然缺乏对我们的语言真正含义的基本概念性理解。 但在2018年确实产生了许多具有里程碑意义的研究…

String 常用API

public static void main(String[] args) {/*** String 常用API* 字符串* 1>截取* 2>替换**/String fileSuffix ".jpg";int i fileSuffix.indexOf(".");//截取.之后的内容,包含. indexs0String newStr fileSuffix.substring(i 0);…

小学五年级年级计算机教学计划,小学五年级信息技术教学计划范文

人类社会已进入信息时代,日新月异的信息技术在不断地改变着周围的世界。为了推广计算机信息技术,提高全民族的科学文化素质,发展小学信息技术教育。下面是学习啦小编整理的小学五年级信息技术教学计划范文,希望对大家有所帮助!小学五年级信息技术教学计划范文(一)一…

阿里资深技术专家:优秀的数据库存储引擎应具备哪些能力?

导读 本文作者是阿里巴巴OLTP数据库团队资深技术专家——曲山。作为自研高性能、低成本存储引擎X-Engine的负责人,曲山眼中的优秀关系型数据库存储引擎应该具备哪些能力呢? 正文 数据库内核按层次来分,就是两层:SQL & Stor…

开发函数计算的正确姿势——网页截图服务

前言 首先介绍下在本文出现的几个比较重要的概念: 函数计算(Function Compute): 函数计算是一个事件驱动的服务,通过函数计算,用户无需管理服务器等运行情况,只需编写代码并上传。函数计算准备计算资源&am…

java实现删除指定指定目录下面指定某种类型的文件

/*** 删除指定目录下面指定文件类型的文件** param path*/public static void delSpecifyTheTypeFile(String path) {File dir new File(path);// 该文件目录下文件全部放入数组File[] files dir.listFiles();if (files ! null) {for (int i 0; i < files.length; i) {St…

如何关闭计算机的f12功能键,win10如何关闭快捷键?win10关闭F1~F12快捷键的方法

win10如何使用快捷键关闭?在win10系统中我们按下F1~F12原本可以正常使用系统中的功能。而然在笔记本中F1~F12竟然被笔记本中的功能所替代了&#xff0c;例如&#xff1a;打开/关闭 无线网卡&#xff0c;屏幕亮度加减、系统音量大小等&#xff0c;导致我们在使用F1~F12的时候只…

阿里巴巴宣布架构调整;英伟达放大招!重磅发布 ​TensorRT 7 ,支持超千种计算变换;苹果、谷歌和亚马逊罕见结盟……...

戳蓝字“CSDN云计算”关注我们哦&#xff01; 嗨&#xff0c;大家好&#xff0c;重磅君带来的【云重磅】特别栏目&#xff0c;如期而至&#xff0c;每周五第一时间为大家带来重磅新闻。把握技术风向标&#xff0c;了解行业应用与实践&#xff0c;就交给我重磅君吧&#xff01;重…

阿里开源分布式事务解决方案 Fescar 全解析

广为人知的阿里分布式事务解决方案&#xff1a;GTS&#xff08;Global Transaction Service&#xff09;&#xff0c;已正式推出开源版本&#xff0c;取名为“Fescar”&#xff0c;希望帮助业界解决微服务架构下的分布式事务问题&#xff0c;今天我们一起来深入了解。 FESCAR o…

鲜为人知的混沌工程,到底哪里好?

混沌工程属于一门新兴的技术学科&#xff0c;行业认知和实践积累比较少&#xff0c;大多数IT团队对它的理解还没有上升到一个领域概念。阿里电商域在2010年左右开始尝试故障注入测试的工作&#xff0c;希望解决微服务架构带来的强弱依赖问题。通过本文&#xff0c;你将了解到&a…

计算机软考中集成系统,软考中级系统集成项目管理工程师有哪些作用?

系统集成项目管理工程师属于计算机技术与软件专业技术资格(水平)考试(即软考)中级资格考试里面的一项考试。对于中级工程师而言&#xff0c;通过评定获得职称证书的人比通过考试获得职称证书的人更容易被社会认可与接受。因为评定职称的人有资格、有经验&#xff1b;在当今社会…

Nutanix在中国市场发布多云合作伙伴计划

近日&#xff0c;企业云操作系统厂商Nutanix宣布&#xff0c;在中国市场正式发布“精英技术联盟合作伙伴计划”。 “精英技术联盟合作伙伴计划”面向国内解决方案、应用和软硬件合作伙伴以及开发人员&#xff0c;帮助他们在全球领先的企业云平台上构建和部署差异化的解决方案&a…

将视觉深度学习模型应用于非视觉领域

介绍 近些年来&#xff0c;深度学习技术已经彻底改变了计算机视觉领域。由于迁移学习和各种各样的学习资源的出现&#xff0c;任何人都可以通过使用预训练的模型&#xff0c;将其应用到自己的工作当中&#xff0c;以此获得非常好的结果。随着深度学习越来越商业化&#xff0c;…

字符串随机生成工具类

package com.gblfy.util;import org.springframework.stereotype.Component;import java.util.ArrayList; import java.util.Arrays; import java.util.Random;/*** 字符随机生成类*/ Component public class RandomStrUtil {/*** 随机产生类型枚举*/public static enum TYPE {…

什么是应用宝统一链接服务器,applink

从同构的角度和降级支持的角度来看&#xff0c;使用Android和iOS系统增强的AppLinks和Universal Links&#xff0c;通过HTTPS统一标准打开APP是标准的选择。使用自定义Scheme打开APP适用于&#xff1a;网站尚不支持HTTPS&#xff1b;App的iOS版本尚未添加Universal Links支持&a…

如何在Flutter上优雅地序列化一个对象

序列化一个对象才是正经事 对象的序列化和反序列化是我们日常编码中一个非常基础的需求&#xff0c;尤其是对一个对象的json encode/decode操作。每一个平台都会有相关的库来帮助开发者方便得进行这两个操作&#xff0c;比如Java平台上赫赫有名的GSON&#xff0c;阿里巴巴开源…