Py学习  »  机器学习算法

开源Featuretools:机器学习开发提速10倍!

AI前线 • 5 年前 • 359 次点击  
策划编辑 | Natalie
作者 | William Koehrsen
译者 | 无明
编辑 | Vincent
AI 前线导读:在数据科学领域,唯一不变的就是变化——随着方法论的发展,库、工具和算法也层出不穷。然而,不断提高自动化水平这一趋势却永远不会改变。近年来,数据科学在自动化模型选择和超参数调整方面取得了重大进展,但机器学习管道最重要的部分(特征工程)却几乎被忽略了。Python 开源库 Featuretools 却成为打开这一关键领域的超级入口。在本文中,我们将通过这个库来了解自动化特征工程将如何给机器学习锦上添花。

更多优质内容请关注微信公众号“AI 前线”(ID:ai-front)

自动化特征工程是一项相对较新的技术,但在使用它基于真实的数据集解决了大量数据科学问题之后,我确信它应该成为机器学习工作流程的标准组成部分。在这篇文章里,我们将看到其中两个项目的结果和结论,以及托管在 GitHub 上的代码。

每个项目都展示了自动化特征工程的一些优点:

  • 贷款还款预测:与手动特征工程相比,自动化特征工程可将机器学习开发时间缩短 10 倍,同时提供更好的建模性能。

  • 零售支出预测:自动化特征工程通过在内部处理时间序列过滤器来创建有意义的特征,并防止数据泄漏,从而实现成功的模型部署。

特征工程:手动与自动

特征工程是一个收集数据集并构建解释变量(特征)的过程,特征可用于训练机器学习模型(用于预测问题)。通常,数据分布在多个表中,必须被收集到单个表中,其中包含了特征行。

传统的特征工程方法基于领域知识单次构建特征,也就是手动特征工程,繁琐、耗时且容易出错。手动特征工程的代码与特定问题相关,需要为不同的数据集编写不同的代码。

自动化特征工程使用框架从一组相关数据表中自动提取有用且有意义的特征,改进了传统的标准工作流程,而且框架可以用于解决不同的问题。它不仅节省了时间,还创建了可解释的特征,并通过过滤与时间相关的数据来防止数据泄漏。

贷款还款:更快更好地创建模型

在解决家庭信用贷款问题时,数据科学家面临的主要困难是数据的大小和范围。看一下完整的数据集,你会发现,它们分散在七张表中,总共有 5800 万行数据。机器学习在训练模型时要求这些数据保存在单张表中,所以说,特征工程就是要将每个客户的所有信息收集到一张表中。

我先使用传统的手动特征工程来解决这个问题:我总共花了 10 个小时用于手动创建一组特征。首先,我阅读了其他数据科学家的研究成果,探索数据,并对问题领域进行了研究,以便获得必要的领域知识。然后我将知识翻译成代码,一次构建出一个特征。例如,为了找出客户在之前的贷款中的逾期次数,需要用到 3 张不同的表。

这些特性最终表现得相当不错,比基线特征(相对于排行榜最高得分)提高了 65%,这表明了特征工程的重要性。

然而,效率低下却是个令人感到头疼的问题。平均每个特征耗时超过 15 分钟,因为传统方法一次只能构建一个特征。

除了繁琐耗时外,手动特征工程还存在其他问题:

  • 特定于问题:我花几个小时写的代码不能用在其他问题上。

  • 容易出错:每行代码都有出错的可能性。

此外,手动设计的特征受人类创造力和耐心的限制:我们只能想出这么多特征,也只有这么多时间。

从手动到自动

Featuretools 的自动化特征工程能力甚至可以让像我这样的领域新手从一组相关数据表中创建出数千个相关特征。我们只需要知道数据表的基本结构和它们之间的关系,然后在实体集(一种数据结构)中指明。在有了实体集之后,我们可以使用一个名为深度特征合成(DFS)的方法,在一个函数调用中构建出数千个特征。

DFS 使用称为“原语”的函数来聚合和转换数据。这些原语可以很简单,比如获取列的平均值或最大值,也可以很复杂,甚至需要特定的专业知识,因为 Featuretools 允许我们自定义原语。

特征原语包含了很多需要手动完成的操作,但如果使用 Featuretools,我们可以在任意关系数据库中使用相同的语法,而不需要重写代码。此外,当我们将原语堆叠在一起创建深层特征时,DFS 就更是能体现出它的强大威力。

DFS 操作只需一行代码。在这个示例里,我们使用数据集中的 7 张表为每个客户端创建数千个特征(ft 从 featuretools 库导入):

以下是我们通过 Featuretools 自动获得的 1820 个特征中的几个示例:

  • 客户在以前的贷款中支付的最高总额。这是基于 3 张表使用 MAX 和 SUM 原语获得的。

  • 客户以前的信用卡债务平均值的百分位排名。这是基于两张表使用 PERCENTILE 和 MEAN 原语获得的。

  • 客户是否在申请过程中提交了两份文件。这里使用 AND 转换原语和 1 张表。

这些特征都是使用简单的聚合构建的,因此对人类来说是可解释的。Featuretools 创建的很多特征与我手动创建的是一样的,当然也有很多我从未想到过的,或者是我根本没有时间去实现的。并非每个特征都与特定问题相关,并且某些特征具有高度相关性,但是,特征多总比特征少要好!

经过一些特征选择和模型优化后,与手动特征相比,这些特征在预测模型中略胜一筹,总体开发时间为 1 小时,与手动过程相比减少了 10 倍。Featuretools 之所以这么快,一方面是因为它需要较少的领域知识,另一方面它需要的代码行数要少得多。

