IV及WOE值詳解-附R源碼實現

1.IV用途

IV全稱Information Value即信息價值或信息量。在用邏輯迴歸、決策樹等模型方法構建分類模型時,經常需要對自變量進行篩選。比如有200個候選自變量,通常情況下不會直接把200個變量直接放到模型中去進行擬合訓練,而會用一些方法從200個自變量中挑選一些放進模型,形成入模變量列表。挑選入模變量過程需要考慮的因素有很多,比如變量預測能力、變量間相關性、變量簡單性(容易生成使用)、變量強壯性(不容易被繞過),變量在業務上可解釋性(被挑戰時可解釋通)等。但其中最主要和最直接的衡量標準是變量預測能力。IV可用來衡量自變量預測能力,但只能針對二分類問題。類似指標還有信息增益、基尼係數變化值等

2.IV值直觀理解

假設在分類問題中目標變量類別有兩類:Y1,Y2。對一個待預測的個體A,要判斷A屬於Y1還是Y2,是需要一定信息的。假設信息總量是I,這些所需要的信息蘊含在所有自變量C1,C2,C3,……,Cn中,那麼對於其中一個自變量Ci來說,其蘊含信息越多,那麼它對判斷A是屬於Y1還是Y2的貢獻度就越大,Ci的信息價值就越大,對應的IV就越大,它就越應該進入到入模變量列表

對變量的一個分組,這個分組響應和未響應的比例與樣本整體響應和未響應的比例相差越大IV值越大,否則IV值越小;極端情況當前分組的響應和未響應的比例和樣本整體響應和未響應的比例相等時,IV值爲0;IV值的取值範圍是[0,+∞),且噹噹前分組中只包含響應客戶或者未響應客戶時,IV = +∞

4.爲何用IV而不直接用WOE

變量各分組的WOE和IV都隱含該分組對目標變量的預測能力。那麼爲何不直接用WOE相加或者絕對值相加作爲衡量一個變量整體預測能力的指標呢?

兩個原因:第一當衡量一個變量預測能力時,所使用的指標值不應是負數,否則說一個變量的預測能力是-2.3,聽起來很怪。第二原因是乘子體現了自變量當前分組中樣本數量佔整體樣本數量比例對變量預測能力的影響

5.IV極端情況及處理方式

IV值在使用過程中應注意一個問題:自變量任何一個分組中都不應該出現響應數=0或非響應數=0的情況。IV無論等於負無窮還是正無窮都是沒有意義的。由上述問題可以看出使用IV其實有一個缺點,就是不能自動處理自變量分組中出現響應比例爲0或100%的情況

建議如下:如果可能直接把這個分組做成一個規則,作爲模型前置條件或補充條件;重新對變量進行離散化,使每個分組的響應比例都不爲0且不爲100%,尤其是當一個分組個體數很小時,強烈建議這樣做,因爲把一個分組樣本數弄得很少就不合理;如果上面兩種方法都無法使用,建議人工把該分組響應數和非響應數量進行一定的調整。如果響應數原本爲0,可以人工調整響應數爲1,如果非響應數原本爲0,可以人工調整非響應數爲1

 6.R實現IV值計算

#基於mtcars數據集
tian=mtcars
tian$label=ifelse(mtcars$hp>100,1,0)

#x自變量,y響應變量,n分組個數
iv_calculation=function(x,y,n){
	y=as.character(y)
	if (class(x)=="numeric")
		x_cut=cut(x,breaks=n)	#有序分組
	y_factor=factor(y)
	tem_df=cbind(x,x_cut,y_factor) %>% as.data.frame()
	
	#分組統計IV值
	iv=0
	for (i in seq_along(unique(tem_df$x_cut))) {
		tem_df_table=table(tem_df$y_factor) %>% as.data.frame()
		ten_df_table=table(tem_df[which(tem_df$x_cut==tem_df$x_cut[i]),]$y_factor) %>% as.data.frame()
		tem_merge=merge(tem_df_table,ten_df_table,by='Var1',suffixes=c(".t",".i"),all=TRUE)
		#缺失值填充爲1,針對極端情況
		tem_merge[,3][which(is.na(tem_merge[,3]))]=1
		iv_tem=(tem_merge[1,3]/tem_merge[1,2]-tem_merge[2,3]/tem_merge[2,2]) * log((tem_merge[1,3]/tem_merge[1,2])/(tem_merge[2,3]/tem_merge[2,2]))
		iv=iv+iv_tem
	}
	return(round(iv,3))
}

iv_calculation(tian$mpg,tian$label,5)

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章