天天看點

基于Python的信用評分卡模型建立和分析,萬字闡述,收藏

和所有金融信貸業務一樣,信用風險credit risk也是企業貸款面臨的最主要風險,特别是中小微企業。随着微小企業信貸業務的迅速發展,客戶群體的不斷擴大,諸多大型企業(heng大,融創,st上市公司)暴lei,銀行在大資料面前對于客戶個人信用水準的把握變得越來越困難.如何科學,快速地識别個人客戶和企業客戶信用風險,成為微小貸款業務持續,健康發展的重要前提。

信用風險計量模型可以包括跟個人信用評級,企業信用評級和國家信用評級。人信用評級有一系列評級模型組成,常見是A卡(申請評分卡)、B卡(行為模型)、C卡(催收模型)和F卡(反欺詐模型)。 今天我們展示的是個人信用評級模型的開發過程,資料采用kaggle上知名的give me some credit資料集。

give me some credit資料集采用的是國外銀行真實個人信貸資料,用于評估個人信貸逾期風險。give me some credit資料集變量不多,隻有十餘個,但每個變量都很精髓,值得我們深入研究。

一、模組化流程

典型的信用評分卡模型如圖1-1所示。信用風險評級模型的主要開發流程如下:

(1) 擷取資料,包括申請貸款客戶的資料。資料包括客戶各個次元,包括年齡,性别,收入,職業,家人數量,住房情況,消費情況,債務等等。

(2) 資料預處理,主要工作包括資料清洗、缺失值處理、異常值處理、資料類型轉換等等。我們需要把原始資料層層轉化為可模組化資料。

(3) EDA探索性資料分析和描述性統計,包括統計總體資料量大小,好壞客戶占比,資料類型有哪些,變量缺失率,變量頻率分析直方圖可視化,箱形圖可視化,變量相關性可視化等。

(4) 變量選擇,通過統計學和機器學習的方法,篩選出對違約狀态影響最顯著的變量。常見變量選擇方法很多,包括iv,feature importance,方差等等 。另外缺失率太高的變量也建議删除。無業務解釋性變量且沒有價值變量也建議删除。少數資料集存在資料洩露變量,這種模型各種性能會接近完美,需要踢除資料洩露變量。

(5) 模型開發,評分卡模組化主要難點是woe分箱,分數拉伸,變量系數計算。其中woe分箱是評分卡中難點中難點,需要豐富統計學知識和業務經驗。目前分箱算法多達50多種,沒有統一金标準,一般是先機器自動分箱,然後再手動調整分箱,最後反複測試模型最後性能,擇優選取最優分箱算法。

(6) 模型驗證,核實模型的區分能力、預測能力、穩定性、排序能力等等,并形成模型評估報告,得出模型是否可以使用的結論。模型驗證不是一次性完成,而是當模組化後,模型上線前,模型上線後定期驗證。模型開發和維護是一個循環周期,不是一次完成。

(7) 信用評分卡,根據邏輯回歸的變量系數和WOE值來生成評分卡。評分卡友善業務解釋,已使用幾十年,非常穩定,深受金融行業喜愛。其方法就是将Logistic模型機率分轉換為300-900分的标準評分的形式。

(8) 建立評分卡模型系統,根據信用評分卡方法,建立計算機自動信用化評分系統。美國傳統産品FICO有類似功能,FICO底層語言是Java。目前流行Java,python或R多種語言建構評分卡自動化模型系統。

(9)模型監控,着時間推移,模型區分能力,例如ks,auc會逐漸下降,模型穩定性也會發生偏移。我們需要專業模型監控團隊,當監控到模型區分能力下降顯著或模型穩定性發生較大偏移時,我們需要重新開發模型,疊代模型。模型監控團隊應該每日按時郵件發送模型監控報表給相關團隊,特别是開發團隊和業務團隊。

基于Python的信用評分卡模型建立和分析,萬字闡述,收藏

