參考場景:用戶信用評分

文中涉及的「數據目錄」和「源代碼目錄」見雲盤:pan.baidu.com/s/1slJntR

需要評估一個用戶的價值和風險的場景非常多,比如在各種金融場景,像信用卡、互聯網借貸等等。但是,用戶的價值或者風險都是隱藏很深的信息,所以,很多時候要根據用戶的各種行為,來推測其未來可能產生的價值或者風險,並通過評分進行量化。

這裡有一個大約包括 3萬個用戶在幾個月的時間內的信用卡使用情況數據(數據目錄下 credit_clients.xls ),現在需要建立一個模型,來判斷每個用戶未來產生違約的可能性高低。

這個例子中的程序可見源代碼目錄下 credit.knwf

1、認識和清洗數據

先來了解數據中的屬性含義:

這個數據比較簡單,每個屬性的定義和取值也很明確,因此,清洗數據相對比較容易,我們還是用 KNIME 進行一下簡單的清洗,具體源碼可以參考源代碼目錄下的 credit.knwf:

其中比較重要的幾個能夠反映信用卡持卡人特點的幾個屬性應該是額度、教育程度、年齡。下面是這三個屬性的大致分布:

大致可以看到,信用額度基本上在 50萬以上基本很少;學歷以本科和研究生為主;年齡分布的峰值大約在 30歲。另外,如果用平行坐標圖看一下可以發現,在違約的人群中大額度信用的人較少。

2、探索性統計

在進行深入分析之前,對這個數據我們可以還應該進行一些簡單的統計,去獲得一些更加直觀的數據感覺。

前面我們已經看了各種屬性的分布,現在我們從業務的角度思考一下。一個客戶未來會不會違約,肯定和這個用戶的屬性有關,但是某一類屬性如何反應這個客戶違約概率的大小?從概率上看,這個問題是一個條件概率問題。比如,我們遇到一個新的客戶,如果知道這個客戶是 28歲,那麼,有經驗的業務員應該去了解過去所有 28歲的客戶中,違約的比例會有多大,這一定在某個維度反應了這個客戶可能違約的概率。

所以,讓我們先來統計一下各個年齡的違約比例:

如果以 5年為間隔來統計不同的年齡段的話,是下面這樣的結果,違約率大概都在 20% 到 30% 之間,30歲左右的客戶違約率最低:

如果考察信用額度,以信用額度的四分位數作為分隔進行統計,那麼顯然,越是額度高的客戶,違約的概率越小,額度最高的四分之一客戶(下圖 Q4)的違約比例只有額度最低的四分之一客戶(下圖 Q1)的一半不到:

如果考察教育程度,研究生學歷的群體平均違約率為 19.2%,本科生學歷的群體平均違約率為 23.7%,高中生學歷的群體平均違約率為 25.2%,學歷越高的違約比例越低,但是相差不大,在 5個百分點以內。還有「其它」學歷,這部分數據的違約率極低,只有 7%,這和上面一般情況相差太多,應該是樣本太少或者數據準備時造成的數據傾斜,這在後續分析中需要注意。

另外,按性別統計的話,男性的平均違約率為 24.2%,女性的平均違約率為 20.8%,相對男性更容易違約。

3、構建新特徵

除了數據中本身的屬性,通過業務中很容易想到,還有一些應該非常有用的特徵可以計算出來。比如,數據中有過去半年的還款情況,那麼,在半年中總共的逾期次數就是一個非常顯然的重要特徵。

值得注意的是,在這半年中有 5個月的賬單和還款是可以一一對應上的(上個月消費,這個月還款),因此,重點可以以這 5個月作為主要參考。於是,我們總共構建了如下的新特徵:

  • 逾期次數 default_times
  • 5個月總共賬單金額 bill_amt
  • 5個月總共還款金額 pay_amt
  • 5個月欠款金額 default_amt
  • 5個月還款比例 pay_rate

以逾期次數為例,如果根據逾期次數進行統計,那麼如果過去半年如果一次沒有逾期的客戶群體,違約的比例只有 11.7%,而逾期達到 3次以後,違約比例迅速上升到 50%以上,如果過去每次都逾期,那麼下個月違約的比例高達 70%多,顯然,這是一個比任何原有屬性都敏感的特徵。

4、經典的評分卡模型

評分卡模型的目的在於構造一個模型,模型可以根據客戶的屬性來計算出一個評分值,然後根據這個評分值的高低來判斷一個客戶價值高低或者風險的大小,比如我們熟悉的芝麻信用,就是這樣一個類似的評分值。

一種經典的評分卡模型基於邏輯回歸建立,總體思路是先通過邏輯回歸來得到各個特徵的影響因子,然後根據這些影響因子來推導評分公式。另外,由於評分卡模型一般要求模型有較好的解釋性,因此,一般還會在開始就對特徵進行選擇,找到和模型最相關、解釋性好的那些特徵。

