1. 代码

基于jupyter notebook

#导包

import numpy as np

import math

import pandas as pd

from sklearn.utils.multiclass import type_of_target

from scipy import stats

#求woe值和iv值

def woe(X, y, event):

res_woe = [] #列表存放woe字典

res_iv = [] #列表存放iv

X1 = feature_discretion(X) #对连续型特征进行处理

for i in range(0, X1.shape[-1]): #遍历所有特征

x = X1[:, i] #单个特征

woe_dict, iv1 = woe_single_x(x, y, event) #计算单个特征的woe值

res_woe.append(woe_dict)

res_iv.append(iv1)

return np.array(res_woe), np.array(res_iv) #返回数组

#求单个特征的woe值

def woe_single_x(x, y, event):

event_total, non_event_total = count_binary(y, event) #计算好人坏人总数

x_labels = np.unique(x) #特征中的分段

woe_dict = {} #存放每个分段的名称 以及 其对应的woe值

iv = 0

for x1 in x_labels: #遍历每个分段

y1 = y[np.where(x == x1)[0]]

event_count, non_event_count = count_binary(y1, event=event)

rate_event = 1.0 * event_count / event_total

rate_non_event = 1.0 * non_event_count / non_event_total

#woe无穷大时处理

if rate_event == 0:

print()#print("{'",x1,"'}"+":全是好人") #只输出不做处理

elif rate_non_event == 0:

print()#print("{'",x1,"'}"+":全是坏人")

else:

woe1 = math.log(rate_event / rate_non_event)

woe_dict[x1] = woe1

iv += (rate_event - rate_non_event) * woe1

return woe_dict, iv

#计算个数

def count_binary(a, event):

event_count = (a == event).sum()

non_event_count = a.shape[-1] - event_count

return event_count, non_event_count

#判断特征数据是否为离散型

def feature_discretion(X):

temp = []

for i in range(0, X.shape[-1]):

x = X[:, i]

x_type = type_of_target(x)

if pd.Series(list(x)).dtype != 'O':

x1 = discrete(x)

temp.append(x1)

else:

temp.append(x)

return np.array(temp).T

#对连续型特征进行离散化

def discrete(x):

res = np.array([0] * x.shape[-1], dtype=int)

for i in range(5):

point1 = stats.scoreatpercentile(x, i * 20)

point2 = stats.scoreatpercentile(x, (i + 1) * 20)

x1 = x[np.where((x >= point1) & (x <= point2))]

mask = np.in1d(x, x1)

res[mask] = (i + 1)

return res

2. 数据

读取数据

df = pd.read_csv("telephone_test.csv")

目标变量

y=df['status'].values

所有特征

X=df.drop(['status','sid', 'uid'],axis=1).values

3. 结果

将特征的IV值和特征构建成字典并按IV值对特征进行排序

dic = dict(zip(a,b)) #a为IV值列表,b为特征列表

dic_sort= sorted(dic.items(),key = lambda x:x[1],reverse = True)

部分截图