二. 擷取資料​

模組化資料方面包含借款申請人填寫的基本資料,通訊錄,通話記錄和其他營運商資料,以及在其他第三方平台提供的黑名單和其他借貸平台借貸還款資料,和app抓取的手機資料,有些還包含人行征信,社保公積金工資銀行流水,個人消費等資料,針對不同額度和客群需要使用者填寫和授權的資料不一樣。收集需要的資料後,通過SQL提取相關變量特征構造模組化用的寬表。具體模組化資訊如下圖。

基于Python的信用評分卡模型建立和分析,萬字闡述,收藏

python評分卡模組化實戰資料集

之前我講過利用German credit德國信用資料集建立python信用評分卡模型,該資料集優勢是資料量小,對計算機硬體要求不高,友善各個階層學員學習和測試。

基于Python的信用評分卡模型建立和分析,萬字闡述,收藏

信用評分算法對違約機率進行猜測,是銀行用來确定是否應授予貸款的方法。資料屬于個人消費類貸款,通過預測某人在未來兩年内遇到财務困境的可能性,提高信用評分的最新水準。

銀行在市場經濟中發揮着至關重要的作用。他們決定誰可以獲得資金以及以什麼條件獲得資金,并且可以做出投資決策或終止投資決定。為了讓市場和社會發揮作用,個人和公司需要獲得信貸。

give me some credit有15萬樣本資料,該資料量解決中大型金融機構實戰資料,更加接近金融企業項目實戰。該資料集通過預測某人在未來兩年内遇到财務困難的可能性,提高信用評分的水準。

基于Python的信用評分卡模型建立和分析,萬字闡述,收藏

變量中文釋義,變量少而精,可作為模組化的參考

基于Python的信用評分卡模型建立和分析,萬字闡述,收藏

我們對上述變量歸類,主要分為:

– 基本屬性:包括了借款人當時的年齡。

– 償債能力:包括了借款人的可用額度比值、月收入、負債比率。

– 信用曆史:兩年内35-59天逾期次數、兩年内60-89天逾期次數、兩年内90

天或高于90天逾期的次數。

– 财産狀況:包括了開放式信貸和貸款數量、不動産貸款或額度數量。

– 其它因素:借款人的家屬數量(不包括本人在内)

kaggle模型競賽中,獎金5000美金,模型評估名額為AUC。

基于Python的信用評分卡模型建立和分析,萬字闡述,收藏

網際網路上國内外關于give me some credit資料集AUC得分最佳表現為0.85.

基于Python的信用評分卡模型建立和分析,萬字闡述,收藏

但我方《python信用評分卡模組化(附代碼)》教程中AUC可以達到0.929,調參後AUC可以更高,遠高于網際網路上give me some credit論文的模型性能AUC=0.85。網際網路論文關于模組化步驟有很多看似有理,但實際上不正确的理論。

基于Python的信用評分卡模型建立和分析,萬字闡述,收藏

如果你好奇我方如何将give me some credit資料集AUC達到0.929,可參考教程​​《python信用評分卡模組化(附代碼)》​​

​​《python信用評分卡模組化(附代碼)》​​中give me some credit資料集一覽。

基于Python的信用評分卡模型建立和分析,萬字闡述,收藏

三、資料預處理

資料預處理,主要工作包括資料清洗、缺失值處理、異常值處理、資料類型轉換等等。我們需要把原始資料層層轉化為可模組化資料。

3.1 缺失值處理

give me some credit資料集缺失資料并不嚴重,隻有兩個變量有缺失值,缺失率為2%和19.8%。

基于Python的信用評分卡模型建立和分析,萬字闡述,收藏

現實中資料存在大量缺失值是非常普遍。央行征信很多變量缺失率可以高達99%。缺失值會導緻一些資料分析和模組化的問題。通常在信用風險評分卡模型開發的第一步我們就要進行缺失值處理。缺失值處理的方法,包括如下幾種。

