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

大带宽_恶棍天使百度云_是什么

小七 141 0

基于XGBoost和Databricks运行时的贷款风险分析

在Databricks中试试这个笔记本系列对于那些靠客户持有的贷款利息赚钱的公司来说,这总是为了增加底线。能够评估贷款申请的风险可以节省贷款人持有太多风险资产的成本。数据科学家的工作是对客户数据进行分析,并制定直接影响贷款批准的业务规则。花费时间构建这些机器学习模型的数据科学家是一种稀缺资源,而且常常被封闭在沙箱中:尽管他们日复一日地处理数据,但他们依赖于数据工程师来获得最新的表格。随着数据以指数级的速度增长,他们依赖于基础设施团队来提供计算资源。一旦模型构建过程完成,他们必须信任软件开发人员将他们的模型代码正确地转换为可生产的代码。在这里,Databricks统一分析平台可以帮助弥合工作流链不同部分之间的差距,并减少数据科学家、数据工程师和软件工程师之间的摩擦。除了减少操作摩擦外,Databricks是运行最新机器学习模型的中心位置。用户可以利用本机Spark MLLib包或下载任何开源Python或rml包。使用用于机器学习的Databricks运行时,Databricks集群使用XGBoost、scikit learn和numpy以及流行的深度学习框架(如TensorFlow、Keras、Horovod及其依赖项)进行了预配置。在本博客中,我们将探讨如何:导入示例数据源以创建Databricks表使用Databricks可视化工具探索数据对数据执行ETL代码执行ML管道,包括模型调整XGBoost Logistic回归导入数据在我们的实验中,我们将使用公共贷款俱乐部的贷款数据。包括2012年至2017年的所有融资贷款。每笔贷款包括申请人提供的申请人信息以及当前贷款状态(当前、逾期、全额支付等)和最新付款信息。更多信息,请参阅贷款俱乐部。在本地下载数据后,可以在Databricks工作区中创建一个数据库和表来加载此数据集。有关更多信息,请参阅Databricks文档>用户指南>数据库和表>为AWS或Azure创建表部分。在本例中,我们创建了Databricks数据库amy和表loanstats_2012_2017。下面的代码片段允许您通过PySpark在Databricks笔记本中访问此表。#进口贷款统计表贷款统计=火花表("amy.loanstats 2012年7月2017年")浏览您的数据使用Databricks display命令,您可以使用Databricks本机可视化。#查看我们数据的条形图显示(贷款统计)在这种情况下,我们可以通过查看贷款级别和贷款金额来查看资产配置。用PySpark数据帧API处理数据正如《清理大数据》(Forbes)中所指出的,数据科学家80%的工作都是数据准备工作,而且往往是工作中最不愉快的方面。但是使用PySpark,您可以编写Spark SQL语句或使用PySpark数据帧API来简化数据准备任务。下面是简化数据筛选的代码片段。#进口贷款统计表loan_stats=贷款_stats.filter( \贷款_贷款状态统计.isin(\违约","冲销","全额支付"])\).带列("坏账贷款",(贷款_贷款状态统计=="全额支付")).cast("字符串")完成此ETL过程后,可以再次使用display命令查看散点图中已清理的数据。#查看我们数据的条形图显示(贷款统计)要在地图可视化中查看按状态划分的同一资产数据,可以使用display命令组合PySpark DataFrame API,使用groupby语句和agg(聚合),如下面的代码片段。#查看资产数据地图展示(贷款_统计.groupBy("地址州").agg((count(col("annual_inc"))。别名("ratio"))使用XGBoost训练ML模型虽然我们可以快速可视化我们的资产数据,但我们想看看是否可以创建一个机器学习模型,使我们能够根据可用参数预测贷款的好坏。如以下代码片段所述,我们将通过构建ML管道来预测坏账(定义为label):执行插补器以填充numerics属性中缺少的值(输出为numerics_out)使用索引器处理分类值,然后使用OneHotEncoder通过OneHotEncoder将其转换为向量(输出为categoricals_类)。我们的ML管道的特性是通过结合分类的\u类和数字的\u out来定义的。接下来,我们将通过执行VectorAssembler将这些特性组合在一起。如前所述,我们将建立我们的标签(即,我们将尝试预测的内容)作为坏账列。在确定要应用哪个算法之前,应用标准的定标器来构建我们的流水线数组(pipelineAry)。虽然前面的代码片段是用Python编写的,但是下面的代码示例是用Scala编写的,以允许我们利用xgboost4jspark。笔记本系列包括Python代码,该代码将数据保存在Parquet中,然后在Scala中读取数据。//补全缺失值的插补估计量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("标签")//应用标准缩放器val scaler=新标准缩放器().setInputCol("功能").setOutputCol("缩放功能").setWithMean(真).setWithStd(真)//构建管道阵列val pipelineAry=索引器++数组(oneHotEncoders、importers、assembler、labelindex、scaler)现在我们已经建立了管道,让我们创建XGBoost管道并将其应用于我们的培训数据集。//创建XGBoostEstimatorval xgBoostEstimator=新xgBoostEstimator(映射[字符串,任何]("数字回合"->5,"目标"->"二进制:逻辑","nworkers"->16,"n读"->4)).setFeaturesCol("缩放功能").setLabelCol("标签")//创建XGBoost管道val xgBoostPipeline=新管道().setStages(pipelineAry++数组(xgBoostEstimator))//基于训练数据集创建XGBoost模型val xgBoostModel=XG增压管道.fit(数据集序列)//根据验证数据集测试我们的模型val预测=xgBoostModel.transform(数据集有效)显示(预测.选择("概率","标签")注意,"nworkers"->16,"nthreads"->4配置为使用16个vm,每个vm有4个vcpu和大约30gb的内存。现在我们有了我们的模型,我们可以用包含结果的预测来对照验证数据集测试我们的模型。回顾模型有效性现在我们已经构建并训练了XGBoost模型,让我们使用binaryClassificationEvaluator来确定它的有效性。//包含BinaryClassificationEvaluator进口org.apache.spark网站.ml.evaluation.BinaryClassificationEvaluator//评估val evaluator=新的二进制ClassificationEvaluator().setRawPredictionCol("概率")//计算验证AUCval精度=评估器。评估(预测)经计算,XGBoost验证曲线下数据面积(AUC)为:~0.6520。使用MLlib交叉验证优化模型我们可以尝试通过CrossValidator使用MLlib交叉验证来优化我们的模型,如下面的代码片段所述。我们首先建立参数网格,这样我们就可以用不同参数值的网格执行多个运行。使用我们用来测试模型有效性的同一个BinaryClassificationEvaluator,我们通过结合BinaryClassificationEvaluator和ParamGridBuilder,在更大范围内使用不同的参数组合,并将其应用到我们的CrossValidator()。//构建参数网格val paramGrid=新建ParamGridBuilder().添加网格(xg增压测试仪。最大深度,阵列(4,7)).添加网格(XG增压测试仪.eta,数组(0.1,0.6)).添加网格(XG增压器。圆形,阵列(5,10)).build()//将计算器设置为BinaryClassificationEvaluatorval evaluator=新的二进制ClassificationEvaluator().setRawPredictionCol("概率")//建立CrossValidator()val cv=新交叉验证器().setEstimator(xgBoostPipeline).setEvaluator(计算器).setEstimatorParamMaps(paramGrid).setNumFolds(4个)//运行交叉验证,并选择最佳参数集。val cvModel=等速配合(数据集序列)注意,对于XGBoostEstimator的初始配置,我们使用num_round,但是我们使用round(num_round不是估计器中的一个属性)这个代码片段将运行交叉验证并选择最佳参数集。然后我们可以重新运行我们的预测并重新计算精度。//根据cvModel和validation数据集测试我们的模型val预测值cvModel.transform(数据集有效)显示(预测_cv.选择("概率","标签")//计算cvModel Validation AUCval精度=评估器。评估(预测值)我们的精确度提高了