我承认,学习 Featuretools 需要花费一些时间,但这是一项可以带来回报的投资。花一个小时左右来学习 Featuretools,就可以用它来解决任何机器学习问题。

下图表总结了我在解决贷款还款问题上的各项数据:

  • 开发时间:手动 10 小时与自动 1 小时.

  • 生成的特征数量:手动 30 个与自动 1820 个。

  • 相对于基线模型的改进百分比:手动 65%与自动 66%。

此外,我为这个项目编写的 Featuretools 代码可以应用于任何数据集,而手动工程代码必须被丢弃,并为下一个数据集编写新的代码!

零售支出:构建有意义的特征并防止数据泄漏

对于第二个数据集,即在线的带有时间戳的客户交易记录,预测要做的是将客户分为两个部分,即下个月花费超过 500 美元的人和花费不会超过 500 美元的人。我们没有将所有标签放在一个月中,而是为每个客户使用多个标签。我们可以将他们在 5 月份的支出作为标签,然后是 6 月,并依此类推。

多次使用相同的客户作为观察结果将给创建训练数据带来困难:在为特定月份生成客户特征时,即使我们可以访问这些数据,却不能使用未来几个月的数据信息。在实际部署中,我们不可能会拥有未来的数据,因此无法使用它来训练模型。企业经常栽在这个问题上,因为训练模型使用了无效数据,所以部署到生产环境中通常比在开发环境中表现更糟糕。

所幸的是,Featuretools 有效地解决了数据的时序问题。我们将上述的数据帧传给 DFS 函数,其中截止时间(cutoff)表示在这个位置我们不能使用任何数据作为标签,Featuretools 在构建特征时会自动将截止时间考虑在内。

给定月份客户的特征是基于给定月之前的数据生成的。请注意,创建这些特征集的调用方法与贷款还款问题加上额外 cutoff_time 的调用方法是一样的。

DFS 的运行结果是一个由特征组成的表,每个客户每月对应一张表。我们可以使用这些特征来训练模型,然后基于月份进行预测。此外,模型中的特征不会使用未来的信息,以免产生误导性的训练分数。

通过使用自动化特征,我训练出了一个机器学习模型,在用它预测某个月的客户支出类别时,与已知的基线相比,达到了 0.90 ROC AUC。

除了令人印象深刻的预测性能外,Featuretools 提供了同样有价值的东西:可解释的特征。让我们来看看随机森林模型中的 15 个最重要的特征:

从特征重要性程度可以看出,客户将在下个月花多少钱的最重要的预测因素是他们之前花费了多少钱 SUM(puchases.total) 和购买数量 SUM(purchases.quantity)。这些是我们可以手动构建的特征,但如果使用手动的方式,将不得不担心造成数据泄漏,并创建出一个在开发中比在部署中表现更好的模型。

如果这个工具已经可以创建出有意义的特征,并且不需要我们为特征的有效性担心,那么为什么还要手动实现呢?此外,自动化特征在问题领域中是完全可解释的。

即使我花了很多时间在手动特征工程上,比使用 Featuretools 花费的时间要多得多,但在生成特征时的表现仍然存在很大差异。下图显示了使用在两个数据集训练的模型对未来一个月的客户销售进行分类的 ROC 曲线。越是靠近左侧和顶部的曲线表示预测的效果越好:

我不确定手动特征是不是基于有效数据生成的,但如果使用 Featuretools,我就不必担心数据泄漏问题。或许,对于一名数据科学家来说,无法通过手动的方式设计一组有用的特征是一种“无能”的表现,但既然这个工具可以帮助我们更安全地完成这个任务,那为什么不用它呢?

结论

经过了这些项目后,我确信自动化特征工程应该是机器学习工作流程不可或缺的组成部分。虽然这些技术还不够完美,但仍然能够显著地提升效率。

自动化特征工程的主要优势如下:

  • 将实现时间缩短了 10 倍。

  • 实现相似或更好的模型表现。

  • 提供具有现实意义的可解释特征。

  • 防止不正确使用数据,造成模型无效。

  • 可以添加到现有的机器学习工作流程中。

重要链接

  • FeatureTools:https://www.featuretools.com/

  • 贷款还款示例代码:https://github.com/Featuretools/Automated-Manual-Comparison/tree/master/Loan%20Repayment

  • 零售支出示例代码:https://github.com/Featuretools/Automated-Manual-Comparison/tree/master/Retail%20Spending

  • DFS:https://www.featurelabs.com/blog/deep-feature-synthesis/

英文原文:

https://towardsdatascience.com/why-automated-feature-engineering-will-change-the-way-you-do-machine-learning-5c15bf188b96

今日荐文

点击下方图片即可阅读

集Python、C++、R为一体!Julia 1.0重磅发布

精品推荐

人工智能现已处于白热化阶段,很多程序员转去做人工智能领域,其优势就在于具备行业基础,但人工智能公司现在对人才的综合技术能力要求变高,有哪些高效的学习路径可以帮助我们提升综合技能?我们汇集了 30 多个一线技术专家分享自己的开发经验和实例,都是每个技术人在进阶的道路上必备的技术能力。

如果你喜欢这篇文章,或希望看到更多类似优质报道,记得给我留言和点赞哦!



今天看啥 - 高品质阅读平台
本文地址:http://www.jintiankansha.me/t/PutkFNJYeG
Python社区是高质量的Python/Django开发社区
本文地址:http://www.python88.com/topic/22327
 
359 次点击