您好,登錄后才能下訂單哦!
本篇內容介紹了“IV基礎概念是什么”的有關知識,在實際案例的操作過程中,不少人都會遇到這樣的困境,接下來就讓小編帶領大家學習一下如何處理這些情況吧!希望大家仔細閱讀,能夠學有所成!
IV:
<0.03:無預測能力
0.03-0.09:弱
0.1-0.29:中等
0.3-0.49:高
0.5:極高
但是IV不是越高越好的,當IV>1.2時候,可能分箱不好或者存在因果倒置關系
from numpy import log
from pandas import DataFrame as df
import pandas as pd
def createDateset():
dataSet=[
[0, 1, 0],
[0, 0, 0],
[0, 1, 0],
[1, 0, 1],
[1, 0, 0],
[1, 1, 1],
[0, 1, 1],
[1, 1, 1],
[1, 0, 1],
[1, 0, 1]]
return dataSet
def calcWOE(dataset,col,targe):
subdata=df(dataset.groupby(col)[col].count())
suby=df(dataset.groupby(col)[targe].sum())
data=df(pd.merge(subdata,suby,how="left",left_index=True,right_index=True))
b_total=data[targe].sum()
total=data[col].sum()
g_total=total-b_total
data["bad"]=data.apply(lambda x:round(x[targe]/b_total,3),axis=1)
data["good"]=data.apply(lambda x:round((x[col]-x[targe])/g_total,3),axis=1)
data["WOE"]=data.apply(lambda x:log(x.bad/x.good),axis=1)
return data.loc[:,["bad","good","WOE"]]
def calcIV(dataset):
dataset["IV"]=dataset.apply(lambda x:(x.bad-x.good)*x.WOE,axis=1)
IV=sum(dataset["IV"])
return IV
if __name__ == '__main__':
data=createDateset()
print(data)
data=df(data,columns=["x1","x2","y"])
print(data)
data_WOE=calcWOE(data,"x2","y")
print(data_WOE)
data_IV=calcIV(data_WOE)
print(data_IV)
IV的極端情況以及處理方式
IV依賴WOE,并且IV是一個很好的衡量自變量對目標變量影響程度的指標。但是,使用過程中應該注意一個問題:變量的任何分組中,不應該出現響應數=0或非響應數=0的情況。
原因很簡單,當變量一個分組中,響應數=0時,
此時對應的IVi為+∞。
而當變量一個分組中,沒有響應的數量 = 0時,
此時的IVi為+∞。
IVi無論等于負無窮還是正無窮,都是沒有意義的。
由上述問題我們可以看到,使用IV其實有一個缺點,就是不能自動處理變量的分組中出現響應比例為0或100%的情況。那么,遇到響應比例為0或者100%的情況,我們應該怎么做呢?建議如下:
(1)如果可能,直接把這個分組做成一個規則,作為模型的前置條件或補充條件;
(2)重新對變量進行離散化或分組,使每個分組的響應比例都不為0且不為100%,尤其是當一個分組個體數很小時(比如小于100個),強烈建議這樣做,因為本身把一個分組個體數弄得很小就不是太合理。
(3)如果上面兩種方法都無法使用,建議人工把該分組的響應數和非響應的數量進行一定的調整。如果響應數原本為0,可以人工調整響應數為1,如果非響應數原本為0,可以人工調整非響應數為1.
“IV基礎概念是什么”的內容就介紹到這里了,感謝大家的閱讀。如果想了解更多行業相關的知識可以關注億速云網站,小編將為大家輸出更多高質量的實用文章!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。