(1) 直接删除含有缺失值的樣本。

(2) 填補缺失值。

(3) 不予理睬。

# 用随機森林對缺失值預測填充函數
def set_missing(df):
    # 把已有的數值型特征取出來
    process_df = df.ix[:,[5,0,1,2,3,4,6,7,8,9]]
    # 分成已知該特征和未知該特征兩部分
    known = process_df[process_df.MonthlyIncome.notnull()].as_matrix()
    unknown = process_df[process_df.MonthlyIncome.isnull()].as_matrix()
    # X為特征屬性值
    X = known[:, 1:]
    # y為結果标簽值
    y = known[:, 0]
    # fit到RandomForestRegressor之中
    rfr = RandomForestRegressor(random_state=0, 
    n_estimators=200,max_depth=3,n_jobs=-1)
    rfr.fit(X,y)
    # 用得到的模型進行未知特征值預測
    predicted = rfr.predict(unknown[:, 1:]).round(0)
    print(predicted)
    # 用得到的預測結果填補原缺失資料
    df.loc[(df.MonthlyIncome.isnull()), 'MonthlyIncome'] = predicted
    return df      

3.2 異常值處理

缺失值處理後,我們需要進行異常值檢驗。異常值分為統計學上異常值和業務上異常值。統計學異常值通常用箱型圖來判斷,如下圖。

基于Python的信用評分卡模型建立和分析,萬字闡述,收藏

業務上異常值是根據業務線對變量定義和常識來判斷該資料是否合理。比如give me some credit資料集中有個人客戶的年齡為0,按照常理,我們認為該值為異常值。哪個貸款公司會把錢借給年齡為0的使用者?

基于Python的信用評分卡模型建立和分析,萬字闡述,收藏

3.3 資料劃分

我們建立模型後一般會遇到下面三種情況,underfitting欠拟合,just right拟合合适,overfitting過度拟合。

基于Python的信用評分卡模型建立和分析,萬字闡述,收藏

為了驗證模型的性能,我們需要對資料集進行劃分。

首先把所有資料分成x資料和y資料(target目标變量)。

然後把x資料和y資料分成訓練集和測試集,并生成四個變量train_x,test_x,train_y,test_y.

基于Python的信用評分卡模型建立和分析,萬字闡述,收藏

四、EDA探索性資料分析和描述性統計​

由于人大腦的生理結構,大部分人對數字不敏感,但資料可視化對大腦了解更友好。這就是資料可視化重要性,也友善向上司或決策層彙報工作。

基于Python的信用評分卡模型建立和分析,萬字闡述,收藏

EDA探索性資料分析和描述性統計包括統計總體資料量大小,好壞客戶占比,資料類型有哪些,變量缺失率,變量頻率分析直方圖可視化,箱形圖可視化,變量相關性可視化等。EDA是Exploratory Data Analysis縮寫,中文釋義為探索性資料分析。探索性資料分析方法很多常見的有:hist直方圖、scater散點圖,boxer箱線圖,heat熱力圖,pairplot配對圖。

give me some credit資料集的age年齡變量直方圖

基于Python的信用評分卡模型建立和分析,萬字闡述,收藏

give me some credit資料集的target目标變量直方圖,可以發現好壞客戶占比非常不平衡。好客戶數量大概是壞客戶數量15倍左右。

基于Python的信用評分卡模型建立和分析,萬字闡述,收藏

give me some credit資料集的家庭成員數量變量直方圖

基于Python的信用評分卡模型建立和分析,萬字闡述,收藏

give me some credit資料集所有變量的pairplot配對圖,大量資訊一目了然。

基于Python的信用評分卡模型建立和分析,萬字闡述,收藏

give me some credit資料集所有變量相關性的熱力圖,可以分析出有6對變量相關性非常高,變量篩選時候需要注意。

