iv值计算 Python,iv值计算sql
1.代码
基于朱皮特笔记本
#导包
将数组作为铭牌导入
导入数学
进口熊猫作为螺纹中径
从sklearn.utils.multiclass导入目标类型
从科学计算导入统计
#求不幸值和输入阀交互式视讯自变量(独立变量)值
def woe(X,y,event):
res_woe=[] #列表存放不幸字典
res_iv=[] #列表存放输入阀交互式视讯自变量(独立变量)
X1=feature_discretion(X) #对连续型特征进行处理
对于范围(0,X1.shape[-1])中的我:#遍历所有特征
x=X1[:i] #单个特征
woe_dict,iv1=woe_single_x(x,y,event) #计算单个特征的不幸值
res_woe.append
res_iv.append(iv1)
return np.array(res_woe),np.array(res_iv) #返回数组
#求单个特征的不幸值
def woe_single_x(x,y,event):
event_total,non_event_total=count_binary(y,event) #计算好人坏人总数
x _ label=NP。唯一(x)#特征中的分段
woe_dict={} #存放每个分段的名称以及其对应的不幸值
iv=0
对于x标签中的x1:#遍历每个分段
y1=y[np.where(x==x1)[0]]
事件计数,非事件计数=计数二进制(y1,事件=事件)
速率事件=1.0 *事件计数/事件总数
比率_非事件=1.0 *非事件计数/非事件总数
#悲哀无穷大时处理
如果rate_event==0:
print()#print({ ,x1, } :全是好人) #只输出不做处理
elif rate_non_event==0:
print()#print({ ,x1, } :全是坏人)
否则:
woe1=math.log(速率_事件/速率_非事件)
woe_dict[x1]=woe1
iv=(费率_事件-费率_非事件)* woe1
返回悲哀_字典,四
#计算个数
def count_binary(a,event):
event_count=(a==event).总和()
non_event_count=a.shape[-1] -事件计数
返回事件计数,非事件计数
#判断特征数据是否为离散型
定义特征_判断(十):
temp=[]
对于范围(0,X.shape[-1])中的我:
x=X[:i]
x_type=目标类型(十)
如果pd .系列(列表.dtype!=O :
x1=离散(十)
临时追加(x1)
否则:
临时追加(十)
返回np.array(临时).T
#对连续型特征进行离散化
定义离散(十):
res=np.array([0] * x.shape[-1],dtype=int)
对于范围(5)中的我:
第1点=统计。百分比分数(x,i * 20)
第2点=统计。百分比分数(x,(i 1) * 20)
x1=x[NP。其中((x=点1)(x=点2))]
mask=np.in1d(x,x1)
res[mask]=(i 1)
返回资源
2.数据
读取数据
df=PD。read _ CSV(电话_测试。CSV’)
目标变量
y=df[状态]。价值观念
所有特征
X=df.drop([status , sid , uid],axis=1).价值观念
3.结果
将特征的静脉的值和特征构建成字典并按静脉的值对特征进行排序
dic=dict(zip(a,b)) #a为静脉的值列表,b为特征列表
dic_sort=sorted(dic.items(),key=lambda x:x[1],reverse=True)
部分截图
历史中提交的图片或压缩文件
郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。