feature tools官网
https://www.featuretools.com/
特征工程基础

特征工程意味着从现有数据中构建附加特征,这些数据通常分布在多个相关表中。特征工程需要从数据中提取相关信息并将其放入单个表中,然后可用于训练机器学习模型。

构建特征的过程非常耗时,因为每个新特征通常需要几个步骤来构建,尤其是在使用来自多个表的信息时。我们可以将特征创建的操作分为两类:转换聚合。让我们看几个例子,看看这些概念的实际应用。

一个转化作用于单个表(思维在Python而言,表只是一个熊猫DataFrame通过创建新的功能出来的一个或多个现有列)。例如,如果我们有下面的客户表

我们可以通过查找joined列的月份或取列的自然对数来创建特征income。这些都是转换,因为它们只使用一张表中的信息。

另一方面,聚合是跨表执行的,并使用一对多关系对观察进行分组,然后计算统计量。例如,如果我们有另一个客户贷款信息的表,其中每个客户可能有多笔贷款,我们可以计算每个客户贷款的平均值、最大值和最小值等统计数据。

此过程包括按客户对贷款表进行分组,计算聚合,然后将结果数据合并到客户数据中。下面是我们如何使用Pandas 语言在 Python 中做到这一点。

这些操作本身并不难,但是如果我们有数百个变量分布在几十个表中,这个过程手工完成是不可行的。理想情况下,我们需要一个可以跨多个表自动执行转换和聚合并将结果数据合并到单个表中的解决方案。虽然 Pandas 是一个很好的资源,但我们想要手动完成的数据操作只有这么多!(有关手动特征工程的更多信息,请查看优秀的Python 数据科学手册)。

功能工具

幸运的是,featuretools 正是我们正在寻找的解决方案。这个开源 Python 库将自动从一组相关表中创建许多功能。Featuretools 基于一种称为“深度特征合成”的方法,听起来比实际要强大得多(这个名字来自堆叠多个特征,而不是因为它使用了深度学习!)。

深度特征合成堆叠了多个转换和聚合操作(在特征工具的词汇中称为特征原语),以从分布在许多表中的数据创建特征。与机器学习中的大多数想法一样,它是一种建立在简单概念基础上的复杂方法。通过一次学习一个构建块,我们可以很好地理解这种强大的方法。

首先,让我们看一下我们的示例数据。我们已经看到了上面的一些数据集,完整的表格集合如下:

  • clients:信用合作社客户的基本信息。每个客户端在此数据框中只有一行

  • loans: 贷款给客户。每笔贷款在此数据框中只有自己的行,但客户可能有多笔贷款。

如果我们有一项机器学习任务,例如预测客户是否会在未来偿还贷款,我们希望将有关客户的所有信息合并到一个表中。这些表是相关的(通过client_idloan_id变量),我们可以使用一系列转换和聚合来手动完成这个过程。但是,我们很快就会看到我们可以使用功能工具来自动化该过程。

实体和实体集

特征工具的前两个概念是实体实体****集。实体只是一张表(或者,DataFrame如果您认为 Pandas是一张表)。一个EntitySet的是表的集合,它们之间的关系。将实体集视为另一种 Python 数据结构,具有自己的方法和属性。

我们可以使用以下命令在 featuretools 中创建一个空实体集:

将特征工具导入为 ft# 创建新的实体集es = ft.EntitySet(id = 'clients')

现在我们必须添加实体。每个实体都必须有一个索引,它是一个包含所有唯一元素的列。也就是说,索引中的每个值只能在表中出现一次。clients数据帧中的索引是client_id因为每个客户端在该数据帧中只有一行。我们使用以下语法将具有现有索引的实体添加到实体集:

loans数据帧还具有独特的指数,loan_id 而且语法将它添加到EntitySet的是一样的clients。但是,对于payments数据帧,没有唯一索引。当我们将这个实体添加到实体集中时,我们需要传入参数make_index = True并指定索引的名称。此外,虽然 featuretools 会自动推断实体中每一列的数据类型,但我们可以通过将列类型字典传递给参数来覆盖它variable_types