基於上面的屬性和特徵,首先我們按照常規的方法,將一些屬性通過分段、One-Hot編碼的方式來形成適合進行邏輯回歸計算的特徵,再採用計算信息增益的方式來做特徵選擇:

從上圖的各個特徵的信息增益已經可以看出,對客戶違約概率影響最大的特徵都是和過去的違約行為相關,最相關的特徵是過去半年的總計違約次數以及最近的這個月是否違約。而像賬單金額、年齡、婚姻狀況、性別、教育程度這樣的特徵整體影響不大。

在邏輯回歸的定義中,如果某個客戶下個月會發生違約的概率如果為 p ,那麼, p 和各個特徵 x_i 之間有如下關係:

log(frac{p}{1-p})=eta_0+eta_1x_1+...+eta_ix_i+...+eta_nx_n

其中 frac{p}{1-p} 為發生違約事件的概率和沒有發生違約事件的概率之比,這在邏輯回歸中稱為事件發生比(odds),邏輯回歸的假設就是事件發生比的對數 log(odds) 和特徵之間符合線性關係。我們很容易可以通過如下的流程來得到這個線性關係中的各個 eta_i 的值:

這個過程中,除了根據信息增益選擇特徵,還可以在訓練模型完成後,檢查 Logistic Regression Learner 節點的 Coefficient and Statistics 屬性,通過查看各個特徵的 p值,來排除不顯著的特徵。

除此之外,模型中的各個特徵在進行訓練前都進行了標準化處理,我們可以通過查看 Normalizer 節點的 Normalize Model 屬性來查看各個特徵都進行了什麼變換。

最後我們得到一個這樣的邏輯回歸模型:

[ egin{split} log(odds) = -1.413 + 0.388PAY\_1 - 0.117PAY\_2 - 0.063PAY\_3 \ - 0.103PAY\_4 - 0.056PAY\_5 - 0.075PAY\_6 \ + 0.84default\_times - 0.052pay\_rate end{split} ]

這個模型的解釋性非常好,評價一個客戶風險大小主要和這幾個因素強相關:

  • 最近一個月是否違約
  • 最近半年的違約次數
  • 最近半年的還款率

下面,就可以通過這個邏輯回歸模型來建立評分卡,建立評分卡的目的是能夠得到一個更加具有可比性和理解性的評分,這個完全就根據不同場景的需求來確定了。比如,這裡我們希望評分模型能夠做到以下兩點:

  • 無法確定風險高低的客戶,得分為500,此時 log(odds)=0
  • 違約事件發生比 odds 每增大一倍,得分減20

假設評分模型為 score=log(odds)*factor+offset ,通過計算就可以得到,factor=-28.85,offset=500, 因此,客戶的評分卡模型如下:

[ egin{split} score = 500 - 28.85 * (-1.413 + 0.388PAY\_1 - 0.117PAY\_2 - 0.063PAY\_3 \ - 0.103PAY\_4 - 0.056PAY\_5 - 0.075PAY\_6 \ + 0.84default\_times - 0.052pay\_rate) end{split} ]

得到的客戶評分的分布大致如下:

5、思考

為什麼我們前面探索性分析的時候,明顯能夠看到客戶的信用額度、年齡等等特徵對信用卡逾期是有影響的,但是在對客戶建立評分卡的時候並沒有這些特徵的加入?

以信用額度為例,其實用平行坐標圖看一下就會很明顯:

信用額度高的客戶,對應的 PAY_1 到 PAY_6 都是比較小的值,代表了偏向於正常還款或者很短的逾期,也就是說,信用額度對未來是否會逾期的信息已經在 PAY_1 到 PAY_6 特徵中包括了,它們之間存在著相關關係。

再考慮一下實際的情況,對於一個剛辦卡的新客戶,並不存在 PAY_1 到 PAY_6 這樣的歷史還款記錄信息,那麼用上面的評分卡就無法給出一個比較準確的得分了。所以,這個時候,應該重新考慮使用信用額度、年齡、性別這些前面探索分析中已知和客戶信用有關的特徵,用另外一種模型來建立客戶初始的信用評分卡。

6、練習

數據目錄下有一個脫敏的信用卡欺詐數據 creditcard_fraud.zip,其中 Time 屬性代表交易發生的相對時間(單位秒);V1~V28 為若干個相關特徵;Amount 為交易的金額;Class 標記了是否為欺詐交易。

嘗試建立模型來計算任何一個交易是欺詐交易的可能性大小。


推薦閱讀:

新世界秩序有多恐怖?
國外開展誠信教育的思路和辦法
官方現在掌握了我們多少信息?除了信用記錄等等,還有其他的嗎
信用有點「污」的他,竟然也能貸款50萬!
房屋貸款批不下來怎麼辦?如何走出抵押和信用誤區

TAG:信用 | 風險控制 | 評分機制 |