跳轉到主要內容
公司博客上

使用AutoML工具箱自動化貸款違約預測

分享這篇文章

這篇文章最初發表於2019年9月10日;2019年10月2日,它已經更新。

在以前的博客和筆記本,與XGBoost貸款風險分析,我們探討了如何構建一個機器學習的不同階段的預測模型來提高不良貸款。我們回顧了三個不同的線性回歸模型——漠視,GBT, XGBoost——執行耗時的手工優化模型在每個階段的過程。

磚統一分析平台Beplay体育安卓版本

在這篇文章中,我們將展示如何大大簡化流程建立,評估和優化利用機器學習模型磚實驗室AutoML工具包。使用AutoML工具包也會讓你更快地交付成果顯著,因為它允許您自動各種機器學習管道階段。你會觀察到,我們將運行相同的貸款風險分析數據集使用XGBoost 0.90,看結果的AUC顯著改善使用AutoML工具箱0.6732到0.72。的商業價值(節省的錢防止不良貸款),AutoML工具箱生成的模型可能會節省68.88美元(比23.22美元與原技術)。

這個問題是什麼?

對於我們目前的實驗中,我們將繼續使用貸款俱樂部貸款數據。它包括所有資助貸款從2012年到2017年。每筆貸款包括申請人申請人所提供的信息以及貸款現狀(目前,晚了,完全支付,等等)和最新的支付信息。

我們利用申請人信息來確定如果我們可以預測如果貸款是壞的。有關更多信息,請參考貸款風險分析與XGBoost磚運行時機器學習

讓我們開始與結束

AutoML工具包提供了一種簡便的方法來自動化機器學習中的各種任務。在我們的示例中,我們將使用兩個組件:功能重要性和自動化跑自動化任務從vectorizing特性的迭代和調優一個機器學習模型。

簡而言之:

  • AutoML的FeatureImportances自動的發現這檔節目的特點就是從數據集(列)很重要,應該包括在創建一個模型。
  • AutoML的AutomationRunner自動化建設、培訓、執行、和調優的機器學習管道創造一個最佳的ML模式。

當我們有手動創建了一個新的每毫升模型貸款風險分析與XGBoost磚運行時機器學習使用XGBoost 0.90,我們能夠改善AUC從0.6732到0.72 !

我錯過了什麼?

在傳統ML管道,有許多手寫組件執行的任務featurization和模型構建和調優。下圖提供了這些階段的圖形表示形式。

這些階段包括:

  • 工程特性:我們將首先定義潛在功能,vectorize他們(不同的數字和分類數據所需的步驟),然後選擇我們將使用的特性。
  • 模型建立和優化:這些是建築的高度重複階段和培訓我們的模型,執行模型和評估指標,優化模型,對模型進行更改和重複這個過程直到最後構建我們的模型。

在接下來的幾節中,我們將

我們的功能演示

獲得可靠的和幹淨的數據後,數據科學家的第一個步驟是確定哪些列(即。特性)將用於他們的模型。

確定重要功能:傳統ML管道

通常有很多的步驟,選擇您想要使用哪些特性模型。在我們的示例中,我們創建一個二進製分類器(這是一個不良貸款嗎?),我們將需要定義潛在功能,vectorize數字和分類功能,最後選擇特性,將用於您的模型的創建。

擴大傳統視圖識別重要的功能細節
/ /加載貸款風險分析數據集val sourceData = spark.read (“…”)/ /視圖數據顯示器(sourceData)

可以看到從上麵的表中,貸款風險分析數據集包含數字和分類列。這是一個重要的區別,因為會有一組不同的數字和分類的步驟列最終組裝一個向量,將被用作毫升模型的輸入。

為了更好地理解如果有一個獨立變量之間的相關性,我們可以快速檢查sourceData使用顯示命令來查看這些數據散點圖。

您可以進一步分析這些數據通過計算相關係數;一個受歡迎的方法是使用熊貓載於()。當我們的磚筆記本寫在Scala中,我們可以快速、輕鬆地使用Python熊貓,代碼如下。