corr = data.corr()#計算各變量的相關性系數
    xticks = ['x0','x1','x2','x3','x4','x5','x6','x7','x8','x9','x10']#x軸标簽
    yticks = list(corr.index)#y軸标簽
    fig = plt.figure()
    ax1 = fig.add_subplot(1, 1, 1)
    sns.heatmap(corr, annot=True, cmap='rainbow', ax=ax1, annot_kws={'size': 9, 'weight': 'bold', 'color': 'blue'})#繪制相關性系數熱力圖
    ax1.set_xticklabels(xticks, rotatinotallow=0, fnotallow=10)
    ax1.set_yticklabels(yticks, rotatinotallow=0, fnotallow=10)
    plt.show()      
基于Python的信用評分卡模型建立和分析,萬字闡述,收藏

give me some credit資料集age年齡變量關于好壞客戶的分類箱型圖統計。我們可以看到好客戶年齡中位數要高于壞客戶年齡中位數。

基于Python的信用評分卡模型建立和分析,萬字闡述,收藏

五、變量選擇

變量選擇,通過統計學和機器學習的方法,篩選出對違約狀态影響最顯著的變量。常見變量選擇方法很多,包括iv,feature importance,方差等等 。另外缺失率太高的變量也建議删除。無業務解釋性變量且沒有價值變量也建議删除。

《python信用評分卡模組化(附代碼)》教程中內建樹算法catboost的feature importance可視化圖,我們可以明顯看出RevolvingUtilizationOfUnsecuredLines可用額度比值變量的重要性最高。圖中藍色柱越長,重要性越大,反之亦然。

基于Python的信用評分卡模型建立和分析,萬字闡述,收藏

《python信用評分卡模組化(附代碼)》教程中變量iv值計算結果如下,我們清晰看到RevolvingUtilizationOfUnsecuredLines可用額度比值變量的iv最高。

基于Python的信用評分卡模型建立和分析,萬字闡述,收藏

通過feature importance和iv值方法我們都得到同樣結論:RevolvingUtilizationOfUnsecuredLines可用額度比值變量是最重要的。

資料洩露

資料洩露是一個專用名詞,表示有入模變量和target目标變量作用極其相似,這樣會讓模型提前知道預測結果,發生作弊,模型表現接近完美,如下圖。

基于Python的信用評分卡模型建立和分析,萬字闡述,收藏

我們變量篩選環節需要查找是否存在資料洩露變量。

查找方法很多,最好方法是看變量相關性。資料洩漏變量和target目标變量相關性會接近1

基于Python的信用評分卡模型建立和分析,萬字闡述,收藏

第二種方法是模型法,通過變量重要性來觀察資料洩漏變量。如下圖lightgbm在資料洩漏觀察中效果不如catboost。lightgbm變量重要性排序中,每個變量權重都會考慮相對平衡。catboost變量重要性會突出重要變量,這樣更容易找出資料洩漏變量。

基于Python的信用評分卡模型建立和分析,萬字闡述,收藏
基于Python的信用評分卡模型建立和分析,萬字闡述,收藏

我方​​《python風控模組化實戰lendingClub》​​教程中重點闡述了catboost算法細節運用,有興趣朋友可前往了解。

‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍六、模型開發‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍

下圖是建立分類器模型的常見算法,模型驗證方法和模型監控内容結構化展示

基于Python的信用評分卡模型建立和分析,萬字闡述,收藏

邏輯回歸,決策樹,随機森林不同算法的對比如下圖

基于Python的信用評分卡模型建立和分析,萬字闡述,收藏
邏輯回歸的類型:

大體上可以分為,

1. 二進制邏輯回歸——兩個或二進制結果,如是或否

2. 多項 Logistic 回歸 - 三個或更多結果,如一等、二等和三等或無學位

3.序數邏輯回歸——三個或更多類似于多項邏輯回歸。

