贷款风险分析与XGBoost砖运行时机器学习
赚钱的公司客户持有的贷款利息,它总是关于增加底线。能够评估贷款申请的风险可以节省银行持有太多的高风险资产的成本。数据科学家的工作运行分析你的客户数据,让业务规则,将直接影响贷款批准。
数据科学家,花时间构建这些机器学习模型是一种稀缺资源,他们往往是孤立的一个沙盒:
- 尽管他们处理数据的一天,他们依赖于数据工程师获得最新的表。
- 数据正以指数速度增长,它们依赖于基础设施团队提供计算资源。
- 一旦完成了模型构建过程,他们必须信任软件开发人员正确翻译他们的模型代码生产准备代码。
这就是砖bob体育亚洲版统一的分析平台bob体育客户端下载可以帮助弥合这些差距的不同部分,工作流链,减少数据科学家之间的摩擦,数据工程师和软件工程师。
除了减少操作摩擦,砖是一个中央位置运行最新的机器学习模型。用户可以利用本机火花MLLib包或下载任何开源Python或R毫升包。bob下载地址与砖运行时机器学习砖集群与XGBoost预配置,scikit-learn, numpy以及流行的深度学习框架,如TensorFlow Keras, Horovod,他们的依赖性。
在这个博客中,我们将探索如何:
- 导入样本数据源创建数据砖表
- 探索使用砖可视化的数据
- 执行ETL代码对您的数据
- 执行毫升管道包括XGBoost逻辑回归模型调优
导入数据
对我们的实验中,我们将使用公共贷款俱乐部贷款数据。它包括所有资助贷款从2012年到2017年。每笔贷款包括申请人申请人所提供的信息以及贷款现状(目前,晚了,完全支付,等等)和最新的支付信息。有关更多信息,请参阅贷款俱乐部数据模式。
一旦你下载在本地的数据,您可以创建一个数据库和表内数据砖工作区加载这个数据集。有关更多信息,请参阅砖文档>用户指南> >创建一个表部分数据库和表AWS或Azure。
在这种情况下,我们已经创建了数据库数据砖艾米
和表loanstats_2012_2017
。下面的代码片段允许您访问此表内数据砖通过PySpark笔记本。
#进口贷款统计数据表loan_stats = spark.table (“amy.loanstats_2012_2017”)
探索你的数据
与砖显示
砖的命令,您可以使用本机可视化。
#查看我们的数据的柱状图显示器(loan_stats)
在这种情况下,我们可以查看资产配置通过回顾贷款品位和贷款额度。
绿豆数据与PySpark DataFrame API
正如清洁大数据(福布斯)数据科学家,80%的工作是数据准备,往往是最不愉快的方面的工作。但随着PySpark,您可以编写SQL语句或火花使用PySpark DataFrame API来简化数据准备工作。以下是代码片段来简化数据的过滤。
#进口贷款统计表loan_stats=loan_stats。过滤器(\loan_stats.loan_status。型号(\(“默认”,“充电”,“完全支付”))\).withColumn (“bad_loan”,(~(loan_stats.loan_status==“全部付讫”))。投(“字符串”))
ETL过程完成之后,您可以使用显示
命令再次检查洁净散点图中的数据。
#查看我们的数据的柱状图显示器(loan_stats)
查看相同的资产数据爆发国家地图上可视化,您可以使用显示
命令结合PySpark DataFrame API使用集团
语句与gg
下面的代码片段等(聚合)。
#视图地图的我们的资产数据显示器(loan_stats.groupBy (“addr_state”) .agg ((数(坳(“annual_inc”))) .alias(比率)))
我们使用XGBoost毫升模型训练
虽然我们可以快速可视化资产数据,我们希望看到如果我们能创建一个机器学习模型,将使我们能够预测如果贷款基于可用的参数是好还是坏。正如下面的代码片段中,我们将预测bad_loan
(定义为标签
)通过构建我们毫升管道如下:
- 执行一个
输入
内填充缺失值数字组成
属性(输出numerics_out
) - 使用
索引器
处理分类值,然后将它们转换为使用OneHotEncoder通过向量oneHotEncoders
(输出categoricals_class
)。 - 的
特性
为我们毫升管道是由结合categorical_class
和numerics_out
。 - 接下来,我们将组装在一起执行的特性
VectorAssembler
。 - 如前所述,我们将建立
标签
(即我们试图预测)的bad_loan
列。 - 建立应用哪个算法之前,标准定标器适用于构建管道阵列(
pipelineAry
)。
在前面的代码片段在Python中,下面的代码示例都写在Scala允许我们利用XGBoost4J-Spark。的笔记本系列包括Python代码,保存的数据拼花,随后在Scala中读取数据。
/ /归罪估计完成缺失值val numerics_out =数字。地图(_ +“找到”)val imputers =新输入().setInputCols(数字).setOutputCols (numerics_out)/ / StringIndexer申请我们的分类数据val categoricals_idx =直言。地图(_ +“_idx”)val分度器= categoricals.map (x= >新StringIndexer () .setInputCol (x)。setOutputCol (x +“_idx”).setHandleInvalid (“保持”))/ /我们申请我们StringIndexed分类数据val categoricals_class =直言。地图(_ +“_class”)val oneHotEncoders =新OneHotEncoderEstimator ().setInputCols (categoricals_idx).setOutputCols (categoricals_class)/ /设置特性列val featureCols = categoricals_class + + numerics_out/ /为我们的数字列创建汇编程序(包括标签)val汇编=新VectorAssembler ().setInputCols (featureCols).setOutputCol (“特征”)/ /建立标签val labelIndexer =新StringIndexer ().setInputCol (“bad_loan”).setOutputCol (“标签”)/ /应用StandardScalerval标量=新StandardScaler ().setInputCol (“特征”).setOutputCol (“scaledFeatures”).setWithMean (真正的).setWithStd (真正的)/ /构建管道数组val pipelineAry =索引器+ +数组(oneHotEncoders imputers、汇编、labelIndexer标量)
现在我们已经建立了管道,让我们创建XGBoost管道并应用到我们的训练数据集。
/ /创建XGBoostEstimatorval xgBoostEstimator =新XGBoostEstimator (地图(字符串,任何)(“num_round”- >5,“客观”- >“二进制:物流”,“nworkers”- >16,“nthreads”- >4)).setFeaturesCol (“scaledFeatures”).setLabelCol (“标签”)/ /创建XGBoost管道val xgBoostPipeline =新管道()。setStages (pipelineAry + +数组(xgBoostEstimator))/ /创建XGBoost模型基于训练数据集val xgBoostModel = xgBoostPipeline.fit (dataset_train)/ /测试我们的模型对验证数据集val预测= xgBoostModel.transform (dataset_valid)显示器(predictions.select (“概率”,“标签”))
注意,- > 16日“nworkers nthreads”- > 4
被配置为使用的实例是16 vm每4个vcpu和大约30 GB的内存。
现在我们有了我们的模型,我们可以测试我们的模型对验证数据集预测
包含结果。
评估模型的有效性
既然我们已经建立和训练我们XGBoost模型,确定其有效性使用BinaryClassficationEvaluator
。
/ /包含BinaryClassificationEvaluator进口org.apache.spark.ml.evaluation.BinaryClassificationEvaluator/ /评估val评估者=新BinaryClassificationEvaluator ().setRawPredictionCol (“概率”)/ / AUC计算验证val精度= evaluator.evaluate(预测)
在计算,XGBoost验证数据area-under-curve (AUC): ~ 0.6520。
使用MLlib交叉验证优化模型
我们可以尝试优化模型使用MLlib交叉验证通过CrossValidator
正如下面的代码片段。我们首先建立参数网格我们可以执行多个运行网格不同的参数值。使用相同的BinaryClassificationEvaluator
我们用来测试模型有效性,我们应用在更大的范围的不同组合参数相结合BinaryClassificationEvaluator
和ParamGridBuilder
并把它应用到我们的CrossValidator ()
。
/ /构建参数网格val paramGrid =新ParamGridBuilder ().addGrid (xgBoostEstimator.maxDepth数组(4,7)).addGrid (xgBoostEstimator.eta数组(0.1,0.6)).addGrid (xgBoostEstimator.round数组(5,10)).build ()/ /设置BinaryClassificationEvaluator评估者val评估者=新BinaryClassificationEvaluator ().setRawPredictionCol (“概率”)/ /建立CrossValidator ()val简历=新CrossValidator ().setEstimator (xgBoostPipeline).setEvaluator(评估者).setEstimatorParamMaps (paramGrid).setNumFolds (4)/ /运行交叉验证,并选择最好的一组参数。val cvModel = cv.fit (dataset_train)
XGBoostEstimator初始配置的要注意,我们使用num_round但我们使用圆(num_round不是一个属性的估计量)
该代码片段将运行我们的交叉验证和选择最好的一组参数。我们可以重新运行我们的预测和计算精度。
/ /测试我们的模型对cvModel和验证数据集val predictions_cv = cvModel.transform (dataset_valid)显示器(predictions_cv.select (“概率”,“标签”))/ /计算AUC cvModel验证val精度= evaluator.evaluate (predictions_cv)
我们的价值~ 0.6734精度略有增加。
您还可以查看bestModel参数通过运行以下代码片段。
/ /评论bestModel参数cvModel.bestModel.asInstanceOf [PipelineModel] .stages (11).extractParamMap
量化的业务价值
一个伟大的方式来快速了解这个模型的商业价值是创建一个混淆矩阵。矩阵的定义如下:
- = 1,预测正确标签= 1(蓝色):发现不良贷款。sum_net =避免损失。
- 预测= 1,标签= 0(橙色):不正确的标签不良贷款。sum_net =利润退还。
- 预测= 0,标签= 1(绿色):错误地标记好的贷款。sum_net =损失仍然发生。
- 预测= 0,标签= 0(红色):正确地找到了好贷款。sum_net =利润留存。
下面的代码片段如下混淆矩阵计算。
显示器(predictions_cv。groupBy(“标签”,“预测”).agg ((总和(坳(“净”))/(1 e6).alias (“sum_net_mill”)))
确定获得的价值实现模型,我们可以计算
值=(避免损失利润丧失)
我们目前XGBoost模型AUC = ~ 0.6734,注意重要的价值获得的值实现XGBoost模型。
- 值(XGBoost): 22.076
注意,这里引用的值的数百万美元免于防止坏账损失。
总结
我们演示了如何快速执行贷款风险分析使用砖统一分析平台(UAPbob体育亚洲版)bob体育客户端下载其中包括砖运行时机器学习。与砖运行时机器学习砖集群与XGBoost预配置,scikit-learn, numpy以及流行的深度学习框架,如TensorFlow Keras, Horovod,他们的依赖性。
通过删除数据工程复杂性通常与这些数据相关的管道,我们可以很快我们的数据源导入一个砖表,使用砖探索你的数据可视化,执行ETL代码对您的数据,并建立,培训,优化您的ML管道使用XGBoost逻辑回归。尝试这个笔记本系列今天在砖!