%python#計算使用熊貓“相關係數”pdf_corr=火花。sql(“選擇loan_amnt、emp_length annual_inc, dti, delinq_2yrs, revol_util, total_acc, credit_length_in_years, int_rate,淨,issue_year,標簽從sourceData”) .toPandas ()。相關係數()#視圖相關係數通過loan_amnt顯示器(pdf_corr。loc [:,“loan_amnt”]])

正如前麵的散點圖(擴大這些細節的上麵),沒有明顯的數值變量高度相關。在此基礎上評估,我們將繼續在創建模型的所有列。

識別重要的特性:AutoML工具包

需要注意的是,這一過程的識別重要的功能可以是一個高度迭代和耗時的過程。有很多不同的技術,可以應用這個過程本身是一本(如。對機器學習功能工程:數據科學家的原則和技術)。

AutoML工具包包括類FeatureImportances自動標識最重要的功能;這是全部完成下麵的代碼片段。

/ /計算特性的重要性(fi)val fiConfig = ConfigurationGenerator.generateConfigFromMap (“XGBoost”,“分類”genericMapOverrides)/ /因為我們使用XGBoost這裏我們不能有並行> 2 x的節點數量fiConfig.tunerConfig。tunerParallelism = nodeCount *2val fiMainConfig = ConfigurationGenerator.generateFeatureImportanceConfig (fiConfig)/ /生成特性的重要性val重要性=FeatureImportances (sourceData fiMainConfig,“數”,20.0).generateFeatureImportances ()/ /顯示功能的重要性顯示器(importances.importances)

在這個特定的例子中,三十(30)不同的火花工作找自動生成和執行最重要的特性,需要包括在內。注意,引發工作開始的數量將取決於幾個因素。而不是幾天或幾周的手動探索數據,四行代碼,我們確定了這些特性在幾分鍾內。

讓我們構建它!

既然我們已經確定了我們最重要的特性,讓我們構建,火車,驗證和優化我們的ML管道貸款風險數據集。

傳統的模型建立和優化

下麵的步驟是刪節版的評估的風險貸款批準使用XGBoost (0.90)筆記本電腦代碼。

擴大對傳統模式構建和優化細節

首先,我們將定義我們的分類和數字列。

//定義我們的分類數字val分類=數組(“術語”、“home_ownership”、“目的”,“addr_state”,“verification_status”,“application_type”)val的數字=數組(“loan_amnt”、“emp_length”、“annual_inc”、“唯一”、“delinq_2yrs”,“revol_util”、“total_acc”、“credit_length_in_years”)

然後我們將構建我們毫升管道如下提到的代碼片段。代碼中的注釋所指出的,我們的管道有以下步驟:

  • VectorAssembler:基於我們的裝配特征向量特征列處理以下
    • 數據錄入員估計完成缺失值為數值型數據
    • StringIndexer編碼一個數值的字符串值
    • OneHotEncoding映射一個分類特征(StringIndexer數值所代表的)一個二進製向量
  • LabelIndexer:指定我們的標簽是標簽(即真實價值)與我們的預測(即壞或好貸款)的預測價值
  • StandardScaler:規範化特征向量特征值不同的規模的影響最小化。

注意,這個例子是我們的一個簡單的二元分類的例子;有很多方法可以用來提取、轉換和選擇功能

進口org.apache.spark.ml.feature.VectorAssembler進口org.apache.spark.ml.feature.StringIndexer/ /歸罪估計完成缺失值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 (“標簽”).setOutputCol (“predictedLabel”)/ /應用StandardScalerval標量=StandardScaler ().setInputCol (“特征”).setOutputCol (“scaledFeatures”).setWithMean (真正的).setWithStd (真正的)/ /構建管道數組val pipelineAry =索引器+ +數組(oneHotEncoders imputers、彙編、labelIndexer標量)

我們的管道和決定使用XGBoost模型(如上所述貸款風險分析與XGBoost磚運行時機器學習),讓我們構建、訓練、驗證我們的模型。