評分卡模型開發用的是邏輯回歸。邏輯回歸的一個難點是sigmoid函數,我們簡單介紹一下sigmoid函數和邏輯回歸關系。

Logit 函數到 Sigmoid 函數 - Logistic 回歸:

邏輯回歸可以表示為,

基于Python的信用評分卡模型建立和分析,萬字闡述,收藏

其中 p(x)/(1-p(x)) 稱為賠率,左側稱為 logit 或 log-odds 函數。幾率是成功幾率與失敗幾率的比值。是以,在邏輯回歸中,輸入的線性組合被轉換為 log(odds),輸出為 1。

以下是上述函數的反函數

基于Python的信用評分卡模型建立和分析,萬字闡述,收藏

這是 Sigmoid 函數,它産生 S 形曲線。它總是傳回一個介于 0 和 1 之間的機率值。Sigmoid 函數用于将期望值轉換為機率。該函數将任何實數轉換為 0 到 1 之間的數字。我們利用 sigmoid 将預測轉換為機器學習中的機率。

數學上的 sigmoid 函數可以是,

基于Python的信用評分卡模型建立和分析,萬字闡述,收藏
基于Python的信用評分卡模型建立和分析,萬字闡述,收藏

模型開發,評分卡模組化主要難點是woe分箱,分數拉伸,變量系數計算。其中woe分箱是評分卡中難點中難點,需要豐富統計學知識和業務經驗。目前分箱算法多達50多種,沒有統一金标準,一般是先機器自動分箱,然後再手動調整分箱,最後反複測試模型最後性能,擇優選取最優分箱算法。

《python信用評分卡模組化(附代碼)》講解Kmeans,等頻分箱、等距分箱,卡方分箱,決策樹分箱算法原理和python實作分箱代碼。《python信用評分卡模組化(附代碼)》還告訴你如何選擇分箱方法?在不同需求下,選擇最合适分箱方法。

基于Python的信用評分卡模型建立和分析,萬字闡述,收藏

分箱主要分為有監督方法和無監督方法。k均值聚類算法(k-means clustering algorithm)是一種疊代求解的聚類分析算法,其步驟是,預将資料分為K組,則随機選取K個對象作為初始的聚類中心,然後計算每個對象與各個種子聚類中心之間的距離,把每個對象配置設定給距離它最近的聚類中心。聚類中心以及配置設定給它們的對象就代表一個聚類。每配置設定一個樣本,聚類的聚類中心會根據聚類中現有的對象被重新計算。這個過程将不斷重複直到滿足某個終止條件。終止條件可以是沒有(或最小數目)對象被重新配置設定給不同的聚類,沒有(或最小數目)聚類中心再發生變化,誤差平方和局部最小。下圖是Kmeans分箱算法原理。

基于Python的信用評分卡模型建立和分析,萬字闡述,收藏

傳說中的最優分箱就是決策樹分箱。

決策樹分箱算法步驟為:

步驟 1:首先,它使用我們想要離散化的變量來訓練一個有限深度(2、3 或 4)的決策樹來預測目标。

第 2 步:然後将原始變量值替換為樹傳回的機率。單個 bin 内的所有觀測值的機率相同,是以用機率替換相當于将決策樹決定的截止值内的觀測值分組。

決策樹分箱算法好處和缺點是:

好處 :

  • 機率預測傳回的決策樹與目标單調相關。
  • 新的 bin 顯示出減少的熵,這是每個桶/桶内的觀察結果與它們自己的相似度,而不是其他桶/桶的觀察結果。
  • 樹會自動找到垃圾箱。

缺點:

  • 可能會導緻過拟合
  • 更重要的是,可能需要對樹參數進行一些調整以獲得最佳分割(例如,深度、一個分區中的最小樣本數、最大分區數和最小資訊增益)。這可能很耗時。
基于Python的信用評分卡模型建立和分析,萬字闡述,收藏

                                    (決策樹分箱可視化)

等距分箱可用于類似age年齡的變量。

