python iv值计算 空值处理,iv值计算 Python
计算逻辑
先计算不幸值,再计算静脉的值。
其中Y或普通分别是是的,不,反应在因变量中,就是一和0。
彝语是第我组中一的个数,YT是所有(总计)为一的个数。
镍是第我组中0的个数,NT是所有(总计)为0的个数。
举例
数据如下,x分别取1-9,y对应是一和0。
x,y
1,1
2,1
3,0
4,1
5,1
6,0
7,0
8,0
9,1
如果对于x这9行数据分成三组:
第0组:x=1,2,3
第一组:x=4,5,6
第2组:x=7,8,9
则第0组的武器工程军官武器工程师执行官值计算过程如下。
Y0=2,因为分组内当x=1,2的时候y是1,共两个1,则是2.
YT=5,因为y这一列总共有5个1。
N0=1,因为分组内当x=3的时候y是0,共一个1,则是1.
NT=4,因为y这一列共有四个0.
悲哀_0
=ln((2/5)/(1/4))
=ln(0.4/0.25)
=ln(1.6)
=0.47
有了悲哀,开始计算四:
四_0
=(2/5-1/4)*WOE_0
=0.15*0.47
=0.0705
于是可计算出IV_0=0.0705。同理可计算出IV_1=0.070501,IV_2=0.274887。则该X的输入阀交互式视讯自变量(独立变量)即iv=iv_0 iv_2 iv_3=0.415888
计算机编程语言代码
进口熊猫作为螺纹中径
将数组作为铭牌导入
def iv_woe(数据:pd .DataFrame,target:str,bins:int=10) - (pd .数据框架,pd .数据帧):
计算不幸和静脉的值
参数:
-数据:数据帧数据
-目标:y列的名称
-垃圾箱:分箱数(默认是10)
newDF,woeDF=pd .DataFrame(),pd .数据帧()
列=数据。列
对于cols[~cols.isin([target])]中的ivars:
# 数据类型在互补实验中、且数据10则分箱
if( bifc 中的数据[ivars].数据类型.种类)和(len(np.unique(data[ivars]))10):
binned_x=pd.qcut(data[ivars],bin,duplicates=drop )
d0=pd .DataFrame({x: binned_x, y: data[target]})
否则:
d0=pd .DataFrame({x: data[ivars], y: data[target]})
d=d0.groupby(x ,as_index=False).agg({y: [count , sum]})
d.columns=[Cutoff , N , Events]
d[ % of Events ]=NP。最大值(d[事件],0.5)/d[事件].总和()
d[非事件]=d[N] - d[事件]
d[%非事件]=np.maximum(d[非事件],0.5)/d[非事件]。总和()
d[WoE]=np.log(d[%事件]/d[%非事件])
d[IV]=d[WoE] * (d[%事件] - d[%非事件])
d.insert(loc=0,column=Variable ,value=ivars)
打印( ivars 的信息值是str(round(d[IV]).sum(),6)))
温度=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)
返回newDF,woeDF
调用
mydata=pd.read_csv( ./data.csv ,编码=utf8 )
newDF,woeDF=iv_woe(mydata, y )
即可得到。注意,此处默认10组,上例中的x值是0-10,不足以分10组,则每个值为一组。注意其中的如果判断语句
郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。