详细分析分箱逻辑
参数分析
- train.SeriousDlqin2yrs 对应函数中的X值
61003 0 26974 0 64962 0 22271 0 21614 0 .. 133033 0 123509 0 18246 0 28850 0 16172 0
第一列参数 表示 一行索引值 可以理解成唯一主键id 第二列参数 表示 真实值 0表示坏客户 ,1 表示好客户
- train.RevolvingUtilizationOfUnsecuredLines 对应函数中的Y值
RevolvingUtilizationOfUnsecuredLines 信用卡和个人信用额度的总余额,除了房地产和没有分期付款债务,如汽车贷款除以信用额度
61003 0.119104 26974 0.042524 64962 0.067740 22271 0.866513 21614 1.000000 ... 133033 0.367954 123509 0.031879 18246 0.090163 28850 1.644518 16172 0.160312
第一列是行索引值 第二列表示总额度
函数实现逻辑分析
Y.sum() 表示好人总计 Y.count() 表示所有人 Y.count() - good 表示坏人个数 a、 循环初始条件:r = 0,n=10 b、 while循环条件:np.abs(r)<1 取绝对值 c-1、 循环过程中使用 斯皮尔曼等级相关系数 算法重新计算r值 c-2、 每次循环:n = n - 1 第一次循环:r=0 np.abs(0)==0 进入循环体 这个是对训练集X进行顺序排名 重复的值 谁出现在前面 就先排谁 X.rank(method="first")
这里简单介绍下 rank排名函数和qcut\cut函数
理解了这些函数的作用就可以更好的理解分箱算法对于数据处理的过程
- rank函数
举一个简单的例子 有一个数据源 字段:班级、姓名、成绩
目的:找出每个班级中排名第二的学生信息 需要做的步骤: 1、根据班级分组 2、每个组计算排名 3、筛选出排名为第二的学生 此时对于相同成绩的同学如何排名 a 顺序排名 先到先得 李四和王五的成绩都为30,但是李四出现在王五的前面,所以李四的排名靠前 当method取值为min,max,average时,都是要参考“顺序排名”的)
rank函数取值范围 ‘average’,’first’,’min’, ‘max’,’dense’ min和max是跳跃排名的一种 关于average,成绩相同时,取顺序排名中所有名次之和除以该成绩的个数,即为该成绩的名次;比如上述排名中,30排名为2,3,那么 30的排名 = (2+3)/2=2.5,成绩为50的同学只有1个,且排名为1,那50的排名就位1/1=1。 关于max,和min一样也是跳跃排名的一种,成绩相同时取顺序排名中排名最大的作为该成绩的名次,在顺序排名中,30最大的排名为3,那么当参数为max时,30的排名=3,此时,李四和王五的排名都为第3名了。
- qcut函数
跟cut()按照变量的值对变量进行分割不同, qcut()是按变量的数量来对变量进行分割,并且尽量保证每个分组里变量的个数相同 例子:把数据由小到大分成四组,并且让每组数据的数量相同 # 把变量由小到大分成四组,并且让每组变量的数量相同 d_qcut = d.copy() d_qcut['qcut_group'] = pd.qcut(d_qcut['number'], 4) d_qcut