基于Python的信用評分卡模型建立和分析,萬字闡述,收藏

分箱完成後,就把分箱資料轉換為woe資料,最後用邏輯回歸算法模組化。

分箱的簡單代碼

# 定義自動分箱函數
def mono_bin(Y, X, n = 20):
    r = 0
    good=Y.sum()
    bad=Y.count()-good
    while np.abs(r) < 1:
        d1 = pd.DataFrame({"X": X, "Y": Y, "Bucket": pd.qcut(X, n)})
        d2 = d1.groupby('Bucket', as_index = True)
        r, p = stats.spearmanr(d2.mean().X, d2.mean().Y)
        n = n - 1
    d3 = pd.DataFrame(d2.X.min(), columns = ['min'])
    d3['min']=d2.min().X
    d3['max'] = d2.max().X
    d3['sum'] = d2.sum().Y
    d3['total'] = d2.count().Y
    d3['rate'] = d2.mean().Y
    d3['woe']=np.log((d3['rate']/(1-d3['rate']))/(good/bad))
    d4 = (d3.sort_index(by = 'min')).reset_index(drop=True)
    print("=" * 60)
    print(d4)
    return d4      

七、模型驗證

邏輯回歸算法模組化後,我們需要模型驗證。模型驗證是核實模型的區分能力、預測能力、穩定性、排序能力等名額是否合格,并形成模型評估報告,得出模型是否可以使用的結論。模型驗證不是一次性完成,而是當模組化後,模型上線前,模型上線後定期驗證。模型開發和維護是一個循環周期,不是一次完成。

着時間推移,模型區分能力,例如ks,auc會逐漸下降,模型穩定性也會發生偏移。當模型區分能力下降顯著或模型穩定性發生較大偏移時,我們需要重新開發模型,疊代模型。

模型驗證名額涉及到腳本主要來自sklearn的metrics,具體名額如下:

基于Python的信用評分卡模型建立和分析,萬字闡述,收藏

 排序類評估——ROC名額:

很多統計名額來源于戰争。ROC最早用于英國雷達分辨鳥或德國飛機的機率。二戰期間首次用于分析雷達有效性。在早些時候雷達,有時很難從飛機上分辨出一隻鳥。英國人率先使用 ROC 曲線來優化他們依賴雷達進行判别的方式在來襲的德國飛機和鳥類之間。

AUC(area under the curve)是機器學習領域中一種常見且重要的模型評估名額,用于計算二進制分類器效率的方法。AUC表示ROC(receiver operator characteristic)曲線下的面積,即AUC = ROC 曲線下面積。

基于Python的信用評分卡模型建立和分析,萬字闡述,收藏

sensitivity=黑色豎線右邊紅色像素面積/紅色像素總面積

false positive=黑色豎線右邊綠色像素面積/藍色像素總面積

當我們對不同的門檻值進行周遊時,産生的 (假陽率, 真陽率) 坐标點也就可以連成ROC曲線,進而求得曲線下面積AUC。

基于Python的信用評分卡模型建立和分析,萬字闡述,收藏

K-S值

在完成一個模型後,将測試模型的樣本平均分成10組,以好樣本占比降序從左到右進行排列,其中第一組的好樣本占比最大,壞樣本占比最小。将KS檢驗應用于信用評級模型主要是為了驗證模型對違約對象的區分能力,通常是在模型預測全體樣本的信用評分後,将全體樣本按違約與非違約分為兩部分,然後用KS統計量來檢驗這兩組樣本信用評分的分布是否有顯著差異。

基于Python的信用評分卡模型建立和分析,萬字闡述,收藏
基于Python的信用評分卡模型建立和分析,萬字闡述,收藏

GINI系數

基于Python的信用評分卡模型建立和分析,萬字闡述,收藏

使用洛倫茨曲線,可以描述預期違約客戶的分布。