python计算iv值_python计算IV值相关推荐

  1. python最优分箱计算iv值_Python计算woe和iv值

    计算逻辑 先计算WOE值,再计算IV值. 其中Y或N分别是YES,NO,反应在因变量中,就是1和0. Yi是第i组中1的个数,YT是所有(Total)为1的个数. Ni是第i组中0的个数,NT是所有( ...

  2. 怎样用python计算π的值_Python 计算 π 值的简单示例

    对python这个高级语言感兴趣的小伙伴,下面一起跟随编程之家 jb51.cc的小编两巴掌来看看吧! π是一个无数人追随的真正的神奇数字.我不是很清楚一个永远重复的无理数的迷人之处.在我看来,我乐于计 ...

  3. python利用以下公式求π的值_Python 计算 π 值的简单示例

    这篇文章主要为大家详细介绍了Python 计算 π 值的简单示例,具有一定的参考价值,可以用来参考一下. 对python这个高级语言感兴趣的小伙伴,下面一起跟随512笔记的小编两巴掌来看看吧! π是一 ...

  4. python求阶乘之和_python计算阶乘前n项和

    广告关闭 腾讯云11.11云上盛惠 ,精选热门产品助力上云,云服务器首年88元起,买的越多返的越多,最高返5000元! 知道公式后就很简单了,利用for循环,第几行i+1就等于几,当然python中是 ...

  5. python怎么算积分_python计算积分

    python有多个方法计算积分,下面介绍其中三个,以下式为例: 方法一:直接用numpy计算 start = 1 stop = 2 length = 101 x = np.linspace(start ...

  6. python怎么算阶乘_python计算阶乘

    广告关闭 腾讯云11.11云上盛惠 ,精选热门产品助力上云,云服务器首年88元起,买的越多返的越多,最高返5000元! 问题本身很简单,主要是通过这个小问题来演示python的一些用法,例如测试代码运 ...

  7. 用python计算两点坐标_python 计算方位角实例(根据两点的坐标计算)

    知道两点坐标,怎么计算两点方向的方位角? 答:首先计算坐标增量dx,dy(两个对应坐标分量相减,终点的减始点的). 若dx,dy中有一个为零时,根据另一个的正负决定方位角(0,90,180,270这四 ...

  8. python字典修改键所对应值_python - 将键值替换为相同字典中与不同键对应的值

    我对Python脚本没有经验,但作为项目中的一项要求,我不得不构建代码,这是我遇到的问题 -python - 将键值替换为相同字典中与不同键对应的值 我有以下值的字典它来自一个UNIX脚本设置我已经在 ...

  9. [转载] python字典更新值_Python–字典元组值更新

    参考链接: Python字典| update方法 有时在处理元组数据时,我们在执行其版本时会遇到问题,原因是它是不可变的.讨论字典中元组值的版本.这在许多领域都有应用,因为字典通常是web开发和数据科 ...

  10. python字典一键多值_python一键多值

    广告关闭 腾讯云11.11云上盛惠 ,精选热门产品助力上云,云服务器首年88元起,买的越多返的越多,最高返5000元! 推荐使用腾讯云 api 配套的 7 种常见的编程语言 sdk,已经封装了签名和请 ...

最新文章

  1. R语言导入.dta文件实战
  2. 如何实现tm同时监控多个状态的改变_广电机房监控系统【斯必得智慧机房】
  3. 锐捷升级最新版本出现虚拟网卡安装失败?
  4. powderdesinger显示中英文表名
  5. python写tcp通信程序_一个简单的基于TCP通信的服务器端与客户端程序
  6. 在SQL Server中使用sp_WhoIsActive监视活动
  7. 【优化算法】静电放电优化算法(ESDA)【含Matlab源码 1439期】
  8. jupyter notebook添加虚拟环境
  9. python实现的好玩的小程序--利用wxpy实现的微信可检测僵尸粉机器人
  10. 金融期货具体的开户条件
  11. 实现原理 扫描枪_条码扫描枪原理
  12. 秒懂设计模式之桥接模式(Bridge Pattern)
  13. Django学习笔记1 Web开发简介和Django安装运行
  14. 4 java多线程和高并发(待更新)
  15. pdfbox / XSL + FOP 转换 PDF文档
  16. Word 2003域应用完全手册
  17. 高新企业为什么要做CTA、SRRC、CCC认证?
  18. OS的互斥学习真的有趣!直接拉屎一语以破之
  19. 华为服务器显示f03报错,win2003服务器f新建ftp服务
  20. 在北京交通大学第十二届创业项目选拔大赛决赛

热门文章

  1. 测试鼠标宏软件,Mini Mouse Macro(鼠标宏设置工具)
  2. 机器学习系列手记(六):概率图模型之概率图模型的联合概率分布
  3. 计算二维离散随机变量的联合概率分布
  4. 17、Java——汽车租赁系统(对象+数组)
  5. MSM8937系统启动流程【转】
  6. 人工智能培训:是学不好,还是教不好?3岁半的 BitTiger关闭
  7. 颜色选择器(拾色器)
  8. MATLAB基本绘图
  9. button3 电脑上mouse,自定义鼠标按键(X-Mouse Button Control)
  10. ios模拟器 安装ipa_用iOS模拟器安装App的方法