貸款風險分析與XGBoost磚運行時機器學習
賺錢的公司客戶持有的貸款利息,它總是關於增加底線。能夠評估貸款申請的風險可以節省銀行持有太多的高風險資產的成本。數據科學家的工作運行分析你的客戶數據,讓業務規則,將直接影響貸款批準。
數據科學家,花時間構建這些機器學習模型是一種稀缺資源,他們往往是孤立的一個沙盒:
- 盡管他們處理數據的一天,他們依賴於數據工程師獲得最新的表。
- 數據正以指數速度增長,它們依賴於基礎設施團隊提供計算資源。
- 一旦完成了模型構建過程,他們必須信任軟件開發人員正確翻譯他們的模型代碼生產準備代碼。
這就是磚統一的分析平台Beplay体育安卓版本可以幫助彌合這些差距的不同部分,工作流鏈,減少數據科學家之間的摩擦,數據工程師和軟件工程師。
除了減少操作摩擦,磚是一個中央位置運行最新的機器學習模型。用戶可以利用本機火花MLLib包或下載任何開源Python或R毫升包。與磚運行時機器學習磚集群與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
注意,這裏引用的值的數百萬美元免於防止壞賬損失。
總結
我們演示了如何快速執行貸款風險分析使用磚統一分析平台(UAP)Beplay体育安卓版本其中包括磚運行時機器學習。與磚運行時機器學習磚集群與XGBoost預配置,scikit-learn, numpy以及流行的深度學習框架,如TensorFlow Keras, Horovod,他們的依賴性。
通過刪除數據工程複雜性通常與這些數據相關的管道,我們可以很快我們的數據源導入一個磚表,使用磚探索你的數據可視化,執行ETL代碼對您的數據,並建立,培訓,優化您的ML管道使用XGBoost邏輯回歸。嚐試這個筆記本係列今天在磚!