对于这个数据帧,即使missed是一个整数,它也不是一个数字变量,因为它只能取 2 个离散值,所以我们告诉 featuretools 将 is 视为分类变量。将数据帧添加到实体集后,我们检查其中的任何一个:

列类型已通过我们指定的修改正确推断。接下来,我们需要指定实体集中的表是如何关联的。

表关系

考虑两个表之间关系的最佳方式是将parent 类比为 child。这是一对多的关系:每个父母可以有多个孩子。在表的领域中,一个父表对每个父表有一行,但子表可能有多行对应同一个父表的多个子表。

例如,在我们的数据集中,clients数据框是数据框的父级loans。每个客户端只有一行 in ,clients但可能有多行 in loans。同样,loans是 的父级,payments因为每笔贷款都会有多次付款。父母通过共享变量链接到他们的孩子。当我们执行聚合时,我们按父变量对子表进行分组,并计算每个父项的子项的统计数据。

要在 featuretools 中形式化关系,我们只需要指定将两个表链接在一起的变量。所述clientsloans表经由链接client_id变量和loanspayments与被链接loan_id。创建关系并将其添加到实体集的语法如下所示:

实体集现在包含三个实体(表)以及将这些实体链接在一起的关系。添加实体和形式化关系后,我们的实体集就完成了,我们准备制作特征。

特征原语

在我们完全进行深度特征合成之前,我们需要了解特征原语。我们已经知道这些是什么,但我们只是用不同的名字来称呼它们!这些只是我们用来形成新特征的基本操作:

  • 聚合:跨父子(一对多)关系完成的操作,该关系按父项分组并计算子项的统计信息。一个例子是按 对loan表进行分组client_id并找到每个客户的最大贷款金额。
  • 转换:在单个表上对一列或多列进行的操作。一个例子是取一个表中两列之间的差异或取一列的绝对值。

使用这些基元本身或堆叠多个基元在特征工具中创建新特征。下面是 featuretools 中的一些特征基元的列表(我们也可以定义自定义基元):

特征原语

这些基元可以单独使用或组合使用以创建特征。为了使用指定的原语制作特征,我们使用该ft.dfs函数(代表深度特征合成)。我们传入entityset, the target_entity, 这是我们要添加特征的表,选定的trans_primitives(转换)和agg_primitives(聚合):

结果是每个客户端的新功能数据框(因为我们让客户端成为target_entity)。例如,我们有每个客户加入的月份,这是一个转换特征原语:

我们还有许多聚合原语,例如每个客户的平均支付金额:

尽管我们只指定了几个特征基元,特征工具通过组合和堆叠这些基元创建了许多新特征。

完整的数据框有 793 列新功能!

深度特征合成

我们现在已经准备好理解深度特征合成 (dfs) 的所有部分。其实我们在之前的函数调用中已经进行了dfs!深度特征只是由多个基元堆叠而成的特征,而 dfs 是制造这些特征的过程的名称。深度特征的深度是制作该特征所需的图元数量。

