一文帶您了解權重證據(WoE)與信息價值(IV):數據分析的重要利器
在數據分析和建模過程中,變量的選擇和轉換對于模型的性能至關重要。在這方面,證據權重(Weight of evidence,WoE)和信息價值(Information value,IV)是兩種簡單而強大的技術,它們在許多領域都有著廣泛的應用。在信用風險領域、客戶忠誠度分析等得到廣泛使用。
信息價值(IV)通常用于評估分類模型中各個特征的預測能力。它是一種用來衡量預測模型的變量(通常是分類模型)對目標變量的影響程度的指標。信息價值越高,表示該變量對于預測目標變量越重要。
證據權重(WoE)通常用于衡量類別變量與目標變量之間的關聯性,特別適用于邏輯回歸等模型。它通過比較不同類別中目標事件的發生概率來評估每個類別對于預測目標變量的影響程度。WOE值的正負代表了該類別對于目標變量的“好壞”程度,越大的絕對值表示影響越顯著。
證據權重WoE
WoE是一種衡量特征X(自變量)對目標y(因變量)的預測能力的方法。其理論最初用于風險評分分析,并通過以下公式計算:
其中,Non Event%是特定群體中事件沒有發生的分布(占比),Event%是特定群體中事件發生的分布(占比)。例如:信用風險分析中,Event%是指特定群體中發生信用違約的占比,Non Event% 是特定群體中正常的占比。或者在商品分析中,Event% 是特定群體中壞的商品分布/占比,Non Event% 是指特定群體中好的商品分布/占比。
證據權重(WoE)計算步驟:
- 對于連續變量,將數據分為 10 個部分(或更少,具體取決于分布)。
- 計算每組中事件和非事件的數量(bin)
- 計算每組中事件的百分比和非事件的百分比。
- 通過非事件百分比和事件百分比除以自然對數來計算 WOE
接下來我們以UCLA統計網站中的研究生入學申請的數據集為例進行計算WoE,字段含義如下:
- admit: 二元變量,表示學生是否被錄取,其中1代表被錄取,0代表未被錄取。
- gre: 數值變量,表示學生的GRE(研究生入學考試)成績。
- gpa: 數值變量,表示學生的GPA(平均學分績點)成績。
- rank: 數值變量,表示申請學生所在的本科院校排名,可能的取值范圍為1至4,其中1代表最高排名,4代表最低排名。
import pandas as pd
mydata = pd.read_csv("https://stats.idre.ucla.edu/stat/data/binary.csv")
mydata
下面是計算WoE 和IV 的過程函數:
def iv_woe(data, target, bins=10, show_woe=False):
#Empty Dataframe
newDF,woeDF = pd.DataFrame(), pd.DataFrame()
#Extract Column Names
cols = data.columns
#Run WOE and IV on all the independent variables
for ivars in cols[~cols.isin([target])]:
if (data[ivars].dtype.kind in 'bifc') and (len(np.unique(data[ivars]))>10):
binned_x = pd.qcut(data[ivars], bins, duplicates='drop')
d0 = pd.DataFrame({'x': binned_x, 'y': data[target]})
else:
d0 = pd.DataFrame({'x': data[ivars], 'y': data[target]})
d0 = d0.astype({"x": str})
d = d0.groupby("x", as_index=False, dropna=False).agg({"y": ["count", "sum"]})
d.columns = ['Cutoff', 'N', 'Events']
d['% of Events'] = np.maximum(d['Events'], 0.5) / d['Events'].sum()
d['Non-Events'] = d['N'] - d['Events']
d['% of Non-Events'] = np.maximum(d['Non-Events'], 0.5) / d['Non-Events'].sum()
d['WoE'] = np.log(d['% of Non-Events']/d['% of Events'])
d['IV'] = d['WoE'] * (d['% of Non-Events']-d['% of Events'])
d.insert(loc=0, column='Variable', value=ivars)
#print("Information value of " + ivars + " is " + str(round(d['IV'].sum(),6)))
temp =pd.DataFrame({"Variable" : [ivars], "IV" : [d['IV'].sum()]}, columns = ["Variable", "IV"])
newDF=pd.concat([newDF,temp], axis=0)
woeDF=pd.concat([woeDF,d], axis=0)
#Show WOE Table
if show_woe == True:
print(d)
return newDF, woeDF
計算上面的數據集的WoE ,目標變量為admit:
iv,woe=iv_woe(mydata,'admit')
woe
正 WOE 意味著被拒絕錄取的可能性更高(非事件,拒絕錄?。?WOE 則相反。
權重證據 WoE的好處
以下是一些權重證據的好處以及它如何可以用來改善您的預測模型。
- 它可以處理異常值。假設您有一個連續變量,比如年薪,而極端值超過了5億美元。這些值將被分組到一個類別中(比如說25-50億美元)。隨后,我們將使用每個類別的WOE分數,而不是使用原始值。
- 它可以處理缺失值,因為缺失值可以單獨分組。
- 由于WOE轉換處理分類變量,因此無需虛擬變量。
- WOE轉換可以幫助您建立嚴格的對數幾率的線性關系。否則,使用其他轉換方法(如對數、平方根等)很難實現線性關系。簡而言之,如果不使用WOE轉換,您可能需要嘗試多種轉換方法來實現這一點。
信息價值 IV
信息價值(IV)是選擇預測模型中重要變量的最有用技術之一。它有助于根據其重要性對變量進行排序。IV是使用以下公式計算的:
以上面的計算函數和數據集計算各個特征變量的IV 如下:
iv,woe=iv_woe(mydata,'admit')
iv
信息價值IV 規則
根據Siddiqi(2006)的說法,在信用評分中,IV統計量的值可以按照以下方式解釋。如果IV統計量為:
- 小于0.02,則預測變量對建模(區分好壞)沒有用處
- 0.02到0.1,則預測變量與好壞比的關系較弱
- 0.1到0.3,則預測變量與好壞比的關系中等強度
- 0.3到0.5,則預測變量與好壞比的關系較強
- 大于0.5,則關系可疑(請檢查一次)
WOE和IV是數據分析和建模中的重要工具,它們能夠幫助我們發現特征與目標變量之間的關系,并指導我們做出更好的決策。通過深入理解這些技術的原理和應用,我們可以更好地優化模型,提高預測準確性,從而實現更好的業務結果。