数据集|为什么自动特征工程将会改变我们做机器学习的方式?( 二 )


正如在Featuretools中实现的那样 , 自动化特征工程甚至允许像我这样的领域新手从一组相关数据表中创建数千个相关特征 。 我们只需要知道表的基本结构以及它们之间的关系 , 我们在一个名为entity set的数据结构中跟踪它们 。 一旦我们有了一个entity set , 使用一个名为Deep Feature Synthesis (DFS)的方法 , 我们就能够在一个函数调用中构建数千个特征 。
数据集|为什么自动特征工程将会改变我们做机器学习的方式?文章插图
使用Featuretools的自动化特征工程过程 。
DFS使用"原语" 来聚合和转换数据 。 这些原语可以简单到取列的平均值或最大值 , 也可以复杂到基于主题专业知识 , 因为Featuretools允许我们定义自己的自定义原语 。
Feature原语包含许多我们已经手工完成的操作 , 但是使用Featuretools , 我们可以在任何关系数据库中使用相同的语法 , 而不是重新编写代码来在不同的数据集中应用这些操作 。 此外 , 当我们将原语堆叠在一起以创建深层特征时 , DFS的强大功能就显现出来了 。 (有关DFS的更多信息 , 请查看该技术的发明者之一所写的这篇博客文章 。 )
深度特征综合是灵活的—允许它应用于任何数据科学问题—和强大的—揭示我们的数据通过创建深度特征的洞察力 。 我将省去设置所需的几行代码 , 但是DFS的操作只需要一行 。 在这里 , 我们使用数据集中的所有7个表为每个客户端创建了数千个特征( ft 是导入的featuretools 库):
数据集|为什么自动特征工程将会改变我们做机器学习的方式?文章插图
下面是我们从Featuretools自动获得的1820特征中的一部分:

  • 客户在过往贷款上所支付的最高金额 。 这是使用 MAX和 SUM 原语跨3个表创建的 。
  • 客户过去平均信用卡债务的百分位排名 。 这在两个表中使用了 PERCENTILE和 MEAN 原语 。
  • 客户是否在申请过程中递交了两份文件 。 它使用 AND 转换原语和一个表 。
这些特征中的每一个都是使用简单的聚合构建的 , 因此是人类可解释的 。 Featuretools创建了许多与我手工创建的相同的功能 , 但也有成千上万个我从未想过的特征 , 或者是我没有时间去实现的特征 。 并不是每个单独的特征都与问题相关 , 而且有些特征是高度相关的 , 尽管如此 , 拥有太多的特征要比拥有太少更好!
在进行了少量的特征选择和模型优化之后 , 这些特征在预测模型中的表现略好于总体开发时间为1小时的手动特性 , 比手动过程减少了10倍 。 Featuretools要快得多 , 这是因为它需要的领域知识更少 , 而且需要编写的代码行也更少 。
我承认学习Featuretools需要花费一点时间 , 但这是一项会有回报的投资 。 花一个小时左右的时间来学习Featuretools , 你可以把它应用到任何机器学习问题上 。
下面的图表总结了我在还款问题上的经验:
数据集|为什么自动特征工程将会改变我们做机器学习的方式?文章插图
数据集|为什么自动特征工程将会改变我们做机器学习的方式?文章插图
数据集|为什么自动特征工程将会改变我们做机器学习的方式?文章插图
自动化和手工特征工程在时间、特征数量和性能上的比较 。
  • 开发时间:占所有需要作出最终功能工程代码:10小时手工 vs . 1小时自动化
  • 该方法产生的特征数量:30个特征手动 , 1820个特征自动
  • 相对于基准的改进是 , 使用基于以下特征的模型(65%手动 vs . 66%自动)
我的结论是 , 自动化特征工程不会取代数据科学家 , 而是通过显著提高效率 , 让她有更多的时间花在机器学习管道的其他方面 。 此外 , 我为第一个项目编写的Featuretools代码可以应用于任何数据集 , 而手工工程代码必须被丢弃 , 并为下一个数据集完全重写!
零售支出:构建有意义的功能并防止数据泄漏
对于第二个数据集 , 一个在线时间戳客户交易记录 , 预测问题是将客户分为两类 , 一类是下个月将花费超过500美元的客户 , 另一类则不会 。 但是 , 每个客户都是每个月会标记好几次 , 而不是一个月只标记一次 。 我们可以把他们5月份的消费作为一个标签 , 然后是6月份 , 以此类推 。
数据集|为什么自动特征工程将会改变我们做机器学习的方式?文章插图
每个客户都被多次用作训练样本
将每个客户多次作为观察对象使用会给创建训练数据带来困难:当为给定月份的客户创建特征时 , 我们不能使用来自未来月份的任何信息 , 即使我们可以访问这些数据 。 在部署中 , 我们“永远不会有未来的数据” , 因此不能使用它来训练模型 。 公司经常与这个问题作斗争 , 并且经常部署一个在现实世界中比在开发中做得差得多的模型 , 因为它是使用无效数据进行训练的 。