/ /創建XGBoostClassifierval xgBoostClassifier =XGBoostClassifier (地圖(字符串,任何)(“num_round”- >5,“客觀”- >“二進製:物流”,“nworkers”- >16,“nthreads”- >4)).setFeaturesCol (“scaledFeatures”).setLabelCol (“predictedLabel”)/ /創建XGBoost管道val xgBoostPipeline =管道()。setStages (pipelineAry: + xgBoostClassifier)/ /創建XGBoost模型基於訓練數據集val xgBoostModel = xgBoostPipeline.fit (dataset_train)/ /測試我們的模型對驗證數據集val預測= xgBoostModel.transform (dataset_valid)

通過使用BinaryClassificationEvaluator包含在火花MLlib,我們可以評估模型的性能。

/ /包含BinaryClassificationEvaluator進口org.apache.spark.ml.evaluation.BinaryClassificationEvaluator/ /評估val評估者=BinaryClassificationEvaluator ().setRawPredictionCol (“概率”)/ / AUC計算驗證val auc = evaluator.evaluate(預測)/ / AUC值/ / 0.6507

AUC值為0.6507,看看我們可以進一步優化這個模型通過設置paramGrid和使用CrossValidator ()。重要的是要注意,您需要理解模型選項(例如XGBoost分類器maxDepth)正確選擇參數。

進口org.apache.spark.ml.tuning。{CrossValidator, CrossValidatorModel, ParamGridBuilder}/ /構建參數網格val paramGrid =ParamGridBuilder ().addGrid (xgBoostClassifier.maxDepth數組(4,7)).addGrid (xgBoostClassifier.eta數組(0.1,0.6)).addGrid (xgBoostClassifier.numRound數組(5,10)).build ()/ /設置BinaryClassificationEvaluator評估者val評估者=BinaryClassificationEvaluator ().setRawPredictionCol (“概率”)/ /建立CrossValidator ()val簡曆=CrossValidator ().setEstimator (xgBoostPipeline).setEvaluator(評估者).setEstimatorParamMaps (paramGrid).setNumFolds (4)/ /運行交叉驗證,並選擇最好的一組參數。val cvModel = cv.fit (dataset_train)/ /測試我們的模型對cvModel和驗證數據集val predictions_cv = cvModel.transform (dataset_valid)/ /計算AUC cvModel驗證val cvAUC = evaluator.evaluate (predictions_cv)/ / AUC值/ / 0.6732

經過多次迭代,選擇不同的參數和測試一籮筐的不同的值參數(擴大更多細節的上麵),使用傳統的模型構建和優化我們能夠改進模型具有一個AUC = 0.6732 (0.6507)。

AutoML模型建立和調優

與所有傳統的模型構建和調優步驟以天(或周),我們可以手動建立一個模型比隨機AUC值。但隨著AutoML工具包,AutomationRunner讓我們執行上述步驟幾行代碼。

用以下五行代碼,AutoML工具包AutomationRunner執行所有前麵提到的步驟(建立、培訓、驗證優化重複)自動。

val modelingType =“XGBoost”val相依= ConfigurationGenerator.generateConfigFromMap (modelingType,“分類”genericMapOverrides)/ /調整模型調諧器配置conf.tunerConfig。tunerParallelism = nodeCount/ /生成配置val XGBConfig = ConfigurationGenerator.generateMainConfig(配置)/ /選擇的重要特征val跑=AutomationRunner (dataset_train。選擇(selectionFields: _ *)).setMainConfig (XGBConfig).runWithConfusionReport ()

在幾個小時內(或分鍾),AutoML工具箱發現最好的模型和存儲模型和推理數據如上所述的輸出之前的代碼片段。

模型將被保存到路徑dbfs:/毫升/dennylee / automl /模型/ dl_AutoML_Demo / BestRun classifier_XGBoost_421b6cbe1e954ebba119eb3bfc2997bf / bestModel推理DF將保存到dbfs:/毫升/dennylee / automl /推論/ dl_AutoML_Demo / 3959076 _best / 421 b6cbe1e954ebba119eb3bfc2997bf_bestmodelingType:字符串= XGBoost

因為AutoML工具包使用磚MLflow集成自動登錄,所有模型的指標。