例如,该MEAN(payments.payment_amount) 列是深度为 1 的深度特征,因为它是使用单个聚合创建的。深度为 2 的特征是LAST(loans(MEAN(payments.payment_amount)) 通过堆叠两个聚合来实现的:LAST(最近的)在 MEAN 之上。这代表了每个客户最近一次贷款的平均支付金额。

我们可以将特征堆叠到我们想要的任何深度,但在实践中,我从未超过 2 的深度。在此之后,特征很难解释,但我鼓励任何有兴趣的人尝试“更深入”。
我们不必手动指定特征基元,而是可以让特征工具自动为我们选择特征。为此,我们使用相同的ft.dfs函数调用,但不传入任何功能原语:

Featuretools 已经构建了许多新功能供我们使用。虽然这个过程会自动创建新功能,但它不会取代数据科学家,因为我们仍然需要弄清楚如何处理所有这些功能。例如,如果我们的目标是预测客户是否会偿还贷款,我们可以寻找与指定结果最相关的特征。此外,如果我们有领域知识,我们可以使用它来选择特定的特征基元或用候选特征进行深度特征合成。
下一步
自动化特征工程解决了一个问题,但带来了另一个问题:特征太多。尽管在拟合模型之前很难说这些特征中的哪些是重要的,但可能并非所有特征都与我们想要训练模型的任务相关。此外,拥有太多特征会导致模型性能不佳,因为不太有用的特征会淹没那些更重要的特征。
特征过多的问题被称为维度灾难。随着特征数量的增加(数据维度的增长),模型学习特征和目标之间的映射变得越来越困难。事实上,模型运行良好所需的数据量与特征数量呈指数关系。
维数灾难与特征减少(也称为特征选择):去除不相关特征的过程相抗衡。这可以采用多种形式:主成分分析 (PCA)、SelectKBest、使用模型中的特征重要性或使用深度神经网络进行自动编码。然而,特征减少是另一篇文章的不同主题。现在,我们知道我们可以使用 featuretools 以最少的努力从许多表中创建许多特征!
结论
与机器学习中的许多主题一样,使用 featuretools 进行自动化特征工程是一个基于简单想法的复杂概念。使用实体集、实体和关系的概念,特征工具可以执行深度特征合成以创建新特征。深度特征合成依次堆叠特征原语——聚合,它们在表之间的一对多关系中起作用,转换、应用于单个表中的一个或多个列的函数——以从多个表构建新特征。
在以后的文章中,我将展示如何在现实世界中使用这种技术,即目前在 Kaggle 上举办的Home Credit Default Risk 竞赛。请继续关注该帖子,同时,阅读此介绍以开始比赛!我希望您现在可以使用自动化特征工程作为数据科学管道的辅助工具。我们的模型与我们提供的数据一样好,自动化特征工程有助于使特征创建过程更加高效。
有关 featuretools 的更多信息,包括高级用法,请查看在线文档。要了解如何在实践中使用 featuretools,请阅读开源库背后的公司Feature Labs的工作。
欢迎关注作者主页,学习更多相关内容

版权声明:文章来自公众号(python风控模型),未经许可,不得抄袭。遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。

feature tools:Python 中的自动化特征工程相关推荐

  1. 独家 | 用Python Featuretools库实现自动化特征工程(附链接)

    作者:Prateek Joshi 翻译:张玲 校对:李润嘉 本文约4000字,建议阅读10分钟. 本文简要介绍特征工程的基本组成部分,并用直观的示例理解它们,最后给出使用Python Featuret ...

  2. Python之pandas:特征工程中数据类型(object/category/bool/int32/int64/float64)的简介、数据类型转换四大方法、案例应用之详细攻略

    Python之pandas:特征工程中数据类型(object/category/bool/int32/int64/float64)的简介.数据类型转换四大方法.案例应用之详细攻略 目录 特征工程中数据 ...

  3. 一键数据分析自动化特征工程!

    创造新的特征是一件十分困难的事情,需要丰富的专业知识和大量的时间.机器学习应用的本质基本上就是特征工程.--Andrew Ng 业内常说数据决定了模型效果上限,而机器学习算法是通过数据特征做出预测的, ...

  4. 机器学习实战 | 自动化特征工程工具Featuretools应用

    作者:韩信子@ShowMeAI 教程地址:https://www.showmeai.tech/tutorials/41 本文地址:https://www.showmeai.tech/article-d ...

  5. 自动化特征工程和自动建模在风控场景的应用

    一.背景和问题 目前,模型开发的流程越来越规范化,通常可以分为业务分析.样本准备.特征工程.模型构建.模型评估及监控这几个步骤.其中,特征工程和模型构建在建模的整个流程中依然非常耗时,并且非常依赖于模 ...

  6. 融360蒋宏:自动化特征工程和自动建模在风控场景的应用

    01 背景和问题 目前,模型开发的流程越来越规范化,通常可以分为业务分析.样本准备.特征工程.模型构建.模型评估及监控这几个步骤.其中,特征工程和模型构建在建模的整个流程中依然非常耗时,并且非常依赖于 ...

  7. python二值化特征_R与Python手牵手:特征工程(数值型变换)

    原标题:R与Python手牵手:特征工程(数值型变换) 作者:黄天元,复旦大学博士在读,目前研究涉及文本挖掘.社交网络分析和机器学习等.希望与大家分享学习经验,推广并加深R语言在业界的应用. 邮箱:h ...

  8. python特征工程有序变量处理_R与Python手牵手:特征工程(分类变量)

    作者:黄天元,复旦大学博士在读,热爱数据科学与R,热衷推广R在业界的应用.邮箱:huang.tian-yuan@qq.com.欢迎交流! 这次给大家分享的是对分类变量进行特征工程.很多时候我们会遇到一 ...

  9. 使用神经网络的自动化特征工程

    如何自动化并极大地改进数据建模中最繁琐的步骤之一 特征工程是生成精确模型的最重要步骤之一.但是没有人喜欢它,因为这个步骤非常繁琐,我坚信任何繁琐的事情都可以自动化.虽然我的解决方案并没有完全消除对手工 ...

  10. python基于不同方法实现特征工程常用的归一化技术Normalization对比分析

    在很多机器学习数据挖掘的项目中,都免不了要去构建特征工程,在面临特征选择的时候经常会出现我们所提取到的不同的特征维度的数据本身的量纲或者是取值范围是不同的,比如我们在对人的属性建模的时候,人的体温取值 ...

最新文章

  1. javascript数组降维_Javascript实现的数组降维——维度不同,怎么谈恋爱
  2. 丢掉uVision2吧,uVision早就有了
  3. 关于“AI是不是胡扯”之争:这是中国科技圈的胜利
  4. 6 个 K8s 日志系统建设中的典型问题,你遇到过几个?
  5. C语言学习之求∑k(k=100)+∑K*k(k=50)+∑1/k(k=10)
  6. 身于“乱世”,我们程序员应该如何打算?
  7. JAVA进阶day04多态(向上转化,向下转化)
  8. 1203.2——条件语句 之 switch语句
  9. 使用def文件简化dll导出
  10. 在Linux环境下搭建CCID测试环境
  11. Maven安装与配制环境【win7/win10】
  12. C的xml编程-libxml2(转)
  13. oracle查看asm磁盘,OracleOnLinux-Windows下如何查看ASM磁盘对应的设备
  14. 函数名或方法名前加下划线 python
  15. 2016-2017 ACM-ICPC, NEERC, Southern Subregional Contest A Toda2 贪心
  16. 2020大学生网络安全知识总决赛模拟题错题集(9)
  17. 物联网交互创新的探讨
  18. 计算机网络系统有哪些核心技术,超级计算机的核心技术是什么
  19. 开源的兰空图床LskyPro
  20. 2022-2027年中国家具电商市场竞争态势及行业投资前景预测报告

热门文章

  1. 【狂神说Redis】1NoSQL概述 1-1为什么使用NoSQL
  2. c# Conditional用法详解
  3. k touch for android,k touch for android
  4. 蒜头君任务系统C语言,白菜君的三角形 T3180 计蒜客
  5. fetch git pull 切换_git中fetch和pull的区别
  6. tensorflow-gpu_TensorFlow GPU单机多卡训练amp;reloadamp;predict
  7. java.util.zip.ZipException:invalid distance distance too far back
  8. SpringMVC框架学习上篇
  9. python struct 45s_python32版本,struct.error: argument for 's' must be a bytes object - 小众知识...
  10. CentOS7上实现Squid缓存服务器的两种模式