云服务器价格_云数据库_云主机【优惠】最新活动-搜集站云资讯

服务器_网站建设需要哪些步骤_哪个好

小七 141 0

使用AutoML工具箱自动预测贷款违约

下载以下笔记本并立即试用AutoML工具箱:使用XGBoost(0.90)评估贷款批准的风险|使用AutoML工具箱简化贷款风险分析XGBoost模型优化此博客最初发布于2019年9月10日;已于2019年10月2日更新。在之前的博客和笔记本《贷款风险分析与XGBoost》中,我们探讨了如何构建机器学习模型来改进坏账预测的不同阶段。我们回顾了三种不同的线性回归模型——GLM、GBT、以及,以及XGBoost–在每个阶段执行耗时的手动优化模型的过程。在这篇博文中,我们将向您展示如何使用Databricks Labs AutoML工具箱显著简化构建、评估和优化机器学习模型的过程。使用AutoML工具箱还可以让您更快地交付结果,因为它允许您自动化各种机器学习管道阶段。正如您将看到的,我们将使用XGBoost 0.90运行相同的贷款风险分析数据集,使用AutoML的AUC为0.6732到0.72,结果会有显著改善工具箱。从业务价值(通过防止坏账节省的金额)来看,AutoML工具箱生成的模型可能会节省6888万美元(而使用原始技术则为2322万美元)。有什么问题吗?对于我们目前的实验,我们将继续使用公共贷款俱乐部贷款数据,其中包括2012年至2017年的所有融资贷款。每笔贷款包括申请人提供的申请人信息以及当前贷款状态(当前、逾期、全额支付等)和最新付款信息。我们利用申请者信息来确定是否可以预测贷款是否不良。有关更多信息,请参阅贷款风险分析与XGBoost和Databricks Runtime For Machine Learning。让我们从结尾开始AutoML工具箱提供了一种简单的方法来自动化机器学习管道中的各种任务,在我们的示例中,我们将使用两个组件:Feature Importances和Automation Runner,它将自动执行从矢量化功能到迭代和调整机器学习模型的任务。简而言之:AutoML的FeatureImportances自动发现哪些特性(来自数据集的列)是重要的,并且在创建模型时应该包括这些特性。AutoML的AutomationRunner自动化了机器学习管道的构建、训练、执行和调优,以创建一个最佳的ML模型。当我们使用XGBoost和Databricks Runtime手动创建了一个新的ML模型,用于使用XGBoost 0.90进行机器学习,我们能够将AUC从0.6732提高到0.72!我错过了什么?在传统的ML管道中,有许多手工编写的组件来执行特性化、模型构建和调优的任务。这些阶段包括:特征工程:我们将首先定义潜在的特征,将它们矢量化(数字和分类数据需要不同的步骤),然后选择我们要使用的特征。模型构建和调整:这是构建和训练模型、执行模型和检查度量、调整模型、更改模型和重复此过程直到最终构建模型的高度重复的阶段。在接下来的几节中,我们将使用XGBoost(0.90)笔记本从贷款批准评估风险中提取的代码和可视化描述这些步骤如《使用AutoML工具箱简化贷款风险分析XGBoost模型优化笔记本》中所述,展示使用AutoML工具箱有多简单。我们的专题介绍在获得可靠和干净的数据后,数据科学家的第一步是确定哪些列(即特征)将用于他们的模型。确定重要特性:传统的ML管道在我们的例子中,我们创建了一个二进制分类器(这是否是不良贷款?)我们将需要定义潜在的特征,将数字和分类特征矢量化,最后选择将在创建模型时使用的功能。展开以查看传统识别重要功能的详细信息//贷款风险分析数据集val源数据=火花。阅读("...")//查看数据显示(sourceData)从上表中可以看到,贷款风险分析数据集包含数值列和分类列。这是一个重要的区别,因为对于数值列和分类列,将有一组不同的步骤来最终组装一个向量,该向量将用作ML模型的输入。为了更好地理解自变量之间是否存在相关性,我们可以使用display命令快速检查sourceData,以散点图的形式查看这些数据。您可以通过计算相关系数来进一步分析这些数据;一种流行的方法是使用pandas.corr()。虽然我们的Databricks笔记本是用Scala编写的,但我们可以快速、轻松地使用Python pandas代码,如下所述。%蟒蛇#使用熊猫计算`corr`pdf校正=火花.sql("选择贷款金额、员工长度、年度收入、dti、delinq 2年、revol_util、total_acc、credit_length_years、int_rate、net、issue_year、label from sourceData").toPandas().corr()#按贷款金额查看相关系数显示(pdf_校正位置[:,['贷款']])  正如前面的散点图(请在上面展开了解这些细节)中所指出的,没有明显的高度相关的数值变量。基于此评估,我们将在创建模型时保留所有列。识别重要特性:AutoML工具箱需要注意的是,识别重要特征的过程可能是一个高度迭代和耗时的过程。有太多不同的技术可以应用,所以这个过程本身就是一本书(例如:面向机器学习的特征工程:数据科学家的原理和技术)。AutoML工具箱包括FeatureImportances类,这些特性可以自动识别最重要的特性;这些都是通过下面的代码片段完成的。//计算特征重要性(fi)val fiConfig=一氧化碳GenerateConfigurationMap("XGBoost","分类器",genericMapOverrides)//因为我们在这里使用的是XGBoost,所以并行度不能大于2倍的节点数fiConfig.tunerConfig.tuner并行性=节点计数*2val fimainconfi=公司ConfigurationGenerator.generateFeatureImportanceConfig(fiConfig)//生成特征重要性val importances=新功能重要性(sourceData,fiMainConfig,"count",20.0).generateFeatureImportances()//显示功能重要性显示(重要。重要)在这个特定的例子中,三十(30)个不同的Spark作业被自动生成并执行,以找到需要包含的最重要的特性。注意,启动的Spark作业的数量将根据几个因素而变化。我们不用花几天或几周的时间来手动研究数据,而是用四行代码,在几分钟内就确定了这些特性。让我们建造它!既然我们已经确定了最重要的特性,那么让我们为贷款风险数据集构建、培训、验证和调优ML管道。传统模型构建和调整以下步骤是使用XGBoost(0.90)笔记本代码评估贷款批准风险的节略版本。展开以查看传统的模型构建和调整详细信息首先,我们将定义分类列和数值列。//定义我们的分类列和数字列val categoricals=Array("术语","家庭所有权","目的","地址状态","验证状态","应用程序类型")val numerics=Array("贷款金额","员工长度","年度收入","dti","交货期2年","revol_util","总账户","信用长度,以年计")然后,我们将按照下面的代码片段构建ML管道。如代码中的注释所示,我们的管道有以下步骤:VectorAssembler:基于我们的特性列,组装一个特征向量用于完成数值数据缺失值的输入估计器StringIndexer将字符串值编码为数值OneHotEncoding将类别特征(由StringIndexer数值表示)映射到二进制向量labelIndex:指定我们的标签是什么(即真实值)与我们的预测标签(即不良贷款或良好贷款的预测值)StandardScaler:规范化我们的特征向量,以最小化不同尺度特征值的影响。注意,这个例子是我们比较简单的二进制分类示例之一;还有很多方法可以用来提取、转换和选择特征。进口org.apache.spark网站.ml.feature.VectorAssembler进口org.apache.spark网站.ml.feature.StringIndexer//补全缺失值的插补估计量val数字\u out=数字地图("出"+"出")val插补器=新插补器().setInputCols(数字).setOutputCols(数字输出)//对我们的分类数据应用StringIndexerval类别\u idx=分类.map("uIdx")val索引器=分类.map(x=>new StringIndexer().setInputCol(x).setOutputCol(x+"_idx").setHandleInvalid("keep"))//对StringIndexed分类数据应用OHEval分类\u类=分类.map(+"_类")val oneHotEncoders=新OneHotEncoderEstimator().setInputCols(类别\u idx).setOutputCols(类别\u)//设置功能列val featureCols=类别\u类++数字\u out//为我们的数字列创建汇编程序(包括标签)val assembler=新矢量汇编程序().setInputCols(功能列).setOutputCol("功能")//建立标签val labelIndexer=新字符串索引器().setInputCol("标签").setOutputCol("predictedLabel")//应用标准缩放器val scaler=新标准缩放器().setInputCol("功能").setOutputCol("缩放功能").setWithMean(真).setWithStd(真)//构建管道阵列val pipelineAry=索引器++Arr