正如MLflow細節(前截圖),AUC (areaUnderROC值為0.72)有所改善!

AutoML工具包是怎麼做的呢?背後的細節如何AutoML工具包能夠這樣做將討論在未來的博客。從一個高水平,AutoML工具包能找到更好hyperparameters因為它測試和優化所有修改hyperparameters分布式的方式使用優化算法的集合。合並AutoML工具包內的理解如何使用參數提取算法的源代碼(例如XGBoost在這種情況下)。

清理混亂

AUC值顯著提高,如何更好的AutoML XGBoost模型相比,執行創建的手嗎?因為這是一個二元分類問題,我們可以使用混淆矩陣澄清混亂。手工製作的混淆矩陣模型和AutoML工具包筆記本包括如下。匹配的分析我們所做的在過去(阿拉巴馬州貸款風險分析與XGBoost磚運行時機器學習),我們評估貸款規模,2015年之後。

在前麵的圖形中,左邊的混淆矩陣是手工XGBoost模型,而右邊的是來自AutoML工具包。雖然兩種模型做一個偉大的工作正確地識別優質貸款(真:好,預測:好),AutoML模型上執行更好的識別不良貸款(正確的:不好,預測:壞- 4218與1370)以及防止假陽性(真實:糟糕,預測:好- 17792和20640年)。在這個場景中,這就意味著如果我們使用機器學習模型由AutoML(而不是手工製作的模型),我們可以有可能避免發行2848更多的不良貸款可能會違約和成本錢。同樣重要的是,這種模式可能會阻止更頭疼,客戶體驗不好通過降低假陽性錯誤地預測這是一個好貸款,而實際上它可能是一個糟糕的貸款。

理解業務價值

我們量化這種混淆矩陣業務價值;的定義是:

預測 標簽(不良貸款) 簡短的描述 長描述
1 1 避免了損失 正確發現不良貸款
1 0 利潤被沒收的 不正確的標簽不良貸款
0 1 損失仍然發生 錯誤地標記好貸款
0 0 利潤留存 正確地找到了好貸款

審查相關的美元價值我們的手工製作的混淆矩陣模型,我們將使用下麵的代碼片段。

//價值獲得了實現模型=- - - - - -(避免損失- - - - - -利潤喪失)顯示器(predictions_cv。groupBy(“預測”、“標簽”).agg ((總和(坳(“淨”))/(1 e6).alias (“sum_net_mill”)))

審查相關的美元價值的混淆矩陣AutoML工具包模型將使用下麵的代碼片段。

//價值獲得了實現模型=- - - - - -(避免損失- - - - - -利潤喪失)2015年數據顯示器(cmndf。groupBy(“預測”、“標簽”).agg ((總和(坳(“淨”))/(1 e6).alias (“sum_net_mill”)))

業務價值計算值=(避免損失利潤喪失)

模型 避免了損失 利潤被沒收的 價值
手工製作的 -20.16 3.06 23.22美元
AutoML工具包 -58.22 10.66 68.88美元

你可以觀察,潛在的利潤被使用AutoML工具包3 x比我們的手工製作的模型與儲蓄68.88美元。

AutoML工具包:更少的代碼和更快

AutoML工具包,您可以編寫更少的代碼提供更快更好的結果。這個貸款風險分析與XGBoost示例中,我們看到了改善性能的AUC = 0.72和0.6732(68.88美元和23.22美元的潛在儲蓄與原技術)。AutoML工具包hyperparameters因為它能找到好多了自動生成、測試和優化算法的所有修改hyperparameters分布式的方式。

嚐試的AutoML工具包使用AutoML工具包來簡化貸款風險分析XGBoost模型優化筆記本上今天!

修正

以前這個博客已經聲明一個由於錯誤地保持AUC值為0.995列特征代(它有一個幾乎1:1關係貸款預測)。一旦這是糾正,正確的AUC是0.72。多虧了肖恩·歐文,Sanne德羅和Carsten Thone很快識別這一問題。

免費試著磚
看到所有公司博客上的帖子
Baidu
map