基尼系數常用于統計宏觀經濟的貧富差距。例如将一個國家所有的人口按最貧窮到最富有進行排列,随着人數的累計,這些人口所擁有的财富的比例也逐漸增加到100%,按這個方法得到圖中的曲線,稱為洛倫茲曲線。基尼系數就是圖中A/B的比例。可以看到,假如這個國家最富有的那群人占據了越多的财富,貧富差距越大,那麼洛倫茨曲線就會越彎曲,基尼系數就越大。

基尼系數顯示的是好客戶的比例(累計),而不是所有客戶。它顯示了模型與随機模型相比具有更好分類能力的程度。它也被稱為基尼指數。基尼系數可以取-1 到1 之間的值。負值對應于分數含義相反的模型。

下面看基尼系數的計算步驟:

基于Python的信用評分卡模型建立和分析,萬字闡述,收藏

在ROC圖中,GINI=A/(A+B)=A/C=(A+C)/C-1=AUC/C-1

其中,C=1/2 是以,GINI=2AUC-1

《python信用評分卡模組化(附代碼)》教程中訓練模型AUC為0.929,具體模型性能如下:

model accuracy is: 0.9406307593547452

model precision is: 0.9060132575757576

model sensitivity is: 0.6077497220898841

f1_score: 0.7274973861800208

AUC: 0.9290751730536397

good classifier

gini 0.8581503461072795

ks value:0.7107

遠超網際網路give me some credit資料集模組化論文的模型性能AUC 0.85。

基于Python的信用評分卡模型建立和分析,萬字闡述,收藏

邏輯回歸調參

在模型驗證中,我們還要測試模型參數是否最佳。邏輯回歸中沒有需要調整的基本超參數。盡管它有很多參數,但以下三個參數可能有助于微調以獲得更好的結果,

正則化(懲罰)有時可能是有益的。

懲罰 - {'l1', 'l2', 'elasticnet', 'none'}, default='l2'

懲罰強度由 C 參數控制,這可能很有用。

C –浮點數,預設值 = 1.0

使用不同的求解器,您有時可能會觀察到有用的性能或收斂變化。

求解器 - {'newton-cg', 'lbfgs', 'liblinear', 'sag', 'saga'}, default='lbfgs'

注意:要使用的算法由懲罰決定:求解器支援的懲罰:

1. 'newton-cg' – ['l2', 'none']

2. 'lbfgs' – ['l2', 'none']

3.'liblinear' - ['l1', 'l2']

4. 'sag' – ['l2', 'none']

5. 'saga' – ['elasticnet', 'l1', 'l2', 'none']

八、評分卡誕生

模型根據邏輯回歸的變量系數和WOE值來生成評分卡。評分卡友善業務解釋,已使用幾十年,非常穩定,深受金融行業喜愛。其方法就是将Logistic模型機率分轉換為300-900分的标準評分的形式。國内絕大多數信用評分卡都效仿的美國FICO分數。

FICO 分數為 800 或以上的個人具有特殊的信用記錄。信用評分高的人很可能多年來擁有多項信用額度。他們沒有超過任何信用額度,并及時還清了所有債務。

中高 700 分的 FICO 分數是不錯的分數。得分在此範圍内的個人明智地借貸和消費并及時付款。這些人,例如 800 歲以上的人,往往更容易獲得信貸,并且通常支付的利率要低得多。

最常見的分數介于 650 和 750 之間。雖然分數在此範圍内的個人信用相當好,但他們可能會延遲付款。這些人通常不會很難獲得貸款。但是,他們可能需要支付略高的利率。

最後一個要考慮的實際範圍是 599 或更低的分數。它們被認為信用評分不佳,通常是由于多次延遲付款、未能償還債務或已轉到收款機構的債務所緻。擁有此類 FICO 分數的個人通常很難(如果不是不可能的話)獲得任何形式的信用。

基于Python的信用評分卡模型建立和分析,萬字闡述,收藏

