評分卡是信用風險評估領域常用的建模工具,其原理是通過分箱輸入將原始變數離散化後再使用線性模型(羅吉斯迴歸或線性迴歸等)進行模型訓練,其中包含特徵選取及分數轉換等功能。同時也支援在訓練過程中為變數添加約束條件。
如果未指定分箱輸入,則評分卡訓練過程完全等價於一般的羅吉斯迴歸或線性迴歸。
使用限制
使用評分卡訓練組件產生的臨時模型僅支援使用MaxCompute暫存資料表進行儲存,該暫存資料表在Studio中的預設生命週期為369天,在Designer中的預設生命週期為當前所在工作空間配置的暫存資料表儲存時間長度,具體配置方法請參見管理工作空間。如果您需要長期使用該臨時模型,需要通過寫資料表進行固化,操作詳情請參見如何將運行畫布節點輸出的暫存資料表資料進行持久化儲存?。
基本概念
以下介紹評分卡訓練過程中的相關概念:
特徵工程
評分卡與普通線性模型的最大區別在於進行線性模型訓練之前會對資料進行一定的特徵工程處理。本文中,評分卡提供了如下兩種特徵工程方法:
先通過分箱組件將特徵離散化,再將每個變數根據分箱結果進行One-Hot編碼,分別產生N個Dummy變數(N為變數的分箱數量)。
說明使用Dummy變數變換時,每個原始變數的Dummy變數之間可以設定相關的約束,詳情請參見分箱。
先通過分箱組件將特徵離散化,再進行WOE轉換,即使用變數落入的分箱所對應的WOE值替換變數的原始值。
分數轉換
評分卡的信用評分等情境中,需要通過線性變換將預測得到的樣本odds轉換成分數,通常通過如下的線性變換實現。您可以通過如下三個參數指定線性變換關係:
scaledValue:給出一個分數的基準點。
odds:在給定的分數基準點處的odds值。
pdo(Point Double Odds):表示分數增長多少分時,odds值增長到雙倍。
例如,scaledValue=800,odds=50,pdo=25,則表示指定了直線中的如下兩點。
log(50)=a×800+b log(100)=a×825+b
解出a和b,對模型中的分數進行線性變換即可得到變換後的變數分。
Scaling資訊由參數
-Dscale
指定,格式為JSON,樣本如下。{"scaledValue":800,"odds":50,"pdo":25}
當
-Dscale
參數不為空白時,需要同時配置scaledValue、odds及pdo的值。訓練過程中增加約束
評分卡訓練過程支援對變數添加約束。例如指定某個bin所對應的分數為固定值,兩個bin的分數滿足一定比例,對bin之間的分數進行大小限制,或設定bin的分數按照bin的WOE值排序等。約束的實現依賴於底層帶約束的最佳化演算法,可以在分箱組件中通過可視化方式設定約束,設定完成後分箱組件會產生一個JSON格式的約束條件,並將其自動傳遞給下遊串連的訓練組件,詳情請參見如下示範操作。系統支援如下六種JSON約束:
“<”:變數權重按照順序滿足升序的約束。
“>”:變數權重按照順序滿足降序的約束。
“=”:變數權重等於固定值。
“%”:變數之間的權重符定一定的比例關係。
“UP”:變數的權重約束上限。例如,0.5表示訓練獲得的權重值不大於0.5。
“LO”:變數的權重約束下限。例如,0.5表示訓練獲得的權重值不小於0.5。
JSON約束以字串的形式儲存在單行單列(字串類型)的表中,儲存的JSON字串樣本如下。
{ "name": "feature0", "<": [ [0,1,2,3] ], ">": [ [4,5,6] ], "=": [ "3:0","4:0.25" ], "%": [ ["6:1.0","7:1.0"] ] }
內建約束
每個原始變數都有一個隱含約束,無需使用者指定,即單個變數人群的分數平均值為0。通過該約束,模型截距項的scaled_weight即為整個人群的平均分。
最佳化演算法
在進階選項中可以配置訓練過程中使用的最佳化演算法,系統支援如下四種最佳化演算法:
L-BFGS:是一階的最佳化演算法,支援較大規模的特徵資料集。該演算法屬於無約束的最佳化演算法,會自動忽略約束條件。
Newton's Method:牛頓法是經典的二階演算法,收斂速度快,準確度高。但是由於需要計算二階Hessian Matrix,因此不適用於較大特徵規模。該演算法屬於無約束的最佳化演算法,會自動忽略約束條件。
Barrier Method:二階的最佳化演算法,在沒有約束條件的情況下完全等價於牛頓法。該演算法的計算效能和準確性與SQP差別不大,通常建議選擇SQP。
SQP
二階的最佳化演算法,在沒有約束條件的情況下完全等價於牛頓法。該演算法的計算效能和準確性與Barrier Method差別不大,通常建議選擇SQP。
說明L-BFGS和Newton's Method均屬於無約束的最佳化演算法,Barrier Method和SQP屬於帶約束的最佳化演算法。
如果不瞭解最佳化演算法,建議將最佳化演算法配置為”自動選擇“,系統會自動根據使用者任務的資料規模和約束情況選擇最合適的最佳化演算法。
特徵選取
訓練模組支援Stepwise特徵選取功能。Stepwise是一種前向選擇和後向選擇的融合,即每次進行前向特徵選取將一個新變數加入模型後,需要對已經進入模型的變數進行一次後向選擇,以移除顯著性不滿足需求的變數。由於同時支援多種目標函數和多種特徵變換方法,因此Stepwise特徵選取過程支援如下多種選擇標準:
邊緣貢獻(Marginal Contribution):適用於所有目標函數和特徵工程方法。
模型A中不包含變數X,模型B包含所有A的變數,且包含變數X。兩個訓練模型最終收斂時所對應目標函數的差值,即為變數X在模型B中所有變數之間的邊緣貢獻度。在特徵工程為Dummy變換的情境中,原始變數的X邊緣貢獻度定義為兩個模型分別包含和不包含該變數的所有Dummy變數的目標函數之差。因此,使用邊緣貢獻度進行特徵選取支援所有的特徵工程方法。
該方法的優點是比較靈活,不局限於某一種模型,直接選擇使得目標函數更優的變數進入模型。缺點是邊緣貢獻度不同於統計顯著性,統計顯著性通常選擇0.05為閾值,而邊緣貢獻度新使用者沒有一個絕對的概念閾值,建議將其設定為10E-5。
評分檢驗(Score Test):僅支援WOE轉換或無特徵工程的羅吉斯迴歸選擇。
前向選擇過程中,首先訓練一個僅有截距項的模型,在之後的每一步迭代中,分別對未進入模型的變數計算其評分卡方統計量(Score Chi-Square),然後將評分卡方統計量最大的變數選入模型。同時,根據卡方分布計算該統計量所對應的顯著性P Value。如果評分卡方統計量最大的變數其P Value大於使用者指定的進入模型的最大顯著性閾值(slentry),則不會將該變數納入模型,並停止選擇過程。
完成一輪前向選擇後,將對已經選中進入模型的變數進行一輪後向選擇。後向選擇過程中,對於已經進入模型中的變數分別計算其對應的沃爾德卡方統計量(Wald Chi-Square),並計算其對應的顯著性P Value。如果P Value大於使用者指定的移除模型的最大顯著性閾值(slstay),則從模型中移除該變數,並繼續進行下一輪迭代選擇。
F檢驗(F Test):僅支援WOE轉換或無特徵工程的線性迴歸選擇。
前向選擇過程中,首先訓練一個僅有截距項的變數,在之後的每一步迭代中,分別對未進入模型的變數計算其F Value。F Value的計算與邊緣貢獻度的計算類似,需要訓練兩個模型以計算一個變數的F Value。F Value符合F分布,可以根據其F分布的機率密度函數求得其對應的顯著性P Value。如果P Value大於使用者指定的進入模型的最大顯著性閾值(slentry),則不會將變數納入模型,並停止選擇過程。
後向選擇過程也是使用F Value計算顯著性,其過程與評分檢驗類似。
強制選擇加入模型的變數
進行特徵選取之前,可以設定強制進入模型的變數,被選中的變數不參與前向和後向的特徵選取過程。無論選中的變數其顯著性取值如何,都會直接進入模型。您可以在命令列中通過-Dselected參數指定迭代次數和顯著性閾值,格式為JSON,樣本如下。
{"max_step":2, "slentry": 0.0001, "slstay": 0.0001}
如果-Dselected參數為空白或max_step為0,則表示正常的訓練流程,不進行特徵選取。
組件配置
Designer支援通過可視化或PAI命令的方式配置評分卡訓練組件的參數,使用PAI命令的方式如下。
pai -name=linear_model -project=algo_public
-DinputTableName=input_data_table
-DinputBinTableName=input_bin_table
-DinputConstraintTableName=input_constraint_table
-DoutputTableName=output_model_table
-DlabelColName=label
-DfeatureColNames=feaname1,feaname2
-Doptimization=barrier_method
-Dloss=logistic_regression
-Dlifecycle=8
參數 | 描述 | 是否必選 | 預設值 |
inputTableName | 輸入特徵資料表。 | 是 | 無 |
inputTablePartitions | 輸入特徵表選擇的分區。 | 否 | 全表 |
inputBinTableName | 輸入分箱結果表。如果該表指定,則先自動根據該表的分箱規則對原始特徵進行離散化,再進行訓練。 | 否 | 無 |
featureColNames | 輸入表選擇的特徵列。 | 否 | 選擇全部,自動排除Label列。 |
labelColName | 目標列。 | 是 | 無 |
outputTableName | 輸出模型表。 | 是 | 無 |
inputConstraintTableName | 輸入的JSON格式約束條件,儲存在表的一個單元中。 | 否 | 無 |
optimization | 最佳化類型,支援的類型包括:
僅sqp和barrier_method支援約束,auto即為根據使用者資料和相關參數自動選擇合適的最佳化演算法。如果您對最佳化演算法不太瞭解,建議使用auto。 | 否 | auto |
loss | Loss類型,支援logistic_regression和least_square類型。 | 否 | logistic_regression |
iterations | 最佳化的最大迭代次數。 | 否 | 100 |
l1Weight | L1正則的參數權重,僅lbfgs最佳化演算法支援L1 Weight。 | 否 | 0 |
l2Weight | L2正則的參數權重。 | 否 | 0 |
m | lbfgs最佳化過程中的歷史長度,僅對lbfgs最佳化演算法有效。 | 否 | 10 |
scale | 評分卡對Weight進行Scale的資訊。 | 否 | 空 |
selected | 評分卡特徵選取功能。 | 否 | 空 |
convergenceTolerance | 收斂條件。 | 否 | 1e-6 |
positiveLabel | 正樣本的分類。 | 否 | 1 |
lifecycle | 輸出表的生命週期。 | 否 | 無 |
coreNum | 核心數。 | 否 | 系統自動計算 |
memSizePerCore | 記憶體數,單位為MB。 | 否 | 系統自動計算 |
組件輸出
評分卡模型的輸出為一個Model Report,其中包含了變數的分箱資訊、分箱的約束資訊、WOE及Marginal Contribution等基本的統計指標。PAI Web端展示的評分卡模型評估報告的相關列描述如下所示。
列名 | 列類型 | 描述 |
feaname | STRING | 特徵名稱。 |
binid | BIGINT | 分箱ID。 |
bin | STRING | 分箱描述,用於表明該分箱的範圍。 |
constraint | STRING | 訓練時增加到該分箱的約束條件。 |
weight | DOUBLE | 訓練完成後所對應的分箱變數權重,或未指定分箱輸入的非評分卡模型,該項直接對應模型變數權重。 |
scaled_weight | DOUBLE | 評分卡模型訓練過程中指定分數轉換資訊後,將分箱變數權重經過線性變換得到的分數值。 |
woe | DOUBLE | 統計指標:訓練集上該分箱的WOE值。 |
contribution | DOUBLE | 統計指標:訓練集上該分箱的Marginal Contribution值。 |
total | BIGINT | 統計指標:訓練集上該分箱的總樣本數。 |
positive | BIGINT | 統計指標:訓練集上該分箱的正樣本數。 |
negative | BIGINT | 統計指標:訓練集上該分箱的負樣本數。 |
percentage_pos | DOUBLE | 統計指標:訓練集上該分箱的正樣本數佔總正樣本的比例。 |
percentage_neg | DOUBLE | 統計指標:訓練集上該分箱的負樣本數佔總負樣本的比例。 |
test_woe | DOUBLE | 統計指標:測試集上該分箱的WOE值。 |
test_contribution | DOUBLE | 統計指標:測試集上該分箱的Marginal Contribution值。 |
test_total | BIGINT | 統計指標:測試集上該分箱的總樣本數。 |
test_positive | BIGINT | 統計指標:測試集上該分箱的正樣本數。 |
test_negative | BIGINT | 統計指標:測試集上該分箱的負樣本數。 |
test_percentage_pos | DOUBLE | 統計指標:測試集上該分箱的正樣本數佔總正樣本的比例。 |
test_percentage_neg | DOUBLE | 統計指標:測試集上該分箱的負樣本數佔總負樣本的比例。 |