西安市建设局官方网站,怎么自己做单页网站,环球影城可以寄存东西吗,wordpress后台设置中文随着技术的快速发展#xff0c;在数据科学领域中#xff0c;包括库、工具和算法等总会不断地变化的。然而#xff0c;一直都有这么一个趋势#xff0c;那就是自动化水平不断地提高。
近些年来#xff0c;在模型的自动化选择和超参数调整方面取得了一些进展#xff0c;但…随着技术的快速发展在数据科学领域中包括库、工具和算法等总会不断地变化的。然而一直都有这么一个趋势那就是自动化水平不断地提高。
近些年来在模型的自动化选择和超参数调整方面取得了一些进展但是机器学习中最重要的领域 — 特征工程却被严重地忽视了。这个重要领域中最成熟的工具就是Featuretools一个开源的Python库。在本文中我们将使用这个库来了解一下特征工程自动化将如何改变你更好地进行机器学习的方式。 特征工程自动化是一种相对较新的技术但是它解决了许多实际数据集的使用问题。在这里我们将用GitHub上的Jupyter Notebooks提供的代码来看看其中两个项目的结果和最终结论。
每个项目都强调了特征工程自动化的一些好处
·贷款偿还能力预测与人工特征工程相比自动化的特征工程可以将机器学习开发的时间缩短10倍同时提供更好的建模性能表现笔记
·消费支出预测自动化的特征工程通过内部的处理时间序列过滤器来创建有实际意义的特征同时防止数据泄漏从而实现成功的模型部署笔记
特征工程人工与自动
特征工程是获取数据集并构造可解释的变量—特征的过程用于训练预测问题的机器学习模型。通常数据分布在多个表中并且必须汇集到一个表之中其中的行包含观察结果和列中的特征。
传统的特征工程方法是使用相关领域知识创建一个特征这是一个冗长、耗时且容易出错的过程称为人工特征工程。人工特征工程是依赖于具体问题的必须为每个新数据集重新编写代码。
特征工程自动化通过自动从一组相关的数据表中提取有用且有意义的特征并使用一个可应用于任何问题的框架来改进这个标准工作流。它不仅减少了在特征工程上花费的时间而且还创建了可解释的特征并通过过滤具有时间依赖性的数据来防止数据泄漏。
贷款偿还建立更快更好的模型
当数据科学家在处理家庭信贷贷款问题的时候所面临的主要难题是数据的大小和分布。看看完整的数据集你会发现面对的是分布在7个表中的5800万行数据。 我曾经使用传统的人工特征工程花了10个小时创建了一组特征。首先我查阅了其他数据科学家的成果还查看了相关的数据并研究了问题域以获得必要的相关领域知识。然后我将这些知识翻译成代码一次创建一个特征。作为单一的人工特征的一个例子我找到了客户以前贷款的逾期还款总数这一操作需要用到3个不同的表。
最终人工设计的特征表现的相当好比基线特征提高了65%表明了正确特征设计的重要性。
然而效率却非常低下。对于人工特征工程我最终花了超过15分钟来完成每个特征因为我使用传统的方法一次生成一个特性。 除了单调乏味和耗时之外人工特征工程还有以下问题
·用于特定问题:我花费了很长时间编写的代码并不能应用于任何其它的问题
·易错:每一行代码都会有可能导致其它的错误
另外最终的人工设计的特征受到了人类创造力和耐心方面的限制我们只能考虑创建这么多的特征并且只能花费这么多的时间。
特征工程自动化的承诺是通过获取一组相关的表并使用可以应用于所有问题的代码来自动创建数以百计有用的特征进而跨越这些限制。
从人工到自动化特征工程
特征工程自动化甚至允许像我这样的新手在一组相关的数据表中可以创建数以千计的相关特征。我们只需要知道表的基本结构以及它们之间的关系我们在一个称为实体集的单一数据结构中来跟踪它们。一旦我们有了一个实体集使用一个称为深度特征合成Deep Feature SynthesisDFS的方法我们就能够在一个函数调用中创建数以千计的特征了。 DFS使用称为“primitives”的函数来进行聚合和转换数据。这些primitives可以简单到仅获取一个平均值或列的最大值也可以复杂到基于主题的专业知识因为FeatureTools允许我们定义自己的primitives。
特征primitives包括许多人工操作但是通过使用FeatureTools我们可以在任何关系数据库中使用相同准确的语法而不是再重新编写代码并在不同的数据集中使用相同的操作。此外当我们将primitives相互堆叠在一起来创建深层次的特征时DFS的威力就来了。
深度特征合成是灵活的它被允许应用于任何数据科学领域的问题。它同时也是很强大的通过创建深度特征来揭示我们对数据的推断。
我会为你省去环境设置所需的几行代码但DFS只在一行中运行。在这里我们使用数据集中的所有7个表为每个客户生成数千个特征
# Deep feature synthesis
feature_matrix, features ft.dfs(entitysetes, target_entityclients,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(entitysetes, target_entitycustomers,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倍
·在同一级别或更高级别上实现的建模性能
·交付的具有实际意义的可解释性特征
·防止使用不正确的数据而导致的模型无效
·适应现有的工作流程和机器学习模型 原文链接 本文为云栖社区原创内容未经允许不得转载。