如下圖, FICO信用分在very poor300-579分的占比最低,隻有17%;good670-739分的占比最高,達到21.5%。

基于Python的信用評分卡模型建立和分析,萬字闡述,收藏

《python信用評分卡模組化(附代碼)》中評分卡生成有詳細章節講解,包括PDO,theta0,P0,A,B,odds,woe,iv等專業術語有完全解讀。 

基于Python的信用評分卡模型建立和分析,萬字闡述,收藏

九.評分卡自動評分系統

我們通過上面基礎,可以生成自動化評分系統,對每個申請單使用者生成好壞客戶真實标簽,好壞客戶預測标簽,壞客戶機率值,拉伸評分。

基于Python的信用評分卡模型建立和分析,萬字闡述,收藏

根據信用評分卡方法,我們可以建立計算機自動信用化評分系統。美國傳統産品FICO有類似功能,FICO底層語言是Java。目前流行Java,python或R多種語言建構評分卡自動化模型系統。如果資料量大,建立自動信用化評分系統并非易事,需要專業團隊不斷測試和更新。python或R是開源語言,包定期更新,如果沒有專業團隊維護,該系統在将來會出現嚴重問題。

十.模型監控

着時間推移,模型區分能力,例如ks,auc會逐漸下降,模型穩定性也會發生偏移。我們需要專業模型監控團隊,當監控到模型區分能力下降顯著或模型穩定性發生較大偏移時,我們需要重新開發模型,疊代模型。模型監控團隊應該每日按時郵件發送模型監控報表給相關團隊,特别是開發團隊和業務團隊。

模型監控的ks名額,當模型ks低于0.2時,模型區分好壞客戶能力幾乎沒有作用,需要重新疊代模型。

基于Python的信用評分卡模型建立和分析,萬字闡述,收藏

模型監控的bad rate名額,當bad rate突然升高時,上司會非常緊張,這意味着大量貸款收不回成本。

基于Python的信用評分卡模型建立和分析,萬字闡述,收藏

模型監控的PSI名額,當PSI高于0.25時,暗示模型極不穩定,需要重新疊代。

基于Python的信用評分卡模型建立和分析,萬字闡述,收藏

模型監控與模型效果評測一樣,也是從兩個方面去監控,一是有效性,主要看過件樣本在後續的逾期表現,這種逾期不需要和模組化樣本那麼嚴格,可以放松一些。二是穩定性,同樣是變量穩定性和模型穩定性,評測的方式與模型效果評價部分類似。監測可以分為前端、後端監控。

基于Python的信用評分卡模型建立和分析,萬字闡述,收藏

(1)前端監控,授信之前,别的客戶來了,這個模型能不能用?

長期使用的模型,其中的變量一定不能波動性較大。

比如,收入這個名額,雖然很重要,但是波動性很大,不适合用在長期模組化過程中。如果硬要把收入放到模型之中,可以改成收入的百分位制(排名)。

(2)後端監控,模組化授信之後,打了分數,看看一年之後,分數是否發生了改變。

主要監控模型的正确性以及變量選擇的有效性。出現了不平滑的問題,需要重新考慮

基于Python的信用評分卡模型建立和分析,萬字闡述,收藏

總結

基于Python的信用評分卡模型主要流程就為大家介紹到這裡,但實操評分卡模組化中有很多細節,網際網路上對這些細節描述過于草率甚至不正确。例如變量缺失率達到80%-90%就應該直接删除該變量嗎?變量相關性高達0.8就可以去掉嗎?經驗豐富模組化人員需要在數學理論,業務線實際需求,計算機測試結果等多方面找到平衡點,而不是隻從一個角度思考問題。這就像經驗豐富外科醫生并不一定完全遵循教科書的理論。統計學,機器學習,人工智能等領域裡有很多争議地方,并非有完全統一共識。各位在學習時要保持獨立思考能力,這樣才能不斷優化資料科學知識。