【詳解】銀行信用評分卡中的WOE在幹什麼?
WOE & IV
woe全稱叫Weight of Evidence,常用在風險評估、授信評分卡等領域。
IV全稱是Information value,可通過woe加權求和得到,衡量自變數對應變數的預測能力。
雖然網上到處都是神經網路、xgboost的文章,但當下的建模過程中(至少在金融風控領域)並沒有完全擺脫logistic模型,原因大致有以下幾點:
- logistic模型客群變化的敏感度不如其他高複雜度模型,因此穩健更好,魯棒性更強。
- 模型直觀。係數含義好闡述、易理解。對金融領域高管以及銀行出身的建模專家,變數係數可以跟他們的業內知識做交叉驗證,更容易讓人信服。
- 也是基於2的模型直觀性,當模型效果衰減的時候,logistic模型能更好的診斷病因。
IV值我相信相關領域的人都用過,所以本文不展開講。
本文主要講的是WOE具有什麼意義,或者說我們能從WOE中獲得什麼信息。
-------------------------------------本文目錄-------------------------------------
一、 WOE的意義
二、 如何計算WOE
三、 WOE的單調性
---1. WOE做差(引入)
---2. Odds Ratio
----------a. OR的計算
----------b. OR在邏輯回歸中的意義
----------c. OR的估計值與WOE
---3. 回到正題(WOE單調意義)
四、 WOE呈線性&WOE編碼的意義
五、 淺談WOE與貝葉斯
一、先總結WOE的意義(這樣才有看下去的動力
計算woe(以及IV)的意義我所知的有以下幾點:
- IV值可以衡量各變數對y的預測能力,用於篩選變數。
- 對離散型變數,woe可以觀察各個level間的跳轉對odds的提升是否呈線性,而IV可以衡量變數整體(而不是每個level)的預測能力。
當你有千級別或者萬級別的欄位時,建模前計算IV值是很有必要的。以地區郵編為例,level很多,每個level下樣本少,常規的處理是用dummy encoding將n個level的變數拆成n-1個啞變數,然後建模做檢驗,得到這n-1個啞變數的顯著性,再對n-1個啞變數做聚類等處理才能feed in model。如果到最後你不管怎麼處理都不太好feed進model,那就白忙了,場面會相當的尷尬。這個時候就體現了事先計算IV值來篩選變數的重要性了。
- 對連續型變數,woe和IV值為分箱的合理性提供了一定的依據。
分箱處理連續型變數會有信息損失,但由於絕大多數情況下連續型變數對odds的提升都不是線性的,這裡能產生的負面影響遠比信息損失要大,因此一般都需要做分箱處理。
- 用woe編碼可以處理缺失值問題。
- 歡迎補充
二、如何計算WOE
以信用評分卡的建模場景為例:X是客戶樣本欄位,Y表示客戶逾期與否,其中Y=1代表逾期,Y=0代表未逾期。 我們希望能用客戶已知的信息來預測客戶借款後發生逾期的概率,以此來決定是否放貸。
下面我們拿Age(年齡)這個變數來計算相關的woe ,首先對每個level分層統計【表1】:
然後計算各分層的好壞佔比【表2】
最後通過好壞佔比計算woe【表3】
以上三個表就是計算woe的過程,簡單易懂。
接下來我們講講woe該怎麼用以及有什麼意義。
三、WOE的單調性(涉及odds ratio)
3.1 WOE做差是什麼?
當我們算完woe的時候,我們關注的點一般會有這幾個:woe是否單調、woe是否呈線性、以及IV值的大小。 這裡講一下單調和線性的意義,主要跟logistic回歸中的odds ratio相關。
剛接觸woe的時候,為了研究它的單調性是什麼,我嘗試著將WOE做差,發現得到的結果跟Odds Ratio的形式很像,都是列聯表交叉乘做商:
3.2 Odds Ratio(OR)
為了了解WOE,這裡分三步簡單講一下Odds Ratio(優勢比)。
a. OR的計算
首先要知道Odds(優勢),指的是事件發生和不發生的比例,即:
下面我們設定這個事件為客戶逾期,即Y=1。那麼 時的Odds為:
而Odds Ratio則是兩組odds的比值,比如 和 之間的Odds Ratio為:
b. OR在邏輯回歸中的意義
Odds和Odds ratio在logistic中非常值得重視,因為他們跟參數的interpretation密切相關。
在logistic回歸中:
【OR的意義】當 增加1個單位時,odds將變為原來的 倍:
OR在logistic中的意義在上面講完了,下面來講下OR是怎麼和WOE聯繫起來的。
c. OR的估計值(Marginal OR)與WOE
一般的,我們可以通過列聯表計算Odds和Odds Ratio的估計值。
【值得注意的是】通過列聯表算得的 是指Marginal OR,大家可以將Marginal OR理解為模型 的 ,這是個單變數回歸模型。本文中涉及WOE的OR指的都是Marginal OR。而多元回歸中的 對應的是Conditional OR。兩者是不一樣的。
3.3 回到正題
結合上面OR的知識,WOE單調實際上就意味著當 從 單調上升時,相應的 也呈現單調遞增(遞減), 也呈單調遞增(遞減)。
我們可以用一個更簡潔的公式概括上面的計算過程:
從上式可以看出, 和 只差了一個常數。也就是說 越大, 越大。
#----------------------證明WOE之差與OR相等--------------------import pandas as pdimport numpy as npdf=pd.DataFrame({X1:np.random.randint(3,size=1000), y:np.random.randint(2,size=1000)})table=pd.crosstab(df[y],df[X1])# 計算WOE差值woe_table=table.div(table.sum(axis=1),axis=0)woe=(woe_table.iloc[1,:]/woe_table.iloc[0,:]).apply(lambda x:np.log(x))woe[1]-woe[0],woe[2]-woe[1]# 計算OROR_0_1=np.log(1.0*table.iloc[0,0]*table.iloc[1,1]/table.iloc[0,1]/table.iloc[1,0])OR_1_2=np.log(1.0*table.iloc[0,1]*table.iloc[1,2]/table.iloc[0,2]/table.iloc[1,1])OR_0_1,OR_1_2
四、WOE呈線性&WOE編碼 的意義
WOE呈線性是一個很強的條件,比單調要強得多。一般來說是不會這麼巧出現線性的情況的,我之所以要提,是因為我們可以通過WOE編碼人為地讓它呈線性,這個後面再提。
先說WOE呈線性的意義
如果一個變數的不同level(假設各level分別以 0,1,2,3...進行編碼)的WOE呈線性,說明該變數每增加一個單位,對Odds產生的影響是一樣的。
還記得開篇提到的郵政編碼的例子么?在那裡我們需要對屬性變數做dummy encoding,因為我們不能保證變數從任意 跳轉到 時對Odds產生的影響都一樣,所以不能用{0,1,2,3...}這樣等間距的編碼方式。
WOE編碼的意義
而WOE近似於事先計算了變數各level的Marginal Odds,將對應的WOE取代屬性變數的原始值{0,1,2,3...},即使用WOE編碼,可以使得該變數每增加一個單位,Odds就增加相同的值,參考下圖。
結論就是:如果使用了WOE編碼,當我們對單變數進行回歸(Y~Xi)時,可以不做dummy encoding,此時變數的係數恆為1。WOE編碼起到了把回歸係數「正則化」的作用。
代碼提供驗證:
from sklearn.linear_model import LogisticRegression import pandas as pdimport numpy as npdf=pd.DataFrame({X1:np.random.randint(3,size=1000), y:np.random.randint(2,size=1000)})table=pd.crosstab(df[y],df[X1])ratio_table=table.div(table.sum(axis=1),axis=0)woe=ratio_table.iloc[1,:]/ratio_table.iloc[0,:]# 使用WOE編碼後,觀察模型係數df.X1=df.X1.replace({0:woe[0],1:woe[1],2:woe[2]})glm=LogisticRegression(C=1e10)glm.fit(df.loc[:,[X1]],df.y)glm.coef_
五、 淺談WOE與貝葉斯
到收尾部分了,這裡主要想說明一個問題:上面WOE解決的問題都是對單變數回歸有效,在多元logistic回歸里仍然有效么?
答案是無效的,多元logistic回歸里的係數並不會因為WOE編碼而全部等於1。
WOE也好,IV也好,做的都是單變數分析。我們認為對Y有較好預測能力的變數,在多元回歸時仍然會有較好的預測能力。基於此邏輯可以用IV值來對變數的重要性進行排序。
WOE與貝葉斯因子的聯繫
簡單提下貝葉斯因子,就不展開講了,各位可以上網查Bayes factor。
當變數不止一個的時候,如果任意 和 關於 條件獨立的話,則有:
條件獨立經常跟貝葉斯相關的東西扯上關係,比如說樸素貝葉斯分類器,之所以「樸素」,就是因為各變數關於Y條件獨立這一強假設。如果不滿足條件獨立,那麼就會出現多個變數對結果產生協同影響的情況,極其影響結果。
為了弱化條件獨立這一個強假設,出現了非完全樸素的貝葉斯分類器(semi-Bayes)
semi-Bayes 總體來說就是用各種規則來對變數進行加權(特別地,當權值是0/1的時候就是進行變數篩選了,並認為篩選後的變數條件獨立),以此來抑制相關變數的協同影響。
我們將semi的思想用在上式,便有:
這個就是用WOE編碼後的logistic模型。
所以說WOE編碼其實也可以從非完全條件獨立的貝葉斯因子的角度去看待。
對WOE的介紹就到此結束了
剛寫完,可能公式和排版等方面會有疏漏
歡迎交流和指正~
大家對專欄的關注讓我倍感榮幸,如果關注是代表一種認可的話,希望大家也不要吝嗇手中點贊的權利
推薦閱讀:
※Kaggle機器學習之泰坦尼克號生還預測
※敲黑板!從零開始,小白如何通過Kaggle競賽提高數據分析能力!
※分析競爭力,數字時代的差異化競爭優勢
※R語言起步--excel